case
8章4節のcaseに関して。
C言語とかでのswitch-case文みたいなことができるのね。
(case <key式> (リスト1 複数のS式) (リスト2 複数のS式) ... (リストn 複数のS式) (else 複数のS式)
まず
んで、リスト1、リスト2、...、リストnの順に要素に
同じかどうか調べる際に用いられる等価述語はeqv?。
リストiの要素は評価されないので、変数は書けない。これ要注意。
要素に同じものが見つかった場合は、隣の「複数のS式」を順に評価して最後のS式をcase全体の値とする。
(リストi 複数のS式)
の部分は、condのように
(リストi => 手続きを生成するS式)
とできる。
「=>」を使わない場合にはリストiの隣には複数のS式をかけたけど、使う場合には、手続きを生成するS式を1個しか書けないようだ。
ということで、caseを使ってみた。
gosh> (define score (lambda (card) (case x ((A) 11) ((J Q K) 10) ((2 3 4 5 6 7 8 9 10) card)))) score gosh> (score 'A) 11 gosh> (score 'J) 10 gosh> (score 2) 2