Open2

自作言語構想

taka2taka2

名前未定

  • Haskell風の文法
  • 非純粋関数型言語
  • 静的型
  • とりあえずtree-walking インタプリタ方式で
    • 将来的にはJITやLLVM
  • 速い言語が良いのと、使ってみたかったのでRustで作る
  • オフサイドルールは無し
taka2taka2

文法の構想

-- コメント

関数定義 (基本的に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