Cさん:年賀状、出さないですよね? それとも出しますか?出すか出さないかしかないので、この問題の答えは常に true だ。コードにすれば一目瞭然。
Kさん:うん
(define send-card? (lambda () #f)) ; 出さないつもりでも……ところが、実際にはこういう会話が成立する。
(or (not (send-card?))
(send-card?))
=> #t ; 答えは「うん」
Cさん:年賀状、出さないですよね? それとも出しますか?なんで排中率を放棄して false を返しているのか。
Kさん:いや(出さない)
それは鳥頭だからであって、ひとつめの質問を忘れちゃってるだけだよね。
(call/cc
(lambda (k)
(or (not (send-card?))
(k (send-card?))))) ; 忘れた
=> #t ; ???
どうして call/cc で脱出せずに #t が返るの?
2 件のコメント:
R5RS で or の仕様を見てみるといいかも
あ、そうか。or の最初の条件で#tが返っているだけだ。これははずかしい。ありがとうございます。
コメントを投稿