2006/12/08

日本語の疑問文で「それとも」は、 or 条件だと見なしていいだろう。
Cさん:年賀状、出さないですよね? それとも出しますか?
Kさん:うん
出すか出さないかしかないので、この問題の答えは常に true だ。コードにすれば一目瞭然。
(define send-card? (lambda () #f))  ; 出さないつもりでも……
(or (not (send-card?))
(send-card?))

=> #t ; 答えは「うん」
ところが、実際にはこういう会話が成立する。
Cさん:年賀状、出さないですよね? それとも出しますか?
Kさん:いや(出さない)
なんで排中率を放棄して false を返しているのか。
それは鳥頭だからであって、ひとつめの質問を忘れちゃってるだけだよね。
(call/cc
(lambda (k)
(or (not (send-card?))
(k (send-card?))))) ; 忘れた

=> #t ; ???

どうして call/cc で脱出せずに #t が返るの?

2 件のコメント:

匿名 さんのコメント...

R5RS で or の仕様を見てみるといいかも

k16 さんのコメント...

あ、そうか。or の最初の条件で#tが返っているだけだ。これははずかしい。ありがとうございます。