pasberth / Macra

Macro Oriented Language
4 stars 2 forks source link

!do は廃止する #58

Open pasberth opened 11 years ago

pasberth commented 11 years ago

もともと !do って

#[ a; b : *        -> *   -> *   = !do a b ]

これを書くために導入したんだけど、これって

#[ a; b : *        -> *   -> *   = !funcall !funcall !lambda x !lambda y y a b ]

と書き直せるはずなんだよね。 (今の master だとうまくいかないっぽいけど)

!do がなくなれば ! から始まる構文がぜんぶインストラクションと 1対1対応するのできれいな仕様になる

ympbyc commented 11 years ago

うまく行かないのは遅延評価だから、xがthunkのままになってaが評価されないから。 建前上Macraには副作用がないはずだから、これで問題ない。 要するに、!doを廃止したいなら、!doと!printを廃止すればいいと思う。

ympbyc commented 11 years ago

となると!defineをどうするかだけど、defineは関数への引数にはなり得ないから、そこだけ先行評価するとかかな。

pasberth commented 11 years ago

!print も廃止して IO モナドにしよう

pasberth commented 11 years ago

define だけ先行評価でいいと思う