- 1 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 00:09:48 ]
- ※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※
□過去スレ□ Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/ Part21: ttp://pc11.2ch.net/test/read.html/tech/1207300697/ Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/ Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/ 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/ Part09: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/ Part08: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part07: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part06: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part05: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part04: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part03: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part02: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part01: ttp://piza2.2ch.net/tech/kako/987/987169286.html
- 239 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:43:16 ]
- HaskellのMaybeモナドっぽく使いたいわけですよ
いろいろマクロを書いて試してます >>238 括弧を書きたくないのではなくて beginで値を捨てるのが好きじゃないんです 未規定値は#fかもしれないし真値かもしれないというのも気持ちが悪いです もしかしたら(eq? (write obj1) (write obj2)) -> #fかもしれませんし
- 240 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:00:06 ]
- 個人的には、未規定値は使ったとたんにエラーになる処理系が好ましいな
- 241 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:34:49 ]
- 0個の多値を返せばいいじゃない
- 242 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:54:07 ]
- and-let*の中で返り値が未規定な手続きを使ったり、
未規定値を比較する、といった発想が理解できない
- 243 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:57:40 ]
- 他コンピュータとの通信プログラムなどで
画面出力するというのが主ですね クライアントプログラムなどでREPLの介入が出来ない場合 デバッグのための出力を埋め込んだりもします
- 244 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:59:29 ]
- 未規定値の比較は実際には行いませんよ
ただ真理値も同一性も規定されていないから どうなるかはわからないといいたかっただけです
- 245 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 00:46:26 ]
- なぬ? (begin (write "hoge") #t) が恰好悪いですと?
そんな時こそマクロ〜
- 246 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 08:15:32 ]
- >>244
プログラミング向いてないのでは?
- 247 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 19:11:39 ]
- (define (tree-count elem tree)
(let f ((rest tree) (count 0)) (cond ((null? rest) count) ((list? (car rest)) (f (append (car rest) (cdr rest)) count)) (else (if (eq? elem (car rest)) (f (cdr rest) (+ 1 count)) (f (cdr rest) count)))))) (= 6 (tree-count '<> '(A B C <> (A <> (X <>)) <> (<> <>))) ; => #t こういうのでも末尾再帰になってるんでしょうか?
- 248 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 20:17:38 ]
- fの呼出しは末尾呼出しになってますね
- 249 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 09:03:03 ]
- >>239
ほんとにMaybeモナドみたいにしたいなら、そのように書くしか無いと思うよ (有効な値は全部Justでくるむとか、逆に「有効な返り値と決してeq?にならない 値」を失敗を表すのに使うとか)。and-let*で#fを特別扱いしてるのは 「大抵の場合うまくいく」っていう一種の妥協で、>>239のアプリは その「大抵の場合」から外れているってことだと思う。
- 250 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:00:41 ]
- 絶版になったと思ってたディヴィグ翻訳本
いつの間にかまた売られるようになってますね 3版ではなさそうですが
- 251 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 19:44:54 ]
- little schemerの継続の所が凄くわかり辛い(関数名からして意味不)
今の段階ではこういうのもあるって知っておく程度で詳細は他の本でカバーしろって事かな?
- 252 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:00:46 ]
- 頑張れ、ここで派を食いしばれってこと。
ドリルみたいなもんだから、逃避したら身には付かない。
- 253 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:07:49 ]
- 何の発見もない精神論だな
- 254 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:15:31 ]
- 結局shiroさんの記事とwikipediaとprogramming language schemeを参考にしましたけどね
- 255 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:15:31 ]
- ドリルでルンルンクルルンルン
- 256 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 15:02:19 ]
- >>251
具体的にどのページのどれが分からないか書かないとまともなレスは来ないよ常考。
- 257 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 23:09:46 ]
- 継続渡しのネタはP.137-147ですね
あとP.160ー173のYコンビネータのネタもややこしいですね 初見では10章よりも難しく思えましたまる
- 258 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 15:46:59 ]
- P.137の multirember&co の定義で2つコレクター出てくる。
ひとつは (lambda (newlat seen) (col newlat (cons (car lat) seen))) もうひとつは (lambda (newlat seen) (col (cons (car lat) newlat) seen)) 実は2つとも無名関数で再帰をしている。このコレクターが再帰のたびに別な関数になっていることをちゃんと理解できてるかな? これが分かるならP.140までは理解できているはず。つまりTenth Commandmentはコレクターを作れってことだよね。実行してみるとこうなる。 codepad.org/efWZQKk8 8章のテーマは確かに継続渡しなんだけど、無名関数で再帰することを上手にやるのがコレクターってこと。 9章のネタではさらに再帰のさせ方を工夫してやるとYコンビネータを作れるというお話。 P.137からP.140が理解できればコレクターとYコンビネータを両方とも理解できます。頑張れ。
- 259 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:08:06 ]
- Yコンビネータは memoization に役立つんだけど、それとコレクターは瓜二つで8章・9章のもとネタになっています。
- 260 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:28:25 ]
- >再帰のたびに別な関数になっていることをちゃんと
無名関数で新しい関数が作れることをマクロ内でやれるようになると、プログラムの記述量を物凄く減らすことができる。 SchemeなどのLisp系言語の特徴はプログラムの記述量が少ないこと。これを支えているのが8章・9章の考え方。 ここを理解できると「Lisp脳」の人たちの考え方に近づくことが出来ます。
- 261 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:45:03 ]
- Tenth Commandment・・・Lisp脳で問題を考え直せ
↓ ・コレクターを使ってみる ・Yコンビネータを使ってみる ・マクロを使ってみる。 そういえばSchemerシリーズにはマクロの説明が無いね。Reasoned Schemerでは使ってるけど。
- 262 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:45:52 ]
- 再帰というか自己参照ね。
それが無限の入れ子になったのが再帰。
- 263 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:00:17 ]
- >それが無限の入れ子になったのが再帰。
有限じゃないと処理が終了しない常考。
- 264 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:28:36 ]
- 弱参照も張らずにメモ化とな
- 265 名前:257 mailto:sage [2008/09/05(金) 17:53:48 ]
- chapter8,9を理解できるのがいまのところの目標であることはわかりますた。
sicp読んでみたけど1.11の反復版の答え見て「なんだこれは」と実力不足は実感しましたし。 Yコンビネータのところは www.ece.uc.edu/~franco/C511/html/Scheme/ycomb.htmlとか dangermouse.brynmawr.edu/cs245/ycomb_jim.htmlみながら読み返してます。 collectorについては 8章のmultirember&coは書き出したりしながら雰囲気は掴めたんだけど、最後のeven-only*&coの 一番ネストが浅いcondのelseのコレクターをどうするの?って言うところ(P.146の上から4段目)で ボブロスばりに答えの(lambda (al ap as)...)ってのが出てくるのが、面喰らいました。 でこれはpractical-scheme.net/docs/cont-j.htmlの末尾再帰と継続って項で説明されてるような考え方を使って ようやく「なるほど」って思える程度の理解に辿りついた次第であります。 マクロはTeach yourself scheme in fixnum days、Programming Language Schemeのマクロの項 あとOn Lispとpractice schemeのpractical-scheme.netのScheme:OnLispの項を参考にしてます。 elispを一年ぐらい触ってて()に抵抗が無いぐらいは馴染んでるつもりですが、それでもここまで詰まるとは… やっぱり生のLispってものは怒ろしいものですね。 あとmultirember&coの"&"の読み方がわかったのも収穫です、ありがとう皆
- 266 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:59:08 ]
- 弱参照(weak reference)の話を始めたらソフト参照もしなきゃならない。
ここではコレクターやYコンビネータの話をしてるのに。 メモ化(memoization)ですら話が遠くなるからあとにしてくれ。
- 267 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:00:05 ]
- そんな我が儘言われても・・・
- 268 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:22:31 ]
- multirember&co では lambda + collector は2つ使う。
multiinsertLR&co では lambda + collector は3つ使う。コレクターを1つ余計に使うだけ。 evens-only*&coでは lambda + collector は3つ使う。これは multiinsertLR&co と同じ。 multirember&co では a-friend の引数は2つ。 evens-only*&coでは the-last-friend の引数は3つ。コレクターの引数を1つ余計に使うだけ。 >一番ネストが浅いcondのelseのコレクターをどうするの?って言うところ(P.146の上から4段目)で >ボブロスばりに答えの(lambda (al ap as)...)ってのが出てくるのが、面喰らいました。 そこで詰まるのはプログラミングの概念が原因じゃなくてP.145の3段目が頭に入ってなかっただけでしょ。 分かってるみたいだし気にしないで大丈夫。
- 269 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:30:38 ]
- >>267
オマエ、弱参照が話したいだけだろ。ぼくちゃん知ってるよーみたく。ガキだねw
- 270 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:34:21 ]
- ここはおまえが演説する場所ではない
- 271 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:40:39 ]
- >>270
オマエが弱参照を教えてやれば? 他の香具師は優しく>>257に教えてるぞ。 なんでけんか腰になるかね?
- 272 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:48:39 ]
- >>269 みたいなこと言ってるガキには喧嘩腰が適切
- 273 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:50:56 ]
- >>266
「あとにしてくれ」とか書いてる時点で「おまえの演説」だろ。 ここは私物ではない。
- 274 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:56:22 ]
- 負け犬が暴れているようにしか見えないんだがw
- 275 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 19:05:47 ]
- 雑音気にしないで演説続けろ
- 276 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 19:26:53 ]
- メモリリークの話はHaskellスレでもやってたね。メモ化じゃなくて遅延評価だけど。
- 277 名前:デフォルトの名無しさん [2008/09/05(金) 19:40:48 ]
- LLFuture 動画リスト
www.nicovideo.jp/mylist/8224180
- 278 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:44:50 ]
- evens-only* (P.144)
codepad.org/Ys9BY5CQ ((9 1 2 8) 3 10 ((9 9) 7 6) 2) ↓ ((2 8) 10 (() 6) 2) evens-only*&co (P.145-146) codepad.org/9gVuGqhM ((9 1 2 8) 3 10 ((9 9) 7 6) 2) ↓ (38 1920 (2 8) 10 (() 6) 2) リストの中にリストがある場合の処理がちょっと面倒でした。
|

|