- 1 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:14:56 ]
- 過去スレ
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/ Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/ Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/ Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/ Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/ Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/ Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/ Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/ Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/ Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/ Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html
- 774 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:26:31 ]
- www.amazon.com/Scheme-Programming-Language-3rd/dp/0262541483/
The Scheme Programming Language, 3rd Edition これは評価が高いですが、やはり良書ですか? CのK&R相当らしく、数日でたくさん学ぶ人もいるらしいですが どうなんでしょう。
- 775 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:42:06 ]
- >>774
Second Edition と村上さんの邦訳をもっているけど、 3rdはかなり改訂されてるんかい?
- 776 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:49:40 ]
- www.scheme.com/tspl3/
- 777 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:55:25 ]
- >>776
おお、公開されてるんだ。Dybvigさん、太っ腹。
- 778 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:59:06 ]
- Schemers.Incの「The Schemer's Guide」が好きだったなぁ。
初心者向けの良い本だと思う。
- 779 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:08:16 ]
- Little Schemer P146
にある以下のプログラムなんですが、 (define evens-only*&co (lambda (l col) (cond ((null? l) (col (quote ()) 1 0)) ((atom? (car l)) (cond ((even? (car l)) (evens-only*&co (cdr l) (lambda (newl P S) (col (cons (car l) newl) (* (car l) P) S)))) (else (evens-only*&co (cdr l) (lambda (newl P S) (col newl P (+ (car l) S))))))) (else (evens-only*&co (car l) ; ここから以下がよく理解できない (lambda (al ap as) (evens-only*&co (cdr l) (lambda (dl dp ds) (col (cons al dl) (* ap dp) (+ as ds)))))))))) 特に (col (cons al dl) (* ap dp) (+ as ds)) とする意味が分かりません。 こういうものはどういう思考で捉えていけば良いのでしょうか? 具体値で考えると確かに正しいことは分かるのですが、それを一般式で 表すのが難しくて思いつきません。
- 780 名前:779 mailto:sage [2008/03/02(日) 00:31:17 ]
- 具体値を入れて考えたメモを見ていたら何となく見てきました。
(evens-only*&co (car l) ; ここから以下がよく理解できない (lambda (al ap as) (evens-only*&co (cdr l) (lambda (dl dp ds) (col (cons al dl) (* ap dp) (+ as ds)))))))))) (car l) と (cdr l) について再帰してそれぞれの結果を得る。 まず、(cdr l) に対して結果を得る。つまり、dl dp ds が具体値に 決まる。その後、その結果に対して、(car l) に対する再帰の結果 である al ap as を得て、(cdr l) に対する結果とマージする。 よく分からなかったのはlambda関数のパラメータでした。 自分としてのキーポイントは、 @lambda関数のパラメータが具体値に求まる。 Alambda関数のパラメータが具体値に求まる順番はネストの深い ものから始まる。 という風に考えるとよいかなと思いました。
- 781 名前:779 mailto:sage [2008/03/02(日) 00:36:37 ]
- 表現がおかしかったです。
(evens-only*&co (cdr l) (lambda (dl dp ds) (col (cons al dl) (* ap dp) (+ as ds))) 要は、まず上の部分の (cdr l) の再帰が先に終了し、そのパラメータであるdl dp ds が具体値に求まる。その後で、具体値に求まったdl dp dsとともに (evens-only*&co (car l) (lambda (al ap as) ・・・の (car l) の部分の再帰が行われる。
- 782 名前:779 mailto:sage [2008/03/02(日) 00:42:43 ]
- やはりパラメータが具体値に求まるというのはおかしいですね。
パラメータは変数なので。。 ただ具体的な値で追っていくと、例えば (col (cons al (2 4)) (* ap 8) (+ as 4))) みたいな感じで、dl dp ds 部分が決まっていくようです。 パラメータが具体値に求まるというのは、その程度の意味です。
- 783 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:58:27 ]
- >>779-782
; direct style (define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) ; accumulator style (define (fact n) (factacc n 1)) (define (factacc n acc) (if (= n 0) acc (factacc (- n 1) (* n acc)))) ; continuation passing style (define (fact n) (factacc n (lambda () 1))) (define (factacc n cc) (if (= n 0) (cc) (factacc (- n 1) (lambda () (* n (cc)))))) accumulator styleは演算子が可換、 あるいは逆から数え上げることが可能(e.g. (from n) ←→(to n))でないと困る。 例えばリストに対する演算の場合。consは可換でない。
|

|