Schemeで中置記法演算
やっぱり時代は中置記法なんじゃないかと思って、Schemeで中置記法演算してみた。
まず定義。eqはイコールの意味です。
(define (eq a f b) (f a b))
簡単デスネ。
(eq 1 + 2) ; 3
なんか親しみやすい感じですね!!
ちょっと読みにくいけど括弧を含む演算も出来る。
(eq (eq 1 + 2) * (eq 3 + 4)) ; 21
しかし、andが使えないことが判明。(Gauche&MzScheme)
(eq (eq -10 < 0) and (eq 0 < 10)) ; *** ERROR: invalid application: (#<syntax and> #t #t)
しかたないので、&&を定義してみた。
(define (&& a b) (and a b)) (eq (eq -10 < 0) && (eq 0 < 10)) ; #t
うん。出来た!!
つ、使わないかな・・・。
追記
ここまできてやっと手続きと特殊形式の違いがわかった気がする。
and,orは、部分式が必ずしもすべて評価されるのではないから、手続きではなく、特殊形式である。notは通常の手続きである。
SICP 1.1.6 条件式と述語
andは特殊形式(マクロ)なので、「手続きではない」。特殊形式を引数として渡す場合は、手続きとして再登録しなおす必要がある。しかし、new-ifのような事も考えられるので、完璧な再現は出来ないだろうと思う。