2011-12-12
cond…
ちょっと朝から勉強してたので、今の理解している範囲を書きだしておく。
Scheme手習いではifなんて書かれることがない。
ほとんどcondで書かれている。あまり気にすることもないのかなぁと思っていたが、Scheme手習いの説明と実際のcondの役目というのは若干違っていて、そのScheme手習い的にはそれなりにSchemeについて知っているのが前提となっているような説明(もしくは自分で調べる必要があるような説明)がされている。
(少なくとも今3章まで読んだがcondに関する記述なんて0に近かった。)
Scheme手習い中のcondの説明としては十分なものは無く、define・lambdaと並べて使われるような約束事のようなものという認識だった。
つまり、define・lambdaと書いたらcondと書かないといけませんよーみたいな印象を受けたわけだ。
これは決して僕の頭が悪いからではないと思う。実際そういうように書いてある気がする。
だからScheme手習いを最初に読むのを僕は勧めない。多少の知識を有してからあれは読むべきだ。
ということで、もうひとつのScheme入門的には以下のように書いてある。
(cond (predicate_1 clauses_1) (predicate_2 clauses_2) ...... (predicate_n clauses_n) (else clauses_else))この式では、predicate_1 から順番に調べ、一致した条件式のところの節を評価します。 条件に一致しない節は評価されません。
clauses_i には複数の式を書くことができ、最後の式の値が返ってきます。 どの条件も成り立たないときは clauses_else の値が返ってきます。
曖昧記述です。
ちょっと後で調べてみようと思いますが、「一致した条件式のところの節を評価します」とあるけど複数HITした場合はどうなるのか。また、「clauses_i には複数の式を書くことができ、最後の式の値が返ってきます。」これの意味がよく分からない。最後の式が返ってくるとは…。
まぁ僕の勘違いポイントはここらへんにあって、SchemeというかLISPの特徴だと思うんだけど、"評価した式の値が返ってくる"って結構重要だと思うんです。
condはてっきり実行したら#tか#fしか返さないと不思議な勘違いをしていて、たとえば
(define member?
(lambda (a lat)
(cond
((null? lat) #f)
(else
(or (eq? (car lat) a) (member? a (cdr lat)))))))
と書いてあれば
((null? lat) #f)
はlatがnullなら#tなので#f返しなさいってことなんですね。
こんな感じで"評価した式の値を返す"ってすげぇとなってます。
おしまい。
(色々と頭悪くてごめんなさい。一生懸命勉強中です。)
- 4 http://practical-scheme.net/wiliki/rssmix.cgi
- 4 http://t.co/NYLHvZF8
- 2 http://aya-bufferin.jugem.jp/
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=ayalog&source=web&cd=1&ved=0CB8QFjAA&url=http://d.hatena.ne.jp/ayato0211/&ei=xVLlToTRAo-VmQWO5byIBQ&usg=AFQjCNF6VGcKrIi0_4WDyLDBRbuta0G6bw&sig2=D3YjcPMcD61FFWmFgdlX3A
- 2 http://www.google.com/reader/igoogle-module?up_displayStreamId=user/07207573480185828061/label/hatena&up_itemCount=7&up_ranking=d&up_readItemsVisible=0&up_linkTarget=new&lang=ja&country=us&.lang=ja&.country=us&synd=ig&mid=106&ifpctok=1259185743703349798&e
- 1 http://k.hatena.ne.jp/keywordblog/Scheme
- 1 http://search.minakoe.jp/rsss/rsss.asp?pid=221627&plp=1&pd=2008/09/30&lid=3969&nlp=1&sd=2008/09/30&base=20&blp=1&bd=2008/09/30&multi=1&qry=perl
- 1 http://twitter.com/
- 1 http://www.google.co.jp/search?q=cygwin+mintty&hl=ja&client=firefox&hs=mZg&tbo=1&rls=org.mozilla:ja:official&tbs=qdr:y,lr:lang_1ja&prmd=imvns&source=lnt&lr=lang_ja&sa=X&ei=QqvlTverHYbPmAWXuJCOBQ&ved=0CAsQpwUoAQ
- 1 http://www.google.co.jp/url?sa=t&rct=j&q="セキュリティさくら"&source=web&cd=8&ved=0CFAQFjAH&url=http://d.hatena.ne.jp/ayato0211/20111204/1322956641&ei=mZvlTo-2JqnDmQWk7J3_BA&us
