Open2
自作言語構想
名前未定
- Haskell風の文法
- 非純粋関数型言語
- 静的型
- とりあえずtree-walking インタプリタ方式で
- 将来的にはJITやLLVM
- 速い言語が良いのと、使ってみたかったのでRustで作る
- オフサイドルールは無し
文法の構想
-- コメント
関数定義 (基本的にHaskellと同じ)
fib :: Int -> Int
fib 1 = 1
fib 2 = 1
fib n = fib (n - 1) + fib (n - 2)
関数適用
fib 5
可変長引数やデフォルト引数にも対応したい
Ocaml参考
optionfunc ?(n=1) = n * 5 -- このへんの文法はどうするのが一番自然?
-- カリー化との兼ね合いが問題?
optionfunc -- これを実行したときに5が返るかどうか(返るほうが嬉しいことが多そう)
optionfunc 3 -- > 15
optionfunc ~(n=5) -- > 25
ラムダ式
\n -> n + 1
パターンマッチ(case式)
a = [1, 2, 3] :: List Int -- リスト
case a {
5:_ -> []
_:xs -> xs
} -- > [2, 3]
標準のデータ型
リスト
list = [1, 2, 3] :: List Int
-- [1, 2, 3]は1:2:3:[]の構文糖衣
[1, 2, 3] == 1: 2: 3:[] -- > True