[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 21:23 / Filesize : 75 KB / Number-of Response : 279
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Lisp Scheme Part23



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)

リストの中にリストがある場合の処理がちょっと面倒でした。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<75KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef