Haskellは純粋関数型言語です。
副作用
参照透過性
命令型言語では一連のタスクを与え実行してもらうことで物事を成し遂げており、実行中は状態が変化可能である。
Haskellは怠け者です。
遅延評価
[補足]実際には業務でHaskellを書く場合、遅延評価で面倒なことも多いため、デフォルトの評価戦略を正格評価にする言語拡張が最近のGHC(GHC8.0)に入った。
Haskellは静的型付けです。
Haskellはエレガントで簡潔です。
Haskellはめっちゃ頭のいい人によって作られました。
GHC
ghci
というインタラクティブモードも用意されています2 + 15
17
49 * 100
4900
1892 - 1472
420
5 / 2
2.5
()
で優先順位を明確にすることができます
(50 * 100) - 4999
50 * 100 - 4999
50 * (100 - 4999)
1
1
-244950
負数を扱う時は ()
でくくらないとGHCIに怒られます
5 * (-3)
-15
5 * -3
-- これは通る。なぜなのか?
-5 * 3
-15
boolean
関連のoperator and: &&
, or: ||
, not: not
True && False
False
True && True
True
False || True
True
not False
True
5 == 5
True
1 == 0
False
/=
はnot equal、 x /= y = not (x == y)
5 /= 5
False
5 /= 4
True
"hello" == "hello"
-- `''`は1文字のcharacter、 `""`は複数文字(書いていないけど)
True
同じ型じゃないと +
とか ==
したときに怒られちゃうよ
- ちなみに整数は卑怯なので浮動小数点として振る舞える
5 == True
5 + 4.0
9.0
()
の中で記述する必要はなく、スペースを挿入する,
で区切らずスペースで区切るbar (bar 3)
はCでいうところの bar(bar(3))
succ 8
9
参考:
succ
(successor functionについて)
[補足]Haskellで関数のヘルプを見たり、関数を探したい場合どうするか
Hoogleで検索する。Haskellerはよく関数の型でふんわり欲しい関数を検索するらしい
検索結果からはHackageに跳んで詳細が観れる。(Pythonで言う所のPyPI)
min 9 10
9
min 3.4 3.2
3.2
max 100 101
101
succ 9 + max 5 4 + 1
16
(succ 9) + (max 5 4) + 1
16
div 92 10
9
92 `div` 10
9
関数名 引数 = 処理
doubleMe x = x + x
doubleMe 9
18
doubleMe 8.3
16.6
doubleUs x y = x*2 + y*2
doubleUs 4 9
26
doubleUs 2.3 34.2
73.0
doubleUs 28 88 + doubleMe 123
478
doubleUs x y = doubleMe x + doubleMe y
if
文はexpression5
は5を返すexpression4+8
はexpressionx+y
はexpressiondoubleSmallNumber x = if x > 100
then x
else x*2
doubleSmallNumber 101
doubleSmallNumber 100
101
200
doubleSmallNumber' x = (if x > 100 then x else x*2) + 1
doubleSmallNumber' 101
doubleSmallNumber' 100
102
201
命名規則