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)
552 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 09:17:07 ] 君も気にし過ぎでは。
553 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 03:28:11 ] schemeからcommon lispへのtranslaterはないみたいだけど 逆はあった. common lispからschemeに乗り換えて見ようかと思うんだけど 大幅に違うのは継続ぐらい?
554 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 03:32:06 ] practical-scheme.net/wiliki/wiliki.cgi?Scheme: マクロ:CommonLispとの比較:意味論
555 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 06:53:11 ] >>553 Lisp-1とLisp-2の違いとか、結構色々違いがあると思うけど。
556 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 09:16:29 ] 専ブラからだったら「リンクをコピー」でないと practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83%3a%e6%84%8f%e5%91%b3%e8%ab%96
557 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 16:50:46 ] オレオレlispを作ってみたいのでちょっと質問 schemeでは#fのみが偽だそうですが Common lisp使いから見たらこれはどうなんでしょうか なんとなく、#fと()がどちらも偽のほうが使いやすそうには思いますが 問題になるケースがあったりするのでしょうか?
558 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 16:57:35 ] 型チェックを厳しくしたいか、 (not-empty? x)の代わりにxが書ける簡便さを選ぶかの違い。 あなたのセンスで決めてOK
559 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 16:59:08 ] オレオレlispならいいけど、オラオラschemeを目指す場合、 意味が変わるので既存のschemeのコードがそのまま動かない 問題になるのはそれぐらい 既存のコードがきっちり動くってのはそれだけで楽しいから 昔scheme作った時泣く泣く準拠させたよ 中途半端はよくないと思った
560 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 17:10:24 ] なるほど。 作りたいのはオラオラschemeに近いので とりあえず#fのみにしとくのが無難そうですね ありがとう
561 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:19:05 ] >>559 それschemeじゃなくなっちゃうよ、Schemeみたいな俺Lispだよ Schemeを名乗るならRnRSに準拠しないと。 Lisp属を名乗るだけならなんでもいいけどさ。 ;;;; commonlispを名乗ると完成するまで大変過ぎる
562 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:49:08 ] 変なのきた
563 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:50:30 ] SchemeはRnRSにあらず RnRSからSchemeが生まれたんじゃなくて RnRSは後からできたわけでしょ? 他人に使わせることや複数人で開発することがあるとすれば 規格準拠にしたほうがいいに決まっているけど
564 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:55:20 ] すみません、質問させてください 木構造のmapのiter版って作れるんでしょうか なんとかこんなのを書いてみたんですが、flattenされてしまってます (define (tmap f t) (define (aux f t r) (cond ((null? t) r) ((not (pair? t)) (cons (f t) r)) (else (aux f (cdr t) (aux f (car t) r))))) (reverse (aux f t ()))) (tmap (lambda (x) (* x x)) '((1 2) (3 (4 5)))) ;こうなって欲しい '((1 4) (9 (16 25)))
565 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 23:37:10 ] (define (tmap f t) (cond ((pair? t) (if (pair? (car t)) (cons (tmap f (car t)) (tmap f (cdr t))) (cons (f (car t)) (tmap f (cdr t))))) (else t))) こうかな >(tmap (lambda (x) (* x x)) '((1 2) (3 (4 5)))) =>((1 4) (9 (16 25)))
566 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 00:08:38 ] lisp/schemeでリファクタリングしてると、時間があっという間に過ぎてしまうんですが、同じ 経験をしている人いますか?
567 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 03:30:41 ] >>564 (define tmap (lambda (f x) (if (pair? x) (map (cut tmap f <>) x) (f x))))
568 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 06:12:44 ] >>564 普通に書くと再帰が二カ所あるので、単純な繰り返しにはできない 末尾呼び出し版でよければ、CPSでこんな感じ (define (tmap f t) (define (aux t cont) (cond ((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))
569 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 06:44:58 ] >>564 (define (tmap f t) (define (aux f t r s) (cond ((null? t) (if (null? s) (reverse r) (aux f (caar s) (cons (reverse r) (cdar s)) (cdr s)))) ((not (pair? t)) (if (null? s) (f t) (aux f (caar s) (cons (f t) (cdar s)) (cdr s)))) (else (aux f (car t) '() (cons (cons (cdr t) r) s))))) (aux f t '() '()))
570 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 07:00:57 ] On Lispに書いてあるみたく継続使ってもいいよね。
571 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 07:21:29 ] リストの入れ子ならともかく 木構造ならcdrも'()でもpairでもない場合があるだろ。
572 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 07:54:59 ] 二分木ならともかく 木構造なら子が3個以上の場合があるだろ。
573 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 08:23:16 ] どちらも矛盾しないお
574 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 08:45:26 ] 571は572を包含するが、逆はムリ。 Lispの汎用的な処理で木構造といえば普通は571の方の定義。copy-treeとか。 www.lispworks.com/documentation/HyperSpec/Body/26_glo_t.htm#tree これはCommon Lispだけど、Schemeがこれに異を唱えるという話も聞かない。
575 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 08:50:36 ] ただし564はそれを意図したものではないと思われる。
576 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 09:10:45 ] ローテク版。アルゴリズム的には一番簡単? (define (tmap func tree) (cond ((null? tree) '()) ((pair? tree) (cons (tmap func (car tree)) (tmap func (cdr tree)))) (else (func tree))))
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先生と生徒のかけあいを楽しめばいいんだ。