1 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 19:12:39 ] ※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※ ■過去スレ Part25: ttp://pc12.2ch.net/test/read.cgi/tech/1231856193/ Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/ Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/ Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/ Part21: ttp://pc11.2ch.net/test/read.cgi/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://pc11.2ch.net/test/read.cgi/tech/1151025773/ Part14: ttp://pc11.2ch.net/test/read.cgi/tech/1132275726/ Part13: ttp://pc11.2ch.net/test/read.cgi/tech/1115901841/ Part12: ttp://pc11.2ch.net/test/read.cgi/tech/1100229366/ Part11: ttp://pc11.2ch.net/test/read.cgi/tech/1091456033/ Part10: ttp://pc11.2ch.net/test/read.cgi/tech/1075630259/ Part09: ttp://pc11.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 ■テンプレート置き場 ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)
577 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 09:49:16 ] この場合はどうする? (tmap null? '((() 2) (3 (() 5)))) ;こうなって欲しい ((#t #f) (#f (#t #f)))
578 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 10:26:36 ] (branch (leaf 1) (leaf 2))みたいにタグをつけないと (leaf ())と(branch)の違いが曖昧になるね
579 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 10:36:43 ] >>576 末尾再帰のものも、最初はそういうのから始めて継続渡しに変換して作る。 練習がてら、やってみたら。 (define (tmap f t) (let loop ((t t) (r '()) (s '())) (if (pair? t) (if (list? (car t)) (loop (car t) '() (cons (list (cdr t) r) s)) (loop (cdr t) (cons (f (car t)) r) s)) (if (null? s) (reverse r) (let ((st (list-ref (car s) 0)) (sr (list-ref (car s) 1)) (s (cdr s))) (loop st (cons (reverse r) sr) s)))))) >>577 carに現れる'()を要素とみるか空ノードとみるかの違い。 上の関数は4行目の list? を pair? にかえるという実にそのものの変更で所望の動作に。
580 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 23:06:49 ] (quote ())と(#%app)の違い。
581 名前:564 mailto:sage [2009/06/22(月) 23:39:28 ] みなさん色々ありがとうございました。 >>567 はとても短いし >>568 はすごく参考になります 主に>>568 を参考に、 >>571 や>>577 のケースも含めて動くものを書いてみました。 (define (tmap f t) (define (aux t cont) (cond ((and (pair? t) (null? (car t))) (aux (cdr t) (lambda (r) (cont (cons (f (car t)) r))))) ((null? t) (cont t)) ((not (pair? t)) (cont (f t))) (else (aux (car t) (lambda (r1) (aux (cdr t) (lambda (r2) (cont (cons r1 r2))))))))) (aux t values)) 以下のパターンで動きます (tmap (lambda (x) (* x x)) '((1 2) (3 (4 5)))) (tmap (lambda (x) (* x x)) '((1 . 2) (3 (4 . 5)))) (tmap null? '((() 2) (3 (() 5)))) (tmap (lambda (x) (* x x)) ())
582 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 00:59:09 ] ドットペアについては方針が分かれるよな リスト表現としてのツリーを普段どう見てるか ・対応する →初心者 ・無視する →中級車 ・エラーにする →高級車
583 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 01:43:54 ] car だけに
584 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 01:46:36 ] クダーらないギャグを言うなよ。
585 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 01:48:47 ] てめーもクッダらねーぞ
586 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 01:52:39 ] こんな時だけ加速するなw
587 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 02:20:07 ] carだけに
588 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 04:51:56 ] ヌルポ
589 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 04:20:36 ] Structural Operational Semantics tinyurl.com/lv4dzf
590 名前:576 mailto:sage [2009/06/25(木) 07:06:29 ] 時間ができたので継続渡しの再帰版を書いてみた。 もう>>564 氏のカタはついたようだが、すこしだけ短くなった気もするので エロイ人からの突っ込みを期待して書いておくことにする。 (define (tmap f t) (define (tmap-cps f t cont) (cond ((pair? t) (tmap-cps f (car t) (lambda (x) (cont (cons x (tmap-cps f (cdr t) values)))))) ((null? t) '()) (else (cont (f t))))) (tmap-cps f t values))
591 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 12:17:36 ] つ ((null? t) (cont t)) tmap-cps自体を関数として使うつもりがあるなら 内部でvaluesを決めうちしちゃだめよ
592 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 13:08:42 ] >>590 次はクロージャを使わずに継続をスタックで表現してみよう
593 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 13:22:41 ] >>590 >(cont (cons x (tmap-cps f (cdr t) values))) 部分式の値は一時変数に入れてから使う。 (tmap-cps f (cdr t) (lambda (y) (cont (cons x y)))) 本当は (cdr-cps t (lambda (d) (tmap-cps f d (lambda (y) (cons-cps x y cont))))) と書きたい。 en.wikipedia.org/wiki/Continuation-passing_style >The key to CPS is to remember that >(a) every function takes an extra argument, its continuation, and >(b) every argument in a function call must be either a variable or a lambda >expression (not a more complex expression).
594 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 09:08:05 ] GIMPのscript-fu (基本的にR5RS準拠) では 真偽値 #t, #f とは別に TRUE, FALSE の定数が用意されています。 標準のダイアログで真偽値を受け取ると TRUE, FALSE で受け取ってくるので 条件判定を (if (= flag TRUE) 処理) と書かなければいけないのですが、マクロなどを使って (if flag 処理) と書けるようにするにはどうすれば良いでしょうか?
595 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 10:09:07 ] >>594 うちのWindows上のGIMP 2.6.6でマクロを評価すると、 Script-Fuコンソール固まるから詳しいことは言えないけど、 hygienicじゃない伝統的なマクロは使えるみたいだから、 (define-macro (dialog-if test then . else) `(if (= ,test TRUE) ,then ,@else)) みたいなのでいいんじゃないか。 最悪、マクロ使えないなら、他の処理系でS式変換すればいいと思う。
596 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 10:19:17 ] 再帰を全て末尾再帰に変形する手続きとか論文のネタになってそうなものだけど どなたかご存じない?
597 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 10:22:21 ] CPS? foldrとfoldlの双対性?
598 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:22:23 ] >>595 GIMP2.6.5で試したところ期待通りの動作になりました。 ありがとうございます。
599 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 23:44:46 ] 最近思うこと schemeはカリー化を言語組み込みでサポートしたほうが シンプルになるように思うんだけど 今からそんなことをせずともpa$もcutもあるわけで R6RSはすでに十分実用的になってしまった感がする R5RSまでのシンプルさのが、良いなぁ
600 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 11:04:33 ] 前にも言ったけどね R5RSのマクロはcons, quote, quasiquote, mapなど一切使わないで書けるよ という意味でLisp界にとって危険な存在だからね 黒歴史ということにしたい人もいるだろう
601 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 13:10:18 ] カリー化って引数の並び順に依存するから そのままだとあんま便利とは思えない。 名前付きのキーワード引数をサポートして オプションを固定化するために使えればいいけど。 (define (http cmd host port url auth ... )〜) (define htttpa (http :host "192.168.10.2" :auth "")) (httpa :cmd "GET" :port 8080 :url "/") でも引数全部埋めないと実行できないから不便か
602 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 14:40:01 ] 引数を全部埋めるってのはデフォルト値の提供で解決するが しかし、どちらにせよ名前付き引数は嫌いだなぁ 5引数あって3引数埋めたら 2引数の:hoge :fugaを埋めたら使えるカリー化関数になるが これってつまるところ、structuralに型がついた関数なわけで ちょっと息苦しい 大体、引数が2個か3個の関数は多いし 引数の順番を入れ替えるのは3引数のflipみたいなのを使えばよくね (map (- 1) '(1 2 3)) (map (flip - 1) '(1 2 3))
603 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 15:53:12 ] >>602 うん、だからカリー化って意味ねーなと思って つーかカリー化前提でデフォルト値の提供ってどうすんの? そもそも引数たくさんあるような関数なら 自力でmake-httpみたいなパラメータ固定化手段を用意するだろうし
604 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 16:00:44 ] 足し算とか、引数の性質が簡単なやつならカリー化もいいけど 引数に値と関数を取るようなやつとか、 関数をいくつも引数にとって関数を返す関数なんかをカリー化したら 保守できなくなりそうだよ >>599 試しに作って公開してみてよ
605 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 17:09:16 ] カリー化はS式にターメリックやらスパイスを使えばいいよ
606 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 17:43:41 ] それ何て
607 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 19:54:04 ] ここできいて良いかわからないですが gauche-glをcygwinで動かせた人います?
608 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 20:35:17 ] やったことないけど出来るはず。 ちなみにMingwでは出来た。
609 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 21:07:16 ] cygwinで0.8.13では動いたよ 0.8.14ではなんかしらんがコケた
610 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 21:16:31 ] OpenBSDでguile-1.9.0のビルドがコケるんでソースを追ってみたんですが guileもboehm-gcを使ってたって知りませんでした それも5.2とか古いver よく今まで動いてたなとゾッとしました(メジャープラットフォームでは問題なかろうけど) Changes in 1.9.0を読んでかなりワクワクしながらビルドしたんですけど コケるんで萎えて放置中 偶数版リリースまで待ったほうがいいのかなぁ 1.8までのプラットフォームでちゃんと動くようになれば2.0はかなり期待大
611 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 17:15:24 ] >>608 これを聞いて、mingwのインストールからやってみましたが 私には無理でした。gauche-glのmakeで失敗します 具体的には(home-directory)が#fを返すためにそこでmakeが止まります gaucheのmingwでのビルドでは全てのテストにパスしていない (make testは9050/9067 pass)のが原因かもしれません cygwinは全然だめで ./configure --includedir=ほげ --oldincludedir=ふがを windowsとcygwinのパス表示で色々試しましたが GLUT/glut.hどころか、Cのヘッダ(sys/types.h等)も configureでnoになります。 (gaucheのインストールでは普通にyesになります) なお、glut自体はcygwin/windowsで動作確認済です Gauche-boxの存在にその後気づいてインストールしたのですが バイナリ配布されているgauche-glは リンク切れになっていました なんでもいいのでwindows環境でgauche-glが使いたいのですが バイナリ配布してる箇所って、他にないですかね・・
612 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 17:19:58 ] ほげとふがをわはとむすにすればうまくいくかもしれない。わけない。
613 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:42:22 ] >>611 saito.s4.xrea.com/?Gauche
614 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:26:25 ] >>613 はリンク切れ
615 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:05:08 ] >>614 悪い 今再Up中だからちょっとまってくれや
616 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:08:26 ] >>614 準備出来たでー
617 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:14:09 ] >>613 どうやってビルドしているんだろうか。詳しい手順が知りたい。
618 名前:611 mailto:sage [2009/06/28(日) 21:39:27 ] >>616 再アプ乙です!! 今、gauche-glの動作を確認しました これで思う存分図形言語で遊べる、ありがとう
619 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 01:04:48 ] >>617 忘れた。 でも、ひっかかったのはしょーもないことばっかりだった気がする。 ひっかかったところをそのつど修正すればだいたいいけるよ。 もしかしたら Gauche 自体もちょっとは弄ったかもしんない。
620 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 01:16:01 ] >>618 Cygwin でなくてよかったんかい? Mingw でビルドした Gauche はいくつかの機能が使えないよ。 重大なのはプロセスとスレッド関連くらいだけど。
621 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 14:53:46 ] 問題ない 窓使いでcygwin版を使いたがる人は少ないはず
622 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 14:37:48 ] schemeをさらにシンプルにしようと思って こんなのを考えてみたんだけどどう思う? consセルだけのほうが ()について非対称なリストよりもシンプル ;consセル版fold (define (cfold f a b) (cond ((not (pair? b)) (f a b)) (else (cfold f (f a (car b)) (cdr b))))) (define (cfold1 f lst) (cfold f (car lst) (cdr lst))) ;reverseがリストよりもシンプルで効率的に(appendなしで)書ける (cfold1 (lambda (x y) (cons y x)) '(1 2 . 3)) ;このままだと、「空」が表現できないので ;consを仮にこんな風に定義してみる ;()なら無視するcons (define (conss x y) (cond ((null? x) y) ((null? y) x) ;片側だけのほうがよいか? (else (cons x y)))) ;末尾に()がないと思っても良い (cfold (lambda (x y) (conss y x)) () '(1 2 . 3)) ;←これを言語レベルで'(1 2 3)と表記 (cfold (lambda (x y) (conss y x)) () '(1 2 3))
623 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 14:41:18 ] 「リストを末尾の要素に持つリスト」はどう表現するの、それ。
624 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 14:49:58 ] 普通に'(1 2 (1 2))という感じです (cfold (lambda (x y) (conss y x)) () '(1 2 (1 . 2))) (cfold (lambda (x y) (conss y x)) () '(1 2 (1 2))) ただ、空リストからなるリストは表現できないので これは不備だなぁ conssを片側だけにしてもreverseは動かないし
625 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 15:01:49 ] ああ、言ってる意味がわかった (cdr '((1 2)))が()だから今動いてるけど そうじゃなかったら動かないですね そういう意味ではリストの末尾は必ずatomじゃないとダメになるから これじゃダメだ
626 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:12:08 ] ボクの考えた最強のLISP(Scheme)! ってネタは尽きないよな 気持ちは判るが、妄想垂れ流す前に一度それで組んでみろよ >>622 みたいなのはすぐ作って確認できるだろ どう思う?って、俺はまたキチガイかと思ったよ
627 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:46:01 ] >>626 作らない奴はクソだ,と思っているんだろうけど, 設計は設計で,そっちも大事だと思うぞ。 全部作ってみろで返すのはひどい。
628 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:57:45 ] そういうネタだらけでスレが埋まってしまうのは困るけど 閑散としている時のネタとしてはアリじゃないかな
629 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 00:05:48 ] S式を2分木として見ればどうやっても歪に見える ドットペアを含むリスト(1 2 . 3)は /\ 1 /\ 2 3 リスト(1 2 3)は /\ 1 /\ 2 /\ 3 nil 主観ではcdrがconsかnilに統一されてる後者の方がシンプルだと思う 前者はcdrがatomという可能性をいつも意識するからハゲそう
630 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 02:24:46 ] 竹内先生の入門本が増補改訂版で出るらしいんだが、 Schemeなのかな。CLなのかな。
631 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:28:58 ] ICFPのプログラミングコンテスト、Steele兄貴の招待講演が Organizing Functional Code for Parallel Execution: or, foldl and foldr Considered Slightly Harmful ってなってるが、foldは悪なのだろうか 内容が気になるな
632 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:51:32 ] foldじゃなくてl or rだよ。 シーケンシャルなのを問題にしてるんでしょ。 >>630 これかな? www.amazon.co.jp/ 初めての人のためのLISP-ソフトウェアライブラリ-3-竹内-郁雄/dp/4781904548 特定の言語を対象としている本じゃないよ。このスレのように。 トピックスが増えるんじゃないのかな。
633 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 10:04:34 ] 演算がmonoidalならfoldも並列化できる (x + y) + z = x + (y + z) { associative } x + e = e + x { unit } x + (y + (z + e)) = (x + y) + (z + e) (((e + x) + y ) + w) = (e + x) + (y + w) ちなみにこれはfoldlからfoldrへの相互書き換えが可能になる条件でもある 多分この辺がslightlyに留まる理由で、 結論としてmonad最高!!ってな流れになったりならなかったりという予想
634 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 10:26:36 ] >>632 HMVはお取り寄せ可能になってる。 www.hmv.co.jp/product/detail/3608319 発行年月 : 2009年06月 出版社 : 翔泳社 seshop.com/ には載ってないが
635 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:14:49 ] 予約受付中? www.bk1.jp/product/03125439
636 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 16:08:20 ] >>633 wじゃなくてz使ってよ、気色悪いw
637 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 18:41:29 ] うはxxxxxxxxxおkxxxxxxxxxxxxxxxx
638 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 18:59:01 ] >>634 書店の人が出版社に確認してくれた。当初予定より遅れて 平成21年12月2日だそうだ。楽しみだね。
639 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 23:15:22 ] >>638 \(^o^)/
640 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:05:29 ] 入門Gaucheで勉強してるけどp64から急に難しくなってきたぜでもがんばるぜ
641 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:07:24 ] LittleSchemer読もうぜ
642 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:21:15 ] >>641 ありがとうだぜさっそくポチるぜ。
643 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:43:14 ] 竹内センセの本が出るのか。それは全力で買いだ。
644 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 04:18:45 ] 一冊あれば十分だけどなw
645 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 04:55:07 ] 増補で付録とか付くんかな? 竹内先生の本は持ってるけど、記念で買おう。
646 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 05:50:44 ] lisp本、wktkしてきたぜ。
647 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 06:20:20 ] 初めての人向けじゃなくって もっと突っ込んだの書いて欲しいな
648 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 06:34:49 ] 竹内先生監修シリーズって感じで、5人ぐらいに書かせればいいんじゃねえ?
649 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 09:42:11 ] Lispじゃないけどそういう感じの本あったよね。 意外と面白くなかったw それより雑誌bitのTAOの連載を合本したら面白いのに。
650 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 10:45:35 ] 今思えば、ビューティフルコードは初心者に媚びない所だけはよかった 日本であれぐらい書ければ、もっちーがファビョることもなかっただろうに
651 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:26:23 ] >>647 あの本は初心者向けの本じゃないよ。 Lispマニア向けの本だ。初心者が読んでもそれなりに楽しめるけど。
652 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:29:18 ] LISPの本と思わずに、T先生と生徒のかけあいを楽しめばいいんだ。
653 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 20:12:01 ] 初心者向けと書かれるとおれそんなんじゃないし読むことないや と結局買っても積んだままにしてしまう お決まりの言語のおさらいを数章割かれてるのを見ると頭に来るからだ いっそのこと超上級者向けのが興味をそそられる
654 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 20:24:17 ] >>653 SICP も初心者向だよwW
655 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:51:02 ] だから1章で飽きて放り投げちゃったんだよ。
656 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:05:20 ] 目次みて1章はつまんなそうだと思ったら3章あたりから読み始めればよかったのに。
657 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 00:37:31 ] 良い本は、 例え初心者向けと銘打たれていても、 光る記述で満ち溢れており、 熟練者でも楽しめるものなのだ。 だからグルの書いた本は面白いのだ。
658 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 01:45:12 ] 苫米地先生の事ですね。わかります。
659 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 01:54:17 ] >>658 ビビッタ。 実は、最近なぜか洗脳について勉強していたりする。関係あるの?
660 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 02:01:58 ] Lisperじゃん。
661 名前:デフォルトの名無しさん [2009/07/04(土) 02:02:46 ] とまちゃんだけはガチ
662 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 02:04:31 ] sage忘れたすまぬ
663 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 03:21:58 ] 竹内本は目次の時点で駄目だな
664 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 03:34:00 ] 無縁の衆生ですな。
665 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 05:49:37 ] >>655 もったいないお化けが出るぞ
666 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 19:46:29 ] The Little Schemer買ったお。たくさん勉強するお。
667 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 10:42:05 ] shibuya.lispどうだった、行った人?
668 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 12:41:05 ] >>667 面白かったよ。#4あるならLTしようと思ったくらいには(TTはなんいどたかい)。
669 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 12:47:18 ] すみません、以下のプログラム想定外なことだらけなのですが 以下のs1で、値が変更出来るようなプログラムは書けますか? schemeは値渡しなので無理なような気もしますが また、test関数では内部でtをset!しているにもかかわらず その変更は影響がないように見えますが何故なのでしょうか (define (s1 t v) (set! t v)) (define (sa t v) (set-car! t v)) (define (sd t v) (set-cdr! t v)) (define (sa2 t v) (let ((r (cdr t))) (set-car! r v))) (define (test f) (define t '(()())) (let ((r (f t 1))) (print t) (set! t '(()())) r)) (test s1) (test sa) (test s1) ;why? (test sd) (test sa2) ;(map test (list s1 sa sd sa2))
670 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 13:11:03 ] 引数のバインディング変えても外からは見えないだろ。 int f(int x) { x = 10; } やってるのはこれと同じ
671 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 13:17:32 ] >>669 set! は変数とオブジェクトの結び付き (束縛) を付け替えるオペレータ。 set-car! や set-cdr! はオブジェクト (consセル) の中身を変更するオペレータ。 ってことを念頭に置いて考えるとわかりやすいかも。 あまりに根本的すぎることなのでそこを理解できてないようだとちょっと説明しづらい。
672 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 13:26:06 ] > また、test関数では内部でtをset!しているにもかかわらず > その変更は影響がないように見えますが何故なのでしょうか 処理系がわからんから何とも言えんが、 おそらくその処理系は、クォートされたリストをすべての関数呼び出しで共有するように作られているんだと思う。 test 内の (define t '(()())) のところでは、 すべての関数呼び出しで共有される '(()()) というリストを t に束縛する、みたいな処理が行われる。 そこで、(test sa) を実行してしまうと、そのリストが '(1 ()) に書き換えられてしまう。 そのため、次回以降の test の呼び出しでは、'(1 ()) というリストが t に束縛されてしまう。 そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけないことになってるので、 こんな処理をすること自体が間違い。 やるんだったら、毎回リストを生成するようにする。 (define t (list '() '())
673 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 13:55:51 ] 問題をきちんと理解してから解答を考えよう って約束したじゃないですかー
674 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 14:02:00 ] >>672 > 処理系がわからんから何とも言えんが、 むしろ何も言うな
675 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 14:29:33 ] おまえがな。
676 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:05:14 ] shibuya.lispの参加者、もっと感想・ネタを書いてくれ。 悪口・不満的な話は、直接、主催者にメールでもしてくれ。
677 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:24:01 ] いずれ上がるだろう動画を楽しみに待つ