言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

非正格なスタック言語

スタック言語の上に最もプリミティブな Arrow が作れないだろうかと考えていて非正格なスタック言語が良いのではと思いついた。たとえば Haskell なんかだと、引数は必要になるまで実行されないので遅延評価を表現する為の特別な記法が無い。例えば Joy だと遅延評価はカギカッコ [] が要るんだけど、遅延評価がデフォルト(非正格)だったらカギカッコの要らない Joy が出来るんじゃないだろうか?

true 2 3 * 5 10 + ? . 例えばこんなの

? の意味をこんなだとする。

- true  x y ? -- x
- false x y ? -- y

普通の Joy (正格)なら

true 2 3 * 5 10 + ?
true 6     5 10 + ?
true 6     15     ?
6

非正格に実行すると。5 10 + を実行する必要が無い。* や + のアリティは
2 -- 1 と決まっているので、幾つ読み飛ばせば良いか一意に定まる。

true 2 3 * 5 10 + ?
true 6     5 10 + ?
6

こんな事が可能だろうか?