Files
Decodal/doc/manual/souce/language/functions.md
T

42 lines
1.2 KiB
Markdown

# 関数
関数は値を受け取り、値を返す純粋な式である。
## 構文
```dcdl
(value: Int) => value + 1
```
関数呼び出しは通常の呼び出し構文で行う。
```dcdl
let
increment = (value: Int) => value + 1;
in
increment(41)
```
複数の parameter を指定できる。
```dcdl
(input_a: { hoge = Int & >= 0; }, input_b: { fuga = Int; }) =>
{
hoge = input_a.hoge;
fuga = input_b.fuga;
}
```
parameter range は省略できる。
range がある場合、引数は参照された時点で `as` と同じ規則によって検証・絞り込みされる。
## Scope and evaluation
関数は lexical scope を持ち、定義された場所の bindings を参照する。
引数は遅延評価され、関数本体から参照されない引数は評価されない。
再帰的な field または argument の依存は cycle diagnostic になる。
関数は中間値として参照・呼び出しできるが、data として materialize できない。
未適用の関数が materialize 対象に残っている場合は diagnostic になる。
関数値同士の等価性は定義されず、`&` で関数値同士を合成すると conflict になる。