DrScheme で cond の挙動を見てましたが
少し混乱してきました。。

(cond 1)
;cond: bad syntax (clause is not a test-value pair) in: 1

(cond (a b) (c d))
;. . reference to undefined identifier: a

(cond (#f 1) (else 2))
;2

(cond (#f 1))
;

(cond (1))
;1 <-- 最後の要素のcarが採用!?

(cond (#f 1) (#f 2) (3))
;3 <-- 最後の要素のcarが採用!?

(cond)
; <-- なるほど。。

(cond (1 2))
;2 <-- ??

(cond (1 2) (3 4))
;2 <-- ??

混乱してきた ><;


COMMENT: AUTHOR: moremagic IP: 220.104.197.98 date: 2013-07-05T15:05:10.000Z

なるほど。未定義だったらダメなのですか!
未定義の英文字は勝手に文字列だと思っていました。><;

文字列ってじゃあなんだろう。。。
また新しい疑問がでてきちゃいましたが
cond については理解できました。

ありがとうございました。

COMMENT: AUTHOR: ayato0211 IP: 180.0.101.7 date: 2013-07-05T00:45:17.000Z

(cond (a b) (c d))に関しては、未定義だからエラーということになっていませんか?
(define a 10)
(define b 20)
(define c 30)
(define d 40)
とか宣言していれば、問題なく通ると思います。
もしくは、シンボルとして(cond ('a 'b) ('c 'd))こう書くか。
いずれにしてもcondに限らず、未定義のものは使えないので仕方ないです。。

COMMENT: AUTHOR: moremagic IP: 220.104.197.98 date: 2013-07-04T21:33:21.000Z

わかりやすい説明ありがとうございます

> Schemeでは#f以外は全て真です。
なるほど。(cond (1 2)) だから 2 なんですね。

でも、(cond (a b) (c d)) は b にならず
エラーになっちゃうのが不思議です。。。
他の処理系だと違うのかな?

とりあえずそんなもんだと思って前に進むことにします。
ありがとうございました。

COMMENT: AUTHOR: ayato0211 IP: 119.72.194.141 date: 2013-07-03T14:15:52.000Z

Schemeでは#f以外は全て真です。
ちなみにGaucheでは(cond)はエラーになりました。
また、condの節はテストと式で構成されますが、節にテストしかない場合はテストの値が返ります。
ということで、大丈夫ですかね?