Lisp Scheme Part30
■ このスレッドは過去ログ倉庫に格納されています
0696デフォルトの名無しさん
2010/07/13(火) 12:34:45(define t (lambda (x y) x))
(define f (lambda (x y) y))
(define if (lambda (p x y) (p x y)))
schemeは正格評価だけど、これらも一応動く。
けど、(if f (display "evaluated\n") 1)はevaluatedが出力され、1を返す式になる。
だからschemeではifやcondは手続きじゃ実装できない。
ifの中でdelayやforceをいくら使おうが無理。マクロを使う必要がある。
マクロもsyntax-rules使わないと実現できないかも?
遅延評価=非正格評価のhaskellなら、上の定義で十分。
t = \x y->x
f = \x y->y
my-if = \p x y->p x y
これで望みどおり動く。
my-if f (putStrLn "evaluated") 1も単に1を返す式になる。
■ このスレッドは過去ログ倉庫に格納されています