| 名前 | 型の表記 | 型の表記の例 | 説明 | 例 |
|---|---|---|---|---|
| 整数 | 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 } |
以下はFunction Questで使用できる値である
| 名前 | 型の表記 | 説明 | 使える値 | 例 |
|---|---|---|---|---|
| コマンド | Command |
プレイヤに対する命令。向きを指定する必要がある。 | Go, Unlock, AddItem |
Go(Up()) |
| 向き | Direction |
コマンドを実行する向き。 | Up, Down, Right, Left |
Up() |
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 }