Schemeで中置記法演算

やっぱり時代は中置記法なんじゃないかと思って、Scheme中置記法演算してみた。


まず定義。eqはイコールの意味です。

(define (eq a f b)
  (f a b))

簡単デスネ。


では、Scheme中置記法演算してみる。

(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のような事も考えられるので、完璧な再現は出来ないだろうと思う。

追記

もっと高度な奴。