Kmkm
プログラミング言語処理系が好きな人の集まり
定期ミートアップ 第1回
2021.05.30
岡本和樹
動機
代替
前提
方針
代数的データ型とパターンマッチ
おなじみ
(define
passenger
(list
(person
(list
(class uint)))
(pet
(list
(species uint)))))
(match
passenger
(list
(case
(person
(list
(var class)))
(foo))
(case
(pet
(list
(var species)))
(bar))))
pure / impure 関数の区別
Haskell でいうところの a と IO a
(bind
const
(function a int (function b int a))
(function int (function int int))
(list))
(bind
echo
(procedure
(list
(assign a readLine)
(term (apply writeLine a))))
(procedure unit)
(list))
線形型
一度しか使えない値の型 → メモリー領域を再利用していい
(bind
foo
(A.new 4 0 f)
Int
(list
(bind
f
(function1 a (Array Int)
(match (A.update 0 1 a)
(list (case (var a')
(match (A.get 0 a')
(list (case (tuple (Ur v)
(var a'')) (lseq a'' v))))))))
(list))))
A.update :: Word →
a →
Array a ⊸
Array a
1つめの Array a は1回しか使わないので同じ領域を Array a に再利用できる
進捗
代数的データ型 | できた |
パターンマッチ | まだ |
pure 関数 | できた |
impure 関数 | まだ |
線形型 | まだ |
パラメーター多相 | まだ |
アドホック多相 | まだ |
情報