-
Notifications
You must be signed in to change notification settings - Fork 0
Home
long_long_float edited this page May 26, 2016
·
1 revision
- シンプルに、最小限
- できるだけC-likeにする
| 名前 | 型の表記 | 型の表記の例 | 説明 | 例 |
|---|---|---|---|---|
| 整数 | Int |
1 |
||
| ブーリアン | Bool |
trueかfalseとなる値 |
true |
|
| リスト |
[Type] , Cons(Type)
|
[Int](Intのリスト) |
値の並び。要素の型は全て同じである。 | [1, 2, 3] |
| タプル | (Type1, Type2, ...) |
(Int, Int) |
値の並び。リストとは違い、要素の型は揃えなくてもよいが要素の数は固定である。 | (1, 2) |
| 関数 |
(InType1 -> InType2 -> ... -> OutType) (InTypeNは入力の型、OutTypeは出力の型) |
(Int -> Int) (Int型の引数を1つとり、Int型の値を出力) |
入力を取り、出力を返すもの | Int fun(Int x){ x * 2 } |
C言語のようにf(x, y, z...)で関数適用ができますが、第一引数をオブジェクト指向におけるオブジェクトと見立ててx.f(y, z...)と書くこともできます。
x.y().z()は以下と等価です
z(y(x))C言語のように
Int twice(Int n) {
n * 2
}とすることで定義できます。returnがないことに注意してください。
上記は以下と等価です
val twice = Int fun(Int n) {
n * 2
}値が属するもの。名前は先頭大文字(キャメルケース)。
プログラムは式を並べたものです。式はすべて値を持ちます。
変数は再代入不可。先頭に大文字は使えません。また型名の代わりにval と書くことで、型推論が使えます。
Int n = 10
val a = 2
elseは必須です。また、{}も必須です。
if(n == 0){ 1 }
else { n }
値や構造をマッチングして処理できる。C言語におけるswitchの強化版です。
値、リスト、タプルに対してパターンマッチが使えます。
// リスト
match(list) {
[] -> 0
Cons(x, xs) -> x
}
// タプル
match(pair) {
(x, y) -> x + y
}以下の文字列は識別子(変数名や関数名)に使えません。
fun
val
if
else
match
true
false
//の行はコメントとして扱われます
// this function twices a input
Int twice(Int n) { n * 2 }