cond の挙動
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の節はテストと式で構成されますが、節にテストしかない場合はテストの値が返ります。
ということで、大丈夫ですかね?
moremagic
2013-06-30