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 ] いずれ上がるだろう動画を楽しみに待つ
678 名前:デフォルトの名無しさん [2009/07/05(日) 15:48:43 ] つ www.nicovideo.jp/mylist/13373941
679 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:53:09 ] ニコに挙げたのか つべで探してたわ
680 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:53:51 ] 感謝。既に上がってるのは想定外だった
681 名前:デフォルトの名無しさん [2009/07/05(日) 15:54:39 ] つべはこっち。 www.youtube.com/view_play_list?p=C7D5490AD455E464
682 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:24:59 ] >>670-672 ありがとうございます >>671 関数の引数はjavaのように、 実体を指すポインタのコピーが渡ると考えれば良いですよね set!だとコピーしたポインタ自体を変更しても元データには全く影響がないが set-car!だと、コピーしたポインタの指す先を変更するので 引数にset-car!しても破壊的変更が可能 だとすれば、参照渡しで実現出来る 関数の実引数の実体を直接書き換えるような 関数の作成は不可能ですね >>672 >そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけない これは初めて知りました。これが原因ですね コードはGaucheとGuileで試したのですが どちらもクォートされたリストは共有されるような実装ってことですね
683 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:31:28 ] >>682 > クォートされたリストは共有されるような実装ってことですね 確か Gauche の場合は REPL が起動してるときは共有されないはず。 だからといってそれを期待しちゃだめなんだけど。 Gauche のマニュアルから引用 ↓ 注: R5RSは、リテラル式の値を変更するのはエラーであるとしています。 しかしGaucheはペアとベクタについてはそれが定数であるかどうかをチェックしておらず、 set-car!やvector-set!等の破壊的手続きによってそれらの値を変更してもエラーは報告されません。 そうした場合の動作は不定です。
684 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:45:19 ] 参照渡しって何か ダイナミックスコープっぽいような気がするけど この二つは何か関係あるのかな?
685 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:48:13 ] >>684 関係ない。
686 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:49:34 ] 全く関係ない。 参照渡しは仮引数/実引数バインディングスタイルの一つ ダイナミックスコープは自由変数のルックアップスタイルの一つ
687 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:52:02 ] そんなめんどうな話なのか? 局所変数と大域変数の話なのでは。 湯浅先生の「Scheme入門」だとP32〜。
688 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:58:16 ] koguro さんのトークは資料が見やすくていいなー
689 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:13:16 ] いちいちそんな糞本挙げなくていいよ
690 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:19:18 ] 湯浅先生を糞呼ばわりできるお前って何様?
691 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:23:28 ] 俺は>>689 じゃないけど、その先生が立派な人で、その本が立派なものだったとしても時代にそぐわなくなることってあると思うんだよなー。 湯浅先生の名前があればもう否定しどころがないみたいな言い方じゃなくて、もっと良い点と悪い点を検討する必要はあるんじゃないの? もちろん、糞本って言う方もどのへんが糞なのか示さないと議論にならんけど。
692 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:49:36 ] とりあえず糞って言っとこう的な煽りは2chの華だねw
693 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:51:06 ] たいした人でもないのに いちいち先生つけるなよ
694 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:52:53 ] 何の脈絡もなく 湯浅の糞本持ち出す687ってなんなんだろう?
695 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 20:03:58 ] 名著はちゃんと読んだ方がいいと思うぞ。 おっと、ここは2chだったな。玉石混交ですな。
696 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 20:13:11 ] 読む本は選べ 時間の無駄
697 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:01:42 ] 嫉妬ってみっともないなとオモタ
698 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:05:35 ] 糞本の宣伝に嫉妬とか
699 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:06:09 ] 釣れますか
700 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:18:47 ] >>690 生暖かく見守っといてやれって。
701 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:24:08 ] 湯浅の本なんて有り難がってよんでんのか
702 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 22:23:54 ] ところでここLispスレ
703 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 23:57:54 ] うっかりSICP
704 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 05:04:12 ] >>677 そういうことじゃないだろ。 実際に参加したの感想が聞きたいんだが。 いいアイデアが浮かんだとか、もっと○○の分野を勉強しようと思ったとか、その他いろいろ。
705 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 08:04:38 ] マ板行けよ
706 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 09:12:44 ] Scheme入門はちょっと古すぎる気がしないでもないな 内容もCommonLisp入門とほぼ同じだし。 でも絶版とはいえ某所でpdfでくばってたから結構読んでる人は居るんじゃないかな
707 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:32:27 ] >>701 ありがたがってるかどうか別として、先人への敬意が無い連中って 人として問題ありってことだと思うよ。
708 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:47:26 ] 世界初のCL実装
709 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:48:13 ] 世界初のCL実装でしょ。 MITあたりの人達もびっくりしたという。
710 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:52:02 ] Little Schemerに出てくるYコンビネーターってどういう利点があるの? 難しくてめげそう。だれか教えれ。プリーズ
711 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:56:15 ] 実用上たいして意味は無い (define (fact n) (if (= n 1) 1 (* n (fact (- n 1)))) みたいなのを、factっていう名前を使わずに 無名関数のみで定義できるという意義がある
712 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:57:21 ] そうそう。KCLをわずか2人で開発した日本が世界に誇るLisperだぜ。 本の内容は今となっては古い部分もあるが基本的な考え方は変わらないだろ。
713 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:01:27 ] util.sparse が組込みになってないのは、 やっぱ普通のスクリプト言語的用途だと従来のハッシュテーブルの方が効率はいいってことでいいんだよね?
714 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:08:15 ] >>710 無名関数のみで定義できるという意義ってナーヌ?
715 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:13:46 ] λ計算には関数定義なんてない 無名関数だけで再帰の計算が出来ることがわかれば λ計算だけで、色々な計算が出来ることが示せるわけ
716 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:16:46 ] スマヌ。 λ計算だけで、色々な計算が出来ることが示せると何が証明できるの?
717 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:19:42 ] ちょっとは自分で調べれ チャーチ・チューリングとかでググってみそ
718 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:26:54 ] >>717 ググッた。 「チャーチ=チューリングのテーゼとは、「計算できる関数」という直観的な概念を、帰納的関数と呼ばれる数論的関数のクラスと同一視しようという主張である。 このクラスはチューリング・マシンで実行できるプログラムのクラス、ラムダ記法で定義できる関数のクラスとも一致する。 よって簡単にはテーゼは、計算が可能な関数とは、その計算を実行できるような有限のアルゴリズムが存在するような関数、 よっておおよそコンピュータで実行できる関数と同じだと主張する。」 つまり、「SchemeはYコンビネータがあれば計算可能な再帰関数を有限のステップで計算可能ですYO!」ってことでおk?
719 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:31:18 ] 「あれば」じゃなくて「あるので」の方が正しいニホンゴかなw
720 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:38:34 ] schemeはYコンビネータを使わなくても計算可能な関数は計算出来る 普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当
721 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 14:22:44 ] >普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当 おお、そういうことなのか。でもよく考えると「計算できる関数」ってどういう意味かわからん。 とりあえず漏れの使う程度の関数は「計算できる関数」ってことか? じゃ、無限ループするようなバグがある関数は「計算できない関数」ってクラスなのか? どういう違いがあるとそうなるんだろう?
722 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 14:49:14 ] 「Lisp脳」の謎に迫る - Schemeプログラマの発想 karetta.jp/book-node/gauche-hacks/023107 上のページのように問題をリストの加工と捉えて (map 何らかの加工 (iota 100 1)) という風にすると、確かに処理が分かりやすいんだけど、 一旦、処理の過程の無駄なリストにメモリが使われますよね。 iota 10000000000 とかリストがでかくなった時を考えると、困ると思うのですが 僕が神経質なだけでしょうか。
723 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 15:07:17 ] (map f (iota 100 1))の場合で、仮にリストを順に辿って最後に結果を返す関数をgとして (g (map f (iota 100 1))のようにすればgの実装次第では コンパイルの結果、Cでfor (i = 1; i <= 100; ++i) {...}と書いたようなループになって 中間リストは一切作られない…ような最適化をする為の理論とかはあります common lispのseriesライブラリ等は、この手の中間リスト消去をある程度してくれると聞いてます
724 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 15:43:34 ] >>722 無駄を省くプログラミング技術はLisp, Schemeでも重要。 ただし、よいプログラマは本当に無駄なところだけ、改良しようとする。 (iota 1 10000000000)のセル消費が他に比べて負担が 大きいプログラムの多くはトイプログラムじゃないですか?
725 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:10:07 ] Haskellでも使えばいい
726 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:49:50 ] >>722 SICPにある遅延を使ったストリームによればいいんじゃない。 今のコンピューターはたっぷりメモリがあるんだし富豪プログラミングでも いいとは思うけど。
727 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 19:09:25 ] >>721 「ゲーデルの世界」(海鳴社)にそういった計算可能関数の話があった。 今、読んでいるところ。λ、チューリングマシンとの関係の説明も あったと思う。とりあえず原始帰納的関数から理解しようとしている。 Schemeが理解の助けになるかもしれない。
728 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:34:49 ] >>723-726 ありがとうございます。 >>724 >本当に無駄なところだけ やたらめったら改良するより、労力のコスパが高いところを見つけて改良すれば十分って話ですよね。 >>726 3.5.1にこの話題が出てますね。 ちょっと難しいけど、これがベストな解決策だろうなぁ。 遅延ストリームを使い始めると、何でこれ遅延ストリーム使わないの!!って思うようになりそうだ。 >富豪プログラミングでもいいとは思うけど。 反復だと時間さえかければ解けるものが リスト渡しだと記憶空間の限界に達したら絶対に解けないというのは 僕には気持ち悪さが残ります。
729 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:39:24 ] 足りなくなったら考えればいいのよ
730 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:59:14 ] 2000年問題、文字コード、IP枯渇・・・
731 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:38:55 ] >>727 チャーチ=チューリングのテーゼによれば、アルゴリズムのある関数は全て計算可能である。 つまり、アルゴリズムを学ぶことが計算可能関数を学ぶことに相当している。 そしてアルゴリズムを学ぶ際にはSchemeが理解の助けになる。 簡単にまとめると、「Yコンビネータがあるチューリング完全な言語ではアルゴリズムのある関数は全て計算可能である」ということになる。 あたりまえの事だけど、数学的に保証してくれてるので安心してプログラミングして計算ができるわけだ。
732 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:58:44 ] Yコンビネータの話とλ計算の話をごっちゃにしてはいけない。 コンビネータの話とλ計算の話はもともと別の話。それが途中で コンビネータの理論はλ計算の理論に翻訳可能だとわかったので、 同時に語られることが多いというだけ。 コンビネータ理論の歴史は古くて1920年代にSchonfinkelと言う人が始めて Curry(カリー化のカリー)が発展させた。
733 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 00:18:57 ] Yコンビネータに関する疑問について言えば、Yコンビネータの存在意義という のは、確か再帰の概念が存在しない言語において再帰と同等の物を導入するため、 だったと思う。
734 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 00:50:34 ] そういえば、ものまね鳥、あれからすぐに図書館に 返したんだけど。借りられたかな。
735 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:25:05 ] ここで>>368 のリンク先にあるラムダ式を簡約するArcのプログラムを読むと感動すること請け合いである。
736 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 07:39:45 ] >>713 詳しいことはドキュメントに書いてあるよ
737 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 11:14:49 ] まだ実験的なものかと思ってたのでドキュメント見てなかった でも、英語の説明しかねーや。 読むのめんどい。 ところで、 sparse って名前だと sparse な何かわからんので、 モジュール名はあんまりよくないと思った。 Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう…
738 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 11:28:27 ] 保守的GCと心中する気がなければ、ただの一時しのぎだろ
739 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 20:07:45 ] >>737 > Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう… その発想は鳴かった
740 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:26:48 ] >>731 計算可能な関数には3つの系譜があるようだ。 ○ゲーデル〜クリーニ 一般帰納的関数 ○チャーチ λ−定義可能な関数 ○チューリング チューリングマシンで実行できる関数 ゲーデルの流れだと原始帰納的関数は計算可能関数。 Lispの本の例題に登場するアッカーマン関数は原始帰納的関数ではないのだけど 帰納的関数であり計算可能関数らしい。階乗計算とかフィボナッチ数とかは 原始帰納的関数なんだと思う。詳しい方、間違ってたら補正してください。
741 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:49:28 ] >>740 チューリングマシンと等価なのは部分再帰関数であって、原始再帰関数は 部分再帰関数の部分集合に過ぎない。
742 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:54:14 ] >>740 あんまりわかんないなら,書き込まなくていいと思う.
743 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 00:23:08 ] ボイスコッド正規形ならクリーニアンクロージャ作れるからラムディ
744 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 00:46:46 ] 帰納的定義のackermann functionってこんな感じ? (define (iter f n) (if (= n 0) (f 1) (f (iter f (- n 1))))) (define (ack n) (if (= n 0) (lambda (m) (+ m 1)) (lambda (m) (iter (ack (- n 1)) m)))) (display ((ack 3) 5)) ;; nice curried...
745 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 08:32:21 ] >>741 740ではないが, 原始帰納関数 ⊆ 部分再帰関数 ⊆ 一般帰納関数 ということになるってこと? 部分再帰関数と一般帰納関数の違いって何?
746 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 09:48:29 ] function = partial function∪total function
747 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 09:58:51 ] >>745 一般再帰(帰納的)関数の定義は?Kleeneの言うgeneral recursive function の意味で言っているのなら、部分再帰関数の真部分集合。なぜなら部分再帰関数は 全域関数でもありうるから。 つまり、 原始再帰関数 c 一般再帰関数 c 部分再帰関数 ということ。ちなみに、原始再帰関数も真部分集合だぞ。Ackermann関数がその一例。 つーかおまい情報系出身か?この辺は一般常識だぞ。 門外漢なら計算理論の教科書を読むべき。
748 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 10:11:31 ] >>746 partial function ⊃ total function
749 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:01:30 ] オレ、門外漢なんで高橋先生の「計算論」を読んでみた。 関数と部分関数ってのがあるんだね。そこを強調するのに 部分帰納的関数という言い方をするんだそうだ。 一般帰納的関数はゲーデルの本にあった言い方で クリーニの1936年の論文らしい。邦訳があったら読んでみたい。
750 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 15:57:45 ] →ゲーデルのセミナーでの言い方 ゲーデルは共同研究やセミナーで使っただけで、 帰納的関数について長らく公表しなかった。 ゲーデルにとっては公表するほどの成果ではなかったらしい。
751 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 16:26:45 ] ゲーデルは算定可能という概念も提案した。 結局、これら6つの同等性が証明されてチャーチの提唱へ。
752 名前:baka mailto:sage [2009/07/08(水) 17:40:48 ] すいません、LittleSchemerが難しいと感じるのってやばいですか? いま2章のand again, and again...のとこなんですが意味わかめです。
753 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 18:17:37 ] どこがわからないんですか?
754 名前:baka mailto:sage [2009/07/08(水) 18:59:32 ] >>753 すいみません自己解決しました。 >What is the meaning og the line >((null? l) #t) を(#f #t) と勘違いしてました。 先に出てるdefine lat中の文章のことなんですね。もっとしっかりと読まねば。
755 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 19:11:45 ] しっかりしろバカ
756 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 21:27:55 ] 再帰関数(帰納的関数)は数学的に扱いやすい良い性質があるようですが、 なぜ関数プログラミングが世の中の主流になれないのですか?
757 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 21:29:43 ] >>747 情報出身じゃないっす。興味あるだけの人。 そうか一般再帰関数って最小解操作を許す全域関数(total function)の ことだったのか。
758 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 21:33:58 ] >>756 世の中の現象を反映させるにはオブジェクト(対象)指向じゃないとだめだろ 世の中にあるのは対象なのだから。 んでもって、対象間の関係が数学である。 オブジェクト指向開発されたシステムの真に理想的な姿というか関係が ”数学”になる、んだろ。 関数だけ持ってきても対象が無い(というか対象とは?と言う話になる) からどうしようもないとかそういう話じゃない?よく知らんが。
759 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:17:21 ] >>758 アフォ
760 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:41:17 ] >>758 ほんとに知らなすぎでワロタ
761 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:49:49 ] いえいえ。
762 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:00:31 ] “不運”(ハードラック)と“踊”(ダンス)っちまったんだよ に似てる
763 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:43:38 ] schemeってすばらしいですねぜひきわめたい。
764 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:50:35 ] 頑張れ Lisp/Schemeは面白いぞ
765 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 04:37:15 ] リリカルlisp ベルカ式はパターンマッチを主体としている
766 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:04:18 ] ΣxΣyf(x,y)な計算をSchemeで処理するはどう書けばいいんでしょうか。 Rubyで書くとこんな感じなんですが… v = 0.0 (0..10).to_a.each do |x| (0..10).to_a.each do |y| v += f(x, y) end end
767 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:23:06 ] 色々あると思うけど例えば (dotimes (i 10) (dotimes (j 10) (set! v (f i j))))
768 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:25:47 ] SRFI-42で (sum-ec (: x 11) (: y 11) (f x y))
769 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:02:45 ] (fold (lambda (n i) (+ i (f (car n) (cdr n)))) 0 (map (lambda (x) (map (lambda (y) (cons x y) ) (iota 11)) ) (iota 11)) ) unko
770 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:13:02 ] これぐらいならやはりlist comprehensionが一番かな
771 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:20:17 ] List comp(ryはlexical syntaxで読みやすさを獲得するから、 あまりLisp向きじゃないね。 blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/
772 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:52:27 ] 素直に再帰で考えてみたけど (define (sum1 n m f) (if (= m 1) (f n m) (+ (f n m) (sum1 n (- m 1) f)))) (define (sum n m f) (if (= n 1) (sum1 n m f) (+ (sum1 n m f) (sum (- n 1) m f))))
773 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 22:39:10 ] 竹内関数って原始帰納的関数なのですか? それともアッカーマン関数のように原始帰納的関数ではない帰納的関数なのでしょうか? (define (tak x y z) (if (> x y) (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y)) y))
774 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 09:42:18 ] >>773 再帰関数ではあるが、原始再帰関数ではない。
775 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:26:55 ] >>774 ありがとうございました。 区別がわかってきました。
776 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 17:24:17 ] set! による破壊的代入がなければ絶対に書けないプログラムって どういう種類のものですか?
777 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 17:26:59 ] 無限リストとかじゃね
778 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 18:11:07 ] クリンゴン、エンタープライズの位置座標 フェイザー砲の残りエネルギー、ダメージ
779 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:56:17 ] lispでStar Trekか www.xn--t8jcq9c.jp/~take/trek/trek-manj.html
780 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 21:51:43 ] >>779 あるんだねぇ。GCLで動いたよ。 あっけなくやられてしまった。
781 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 16:46:50 ] さっき知ったんだが schemeのcondって継続渡しみたいな構文をサポートしているんだな (cond ((or #f '(1 2 3)) => cdr))
782 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 23:04:55 ] 今日ずっと考えてるんですが解けないので もしわかる人いたら教えてください (cata n)で、n個の要素の括弧の付け替えからなる リストを生成する関数を作ろうとしてます 規則がよくわからなくてどうもうまくいきません 例えば (cata '(1 2)) ((1 2)) (cata '(1 2 3)) (((1 2) 3) (1 (2 3))) (cata '(1 2 3 4)) ((1 (2 (3 4))) (1 ((2 3) 4))) ((1 2) (3 4)) ((1 (2 3)) 4) (((1 2) 3) 4)) 要素数はカタラン数になるそうです (define (cataran n) (define (nck n k) (cond ((or (= k 0) (= n k)) 1) (else (+ (nck (- n 1) k) (nck (- n 1) (- k 1)))))) (/ (nck (+ n n) n) (+ n 1)))
783 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 23:18:25 ] >n個の要素の括弧の付け替えからなるリスト もうちょっと厳密に
784 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 23:48:43 ] >>783 わかりにくくてすみません 言い換えると 一度に2つの要素の足し算しかできない+を使って n個の要素を全て足すとしたときの 可能な計算の順序の指定の仕方と同じです 1+2+3は(1+2)+3と1+(2+3)の計算法があります これは(cata '(1 2 3))に対しての ((1 2) 3) (1 (2 3)) に相当します
785 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 00:01:04 ] ・二分木である ・葉にしか要素がない (>>784 で言えば数) ・分岐には要素がない (>>784 で言えば+) という場合、要素数がn個なら木の種類は? と同じ問題。 ・要素の間の何処に分岐点を持ってくるかの数え上げ ・二つの部分木に分けた後の分割統治 を考えればわかるでしょ。
786 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 01:16:07 ] 規則とかいってるからサンプル眺めるだけでえいやっと思い付こうとしてるのかな。 n=1からn=4, 5くらいまで自分で書き出してみれば考え方もわかりそうなものだが。
787 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 07:18:12 ] >>785 出来ました。ありがとうございます (define (cata l) (define (flat1 x) (fold append () x)) (define (aux n l) (map (lambda (x) (map (lambda (y) (if (and (pair? x) (null? (cdr x))) (cons (car x) y) (cons x y))) (cata (drop l n)))) (cata (take l n)))) (define (aux2 n l) (if (<= n 0) () (append (flat1 (aux n l)) (aux2 (- n 1) l)))) (if (< (length l) 3) (list l) (aux2 (- (length l) 1) l)))
788 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 08:28:51 ] ()を評価したら()でええの? エラーではないの?
789 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 09:08:13 ] 規定ではエラーだねぇ
790 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 09:11:14 ] >>787 (cata '(1 2 3 4)) の実行結果が、最初に書いてあった実行例と違うんですが (cata '(1 2 3 4)) (((1 2 3) 4) (((1 2) 3) 4) ((1 2) 3 4) (1 (2 3) 4) (1 2 3 4))
791 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 10:40:02 ] >>788 '()のがいいですね。Gaucheだとエラーにならないので 他の処理系使うまで気づきませんでした >>790 (1 2 3)を(1 . (2 3))のように見たら >>784 を満たしているので 中途半端ですが満足してしまいました 多分ちょっといじればその出力に出来ると思います
792 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:01:56 ] >>791 自分も考えてみたけどけっこう難しい例題だと思うよ。 根本的に書き直さないといけないんじゃない?悪いけど。
793 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:21:17 ] そんなことない、ちょっと書き直したら動きましたよ >>792 さんも考えてるかもしれないのでヒントだけ ネストしたmapの中身を修正するだけです
794 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:28:04 ] ちなみに srfi-42 使えばこんなに簡単 (define (cata l) (if (< (length l) 2) l (list-ec (: pos 1 (length l)) (: fst (cata (take l pos))) (: snd (cata (drop l pos))) (list fst snd))))
795 名前:785 mailto:sage [2009/07/12(日) 11:34:56 ] 実はドット対で二分木を構成した方が分かりやすい とアドバイスを入れるかどうか迷った。 結局元の問題と違っちゃうから書かなかったけど。
796 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:42:04 ] (define (cata xs) (cond ((null? xs) '()) ((null? (cdr xs)) (list (list (car xs)))) ((null? (cddr xs)) (list (list (car xs) (cadr xs)))) (#t (let ((a (car xs)) (b (cadr xs)) (rest (cata (cddr xs)))) (define (patr x) (list a (list b x))) (define (patl x) (list (list a b) x)) (append (map patr rest) (map patl rest)))))) うんこーどですが、どうでしょうか
797 名前:796 mailto:sage [2009/07/12(日) 11:43:40 ] 駄目ですた
798 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:50:51 ] >>794 これは神コード・・srfi-42かぁ
799 名前:792 mailto:sage [2009/07/12(日) 17:53:13 ] >>793 やっぱ、難しい。考えて相互再帰のこんなの↓考えた。 fooの部分はそれぞれのリストの直積みたいにすれば いいと思うのだけど、どうもうまくいかない。 また、考えてみるよ。 (define (cata ls) (if (<= (length ls) 1) ls (cata1 ls 1))) (define (cata1 ls i) (if (= i (length ls)) '() (cons (foo (cata (take ls i)) (cata (drop ls i))) (cata1 ls (+ i 1)))))
800 名前:792 mailto:sage [2009/07/12(日) 19:37:44 ] やっとできた。勉強になった。 (define (cata ls) (if (<= (length ls) 1) ls (cata1 ls 1))) (define (cata1 ls i) (if (= i (- (length ls) 1)) (product (cata (take ls i)) (cata (drop ls i))) (append (product (cata (take ls i)) (cata (drop ls i))) (cata1 ls (+ i 1))))) (define (product ls1 ls2) (if (null? ls1) '() (append (map (lambda (x) (cons (car ls1) (list x))) ls2) (product (cdr ls1) ls2)))) > (cata '(1 2 3 4)) ((1 (2 (3 4))) (1 ((2 3) 4)) ((1 2) (3 4)) ((1 (2 3)) 4) (((1 2) 3) 4)) >
801 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 20:35:35 ] >>800 おめでとん 自分の環境では、 3つのコード中>>800 が最速でした 参考までに >>787 の修正版も張っておきます (define (cata l) (define (flat1 x) (fold append '() x)) (define (single? x) (and (pair? x) (null? (cdr x)))) (define (aux n l) (map (lambda (x) (map (lambda (y) (cons (if (single? x) (car x) x) (if (single? y) y (list y)))) (cata (drop l n)))) (cata (take l n)))) (define (aux2 n l) (if (<= n 0) '() (append (flat1 (aux n l)) (aux2 (- n 1) l)))) (if (< (length l) 3) (list l) (aux2 (- (length l) 1) l)))
802 名前:デフォルトの名無しさん [2009/07/13(月) 11:09:33 ] >>758 すまん、まじめに反応してみるが、 それは命題論理->一階述語論理の流れでは歴史的事実だが、 そこでの対象指向自体は、関数プログラミングとOOプログラミング を篩にかけるものではない。FOLレベルのオブジェクトであれば、 関数プログラミングだろうがなんだろうがまあ存在する。 また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の すべてという意味なら、それは正しくない。
803 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 15:42:48 ] 何も理解してないバカと説明する気のないバカ
804 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 16:29:33 ] 数値計算に比べて数式処理は世の中の主流になれないみたいな感じなのかな? map f (map g xs) == map (f . g) xsとか、数式処理みたいなものだと思うんだけど。
805 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 17:05:23 ] う〜ん、難しくてよくわからないな。 x = x + 1 みたいな変なのがプログラミングの世界ではまかり通ってる のだけど、こんなの普通の高校や大学初年で習う数学じゃ扱えないはず。 高度な数学なら扱えるのかな?もっと詳しくお聞きしてみたいです。
806 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 17:19:31 ] 数式処理が主流になれない理由は、解析的に解けない問題がたくさんあるから、だね。
807 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 17:38:25 ] >>805 en.wikipedia.org/wiki/Fixpoint_theorem
808 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 18:44:18 ] set-car!とset-cdr!を使って (define a (list 1 2)) このaを'()にすることは可能ですか?
809 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 18:54:26 ] gosh> (define a (list 1 2)) a gosh> (set-car! a 'quote) #<undef> gosh> (set-cdr! a '(())) #<undef> gosh> a '()
810 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 19:11:28 ] 手品みたいですね ()にも出来るのでしょうか?
811 名前:デフォルトの名無しさん [2009/07/13(月) 19:22:14 ] >>804 それは、より正しくは、Numeric ComputationとSymbolic Computationとの 比較のことだと思うが、そうであるとして、 それと、関数プログラミングとそれ以外(おそらく命令型?)の比較は同型ではない。 NCとSCは、806の言うとおり、そもそも活用できる問題領域に大きな差がある。 >>805 x = x + 1 は算数の意味論で言えば明らかに偽な文だが、数学の世界であってもこれが 有意義になる意味論を定義することはできる。 なので一般性をもってその観点でそれを否定することはできない。 命令型プログラミング言語において、この式または文が、x + 1 が環境への参照であり、 x = は環境への束縛の操作であるという意味論であることを想起させにくいという点で いえば同意。
812 名前:デフォルトの名無しさん [2009/07/13(月) 20:43:07 ] >>810 set-car!,set-cdr!は対象がpairであることまでは破壊しないので、 pairとしての表現を持たない空リストにするのは無理じゃないかな。
813 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 20:53:23 ] gosh> (let ((src (list 'a 'a)))(set-car! src 'quote) (set-cdr! src '(()))(eval src (interaction-environment))) () ;; unko-
814 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 21:42:37 ] >>805 > x = x + 1 C/C++ では lvalue と rvalue を区別してフォーマルな意味論を与えられている。 後付けの感は拭えないが、ちゃんと扱える理屈は存在する。 厳密な意味においては数学的とは言えない面はあるけど、 プログラミングに必要な要素ってのを考えると充分な妥協だと思う。
815 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:25:27 ] >>805 Hoare Logicだな 実行文の前でのxの値をX,実行文の後ではYとすると このプログラムが正常に動作すると仮定すれば {x=X} x:=x+1 {x=Y}というHoare Tripleが構成できて、代入の規則から x=X ≡ (x+1=Y) <=> x=X ≡ (x=Y-1) ← X = Y - 1 ≡ Y = X + 1 ってな具合にxに1を加えるっていう動作をする事が証明できたりする 代入を感覚で理解できなくて、 a=10,b=20; a=b; a=?,b=?;っていう問題を解けない人でも、この技法を使えば 計算で解くことができる、素晴しい!! 勿論、こういう単純な例だけでなく分岐やループも扱えるんだけど 「ループで配列内要素の総和を求める」っていうような問題でも A4レポート用紙2枚に収まるか怪しいような長い証明を 書く羽目になるから、そうバシバシ使っていけるものでもないな これと比べるとdependently typeとcurry-howard対応の何と実用的なことか…
816 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:39:18 ] >>805 代入と等式を混乱していないか
817 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:02:30 ] tinyurl.com/mwees3 なんで16年前のメールがgoogleグループにあるんだ?
818 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:09:09 ] ログが残っているから
819 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:34:06 ] tinyurl.com/m92nbe 5月には圏論をやっとる。
820 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:42:43 ] 直リン張らないほうがいいな。すまん。
821 名前:805 mailto:sage [2009/07/14(火) 07:36:23 ] >>815 知りたかったのはそういうことです。 関数プログラミングは高校で習った帰納的定義、数学的帰納法など 普通の数学の延長にあるように思えました。 一方、命令型の破壊的代入を主体とするものには理屈はあるのだろうか? と思っていました。実用的なものが関数型だけで書けるとは思ってないのですが。
822 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 07:58:33 ] Static single assignment的に、 X_1 = X_0 + 1 と考えると面白い。 あるlambda式をlambda droppingすると、それは、 対応するSSA文をoptimal変換したことと同じ。
823 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 09:11:10 ] >>821 それならホーア論理じゃなくてチューリング機械じゃないの?
824 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 11:49:11 ] ・表示的意味論(ピラミッドの頂点=神) 数学の延長。 ・公理的意味論 ホーア論理。長い証明を書く羽目に。 ・操作的意味論(食われるだけの存在=ミジンコ) 抽象機械。
825 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 16:03:26 ] >>824 言いたいことはわからなくもないが、3つとも数学だろ。
826 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 16:25:00 ] >>821 意味論というより、命令型プログラミングの根拠となる計算モデルを 知りたいということではないのか? だとすれば、RAMモデルでは破壊的代入が定義されている。
827 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 22:34:41 ] >>824 Aczelの項書換えシステム。文脈原理。
828 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 23:08:19 ] >>805 が知りたいこととは違うかもしれないが プログラミング言語論に関しては 構文論(syntax)と意味論(semantics)という大きな分類がある >>824 の分類は意味論(semantics)の中での分類 構文論はx=x+1の数学的な意味は考えずに これら言語の構造自体について扱う 式の「意味」という意味では 代入に=ではなく:=や<-を代入に割り当てている言語もあるわけで 構文と意味は独立なわけ そもそも数学は代入のような副作用ってあまり扱ってないように思う 俺が知っている中で副作用を扱っているのは 線形論理ぐらいかなぁ A:「100円持っている」 B:「80円以上持っていればパンが買える」 C:「50円以上持っていればチョコレートが買える」 A→Bは真 A→Cは真 よって「100円持っているならばパンとチョコレートが買える」
829 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 23:31:26 ] 線形論理ってアスペルガー症候群みたいな感じだね。
830 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 00:14:28 ] 逆では? 線形論理では、上の例でA→B∧Cが成り立たない。
831 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 04:13:43 ] >>828 805です。自分でも何を知りたいのか混乱していました。 表示的意味論です。 「プログラム意味論」横内寛文著(赤本)は持っているのですが よく理解できていません。R^5RSに収録されているのは表示的意味論 とのことで理解したいとは思うのですが。 ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった そうですが何故なのかと思っています。
832 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 05:12:42 ] Operational Semanticsは意味論を勉強してなくても簡単に理解できるからな。
833 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 05:18:25 ] > 「プログラム意味論」横内寛文 その本読んでみたいんだけど売ってないんだよね。
834 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 12:17:28 ] >>831 >ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった >そうですが何故なのかと思っています。 表示的意味論が分かり難い上に実装にも証明にもあまり役に立たないから。 しかもR5RSのは矛盾だかあいまいさが証明されてたはず。
835 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 17:43:24 ] >>805 意味論を理解することが目的なら、もう少し具体的に今どこがわからないのかを 示せばここで解説される可能性はある。 意味論がさっぱりわからん、ということでしかないとすると、本読め、以外にない。 意味論を理解することが目的じゃなくて、何かをするために意味論を理解したい なら、目的を示した方がいいと思う。それについて助言可能かもしれない。
836 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:08:29 ] >>828 いや、変数、変項、というのは形式的な数学では日常茶飯事だから、 代入というのは数学でもよくある概念じゃないか? それは人間の 頭の中で実施されることが多いが、何かを証明するときに紙に 書いたりもする。 よくある概念であるがゆえ、それ自体が明示的な対象となるのは数学基礎論 にはなるが。 あと、一見代入だからといって副作用を伴うとは限らない。 述語論理のユニフィケーションとかもあるし。
837 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:17:42 ] 代入?いいえ項書換えです
838 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:25:32 ] >>835 805です。数学がわからないと数学を必要とするコンピューターの理論も 理解できないのではないかと思いしばらくの間、数学の勉強に行っていました。 目的はプログラムと数学との関連の理解です。 本を読みつつ、ご助言を仰ぐこともあるかもしれません。よろしくお願いいたします。
839 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:49:37 ] 真面目に勉強するなら2chにレスしてないで本読めでぶ
840 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 19:03:00 ] >>839 ああ、ここは2chだってことを忘れてた。でも玉石混交だから。
841 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 19:18:18 ] >>838 それなら、まずは計算可能性理論を勉強してみると良いな。
842 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 20:27:45 ] >>838 上にでてきたfjとか。2chだとせっかくの話が消えてしまう。 ただ、迷惑にならないようにしたほうがいいだろうけど。
843 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 21:04:29 ] >>802 >また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の >すべてという意味なら、それは正しくない。 難しい話になるとは思うのですが、現時点では”数学”とは何を指している 言葉だといえるのですか。 マックレーンはアイディアを抽出化して形式化したものが数学だ、形式機能主義だ と言ってるんですけど、それって、つまり数学的対象とはあくまで形式という事なんですか。 確かに、理解していないバカではある。書いてて確かに思う。 けど、表立っては出ないがこういう話が問題になる分野領域は存在する気がするんだよね。
844 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 21:16:33 ] もう十分以上の情報が出ているぞ 耳学問としょうもないプライドのせいで 無知だとかバカだとか思われたくないからいつまでも演説を続けるんだろうが いいかげん黙れ
845 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 21:19:29 ] 805=815で釣りでもやってるのかと思ったが
846 名前:802 mailto:sage [2009/07/15(水) 22:41:53 ] >>844 おお、すまなかった。誰を指しているかがイマイチわからんが、 この流れをつくった私がいけないのだろう。 >>843 というわけで、すまんが退散しようと思う。844の言うとおり、 結構いろいろな情報が出ているので、参考にして欲しい。 お邪魔しました。
847 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 01:17:17 ] >>844 混在してわけがわからないことになってるけど、いくつか独立した話しが 並行して進んでいるんだよ。 それに、そんなぶっきらぼうに言っちゃうとみんなびっくりしてしまうよ。
848 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 01:43:59 ] たまに情報学板のことも思い出してあげてください。
849 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 01:48:23 ] 確かに最近の話題は情報学板の方が向いてるな。 あそこ過疎りすぎだけど、見てる奴はそれなりにいるっぽい。
850 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 03:37:46 ] >>838 数学とか理論計算機科学の話題だったらプログラム板はやめておいたほうがいいよ。 でたらめな情報が多すぎてろくなことがないから。
851 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 04:02:29 ] >>850 情報学板に移動するよ。ありがとう。
852 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 08:45:47 ] ERR5RS(だっけ?)って幾らかでも流行ってるんですか?
853 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 13:51:52 ] 顧みるにR5RS自体流行ってるかな? お察しください
854 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 16:05:08 ] LOL邦訳本ってamazonじゃ普通に買えないんだろうか。 ページはあるんだけど、なぜかプレミア価格の出品しかない。(´・ω・`)
855 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 22:57:07 ] まさかすぐに絶版にしたりしないよね?
856 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 00:11:40 ] SICPの悪文と格闘している間にLOL翻訳が出てしまったんだな。 On Lispも積読になってるが、LOLも積読しとく事にしよう。 以上チラ裏でした(・∀・)
857 名前:デフォルトの名無しさん [2009/07/17(金) 01:43:00 ] >>854 Let Over Lambda 日本語版 サポートページ hop.timedia.co.jp/show/book/Let%20Over%20Lambda >なお、現状Amazon.co.jpではマーケットプレイス以外で購入できなくなっています。 >他の書店、オンライン書店では普通に購入いただけます。 COMMON LISP JP > Archives > 2009/07/15 practical-scheme.net/chaton/common-lisp-jp/a/2009/07/15 >出版元にも聞いてみたんだけど、 >アマゾン内部の問題らしくて理由はわからん、とのことだった >版元品切れなわけじゃないんだけど LET OVER LAMBDA Edition1.0 (Amazon) www.amazon.co.jp/dp/4434133632/ >この本は現在お取り扱いできません。 LET OVER LAMBDA Edition1.0 (ジュンク堂書店) www.junkudo.co.jp/detail2.jsp?ID=0110264349 >池袋本店 33冊 在庫有り
858 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 01:43:50 ] >>855 弱小出版会社だから、東販/日販の初回取り扱いが少なかったんだと思う。 注文すれば、出版社に発注されるでしょう。在庫はしているだろうから。
859 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 05:31:14 ] ふぁびょったってしゃーない。
860 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 05:33:54 ] と書いたけど、LOLが売れるとはおもえない。グレアムのような知名度もなけりゃ LOLそのものがそれほど定評だったレビューもなかった。 なにより、極度にマニアックだから。 細く長く生き残ればよいという本だと思う。
861 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 05:55:53 ] On Lisp はついてけないけどLOLは単にLisp最強伝説本として楽しめた
862 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 07:36:45 ] COMIC LOL
863 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 13:09:17 ] LOLは前提知識それほど必要ないの?
864 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 13:28:47 ] いまから買いに行こうと思ってたのに・・・・・
865 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 14:49:16 ] >>863 コードが短くて解説がうまいから分かった気分になれる
866 名前:863 mailto:sage [2009/07/17(金) 16:44:02 ] >>865 じゃあ丘リスパーの漏れにぴったりでつね(自嘲
867 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 02:23:20 ] >>852 ERR5RSは、実際に対応してるのはLarcenyくらい。 提唱者のWilliam D Clingerが開発してるから当然だけど。 Ypsilonは対応予定。Gaucheもそのうち対応する予定。予定は未定。 他は知らない。 ちなみに、ERR5RSで書いてる人はいる。主にLarceny-usersとかに。 というわけで、will先生の活躍に御期待下さい。
868 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 07:43:54 ] 連休中、みなさんはLOLを読みふけるのでしょうか^^
869 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 09:23:21 ] とりあえず著者はVimmerってとこまで読んだ。
870 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 09:38:45 ] とりあえずForth最高!ってところまで読んだ。
871 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 11:43:17 ] postscript万歳!ってところまで書いた
872 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 12:36:02 ] LOL、オビの煽りに苦笑い、スルーw
873 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 13:46:39 ] lolって略はネトゲ的にどうなんだろう
874 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 13:55:47 ] LOLは元々ネトゲ用語じゃないよ
875 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 18:40:27 ] MUDからUsenetに輸入された可能性もあるので一概にそうとも言えない
876 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 21:09:04 ] emacs論だけ立ち読みすれば十分な本だな
877 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 22:35:35 ] >>854 今見ると「一時的に在庫切れですが、商品が入荷次第配送します。 」だそうですよ
878 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 22:48:12 ] タイトルがかっこいい class over defとは違うんですみたいな
879 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 00:51:52 ] lol=laugh out loudly だからwwwwwwwww だよ。
880 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:28:37 ] Lispは関数型言語じゃない。まで読んだ。
881 名前:デフォルトの名無しさん [2009/07/20(月) 21:59:02 ] すみません、私はschme大好き人間なんですが、 common lispの defunが嫌いです。「でふん」っていう語感が。 やっぱしscheme最強でしょ。
882 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:02:31 ] 致命的なまでに英語が苦手なようだなw
883 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:05:35 ] でふん デフィネ
884 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 23:05:35 ] つか気に入らないなら自分で好きな名前にすればいいじゃない これだから最近scheme始めたガキは困る
885 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:39:46 ] (defmacro define (fun_arg body) `(defun ,(car fun_arg) ,(cdr fun_arg) ,body))
886 名前:デフォルトの名無しさん [2009/07/21(火) 00:58:24 ] すみません、私はschme大好き人間なんですが、 common lispの funcallが嫌いです。「ふんこーる」っていう語感が。 やっぱしscheme最強でしょ。
887 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:08:10 ] labels使え
888 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:19:29 ] let over set!
889 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 03:07:15 ] letrec over μ
890 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 03:17:25 ] scheme大好きな私ですがたった一つ好きになれないのがランバダです。 語感が嫌ですね。
891 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 03:40:41 ] コードギアスでさぁ、 ルルーシュが C.C. の名前を呼ぶ場面があるでしょ。 call/cc を見るたびに連想するんだ
892 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 04:01:29 ] でっかいアニメ好きです
893 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 04:39:34 ] 俺はCCガールズっていう人達見ると思い出すな。
894 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 04:49:01 ] それじゃあ、思い出さないんですね。見ることないもんね。
895 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 05:01:59 ] その代わりにCCレモンをよく見るからね。
896 名前:デフォルトの名無しさん [2009/07/21(火) 08:54:45 ] lispのコードを出してくれるyacc,lexって有りますか?
897 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 09:19:46 ] CCっていったらサクラだろJK
898 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 09:25:46 ] 俺もNHKでやってるという免罪符で見てた>CCさくら なんか色使いが綺麗だったし 話自体はよくわからなかった
899 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 09:57:57 ] それを言うならリリカルなんて
900 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 10:46:49 ] リリカル・トカレフ・キルゼムオール
901 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 11:03:05 ] りこさんのエロ画像キボンヌ
902 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 13:09:07 ] おまいはこっちに行けw pc12.2ch.net/test/read.cgi/tech/1183396621/
903 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 13:42:06 ] もっとネタscheme処理系を!
904 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 13:44:06 ] いぷしろん萌え
905 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 16:17:27 ] VSCM萌え
906 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 20:47:00 ] Mathematica 萌え
907 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:29:44 ] 割と普通に関数型として使えるのには感心したが 正直書きにくかった
908 名前:デフォルトの名無しさん [2009/07/21(火) 22:30:28 ] Little Schemerを読んでるんですが、Qを読んですぐAを読むっていう ただ読んでるだけなんですが、 みなさんはちゃんと自分で答えを考えながら読んでるんですか?
909 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:32:49 ] 俺は考えて読んだけど、好きなようにすればいいんじゃないかな。 一度全部読んでから、次は自分で考えれば? たぶん二回目でも100点にはならないと思うから、 二回読むことには意味があると思う。
910 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:26:36 ] >>909 なるほど、ありがとうございます。 いま3章の終りに来ていますがなかなかなか複雑で頭を使います。がんがる。
911 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 02:23:55 ] LOLなんだけど、ざっと斜め読みしてたら、 マクロを本当に使いこなせるのはSchemeで修行してきた人達だ。 みたいなことが書いてあった。
912 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 04:29:56 ] Schemerのほうが偉い症候群ですねわかります
913 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 17:44:32 ] ↓ここからCLerの猛反論
914 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 18:19:14 ] まあ最近はSchemeからこの世界に入って、 Schemeで修行せずにCommon Lisp入る人の数の方が少ない、 ってのはそれほど間違ってないと思う。 Schemeは取り上げる大学が多いからね。 そんな噛みつくことじゃないのでどうでもいい。
915 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:25:41 ] C99/C++のコメントを除去したかったので コードを書いたんだけどえらい遅い 改良するとしたらどの辺でしょうか? 最初非末尾再帰版で書いて 末尾再帰に書き直したのですが 相互再帰関数は通常最適化されないのですかね? 処理時間が通常の再帰版と同じで 250kbのファイル(5千行中4000行がコメント) を処理するのに100秒かかります コード(続く)
916 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:29:01 ] ;remove comment (define (remcom l) (define (test str lst) (if (< (length lst) (string-length str)) #f (let* ((a (string->list str)) (l (take lst (length a)))) (every eq? a l)))) (define (outcomment l res) (cond ((null? l) res) ((test "/*" l) (incomment (cddr l) res)) ((test "//" l) (inlinecomment (cddr l) res)) ((eq? #\' (car l)) (inquote #\' (cdr l) (cons #\' res))) ((eq? #\" (car l)) (inquote #\" (cdr l) (cons #\" res))) (else (outcomment (cdr l) (cons (car l) res))))) (define (incomment l res) (cond ((null? l) res) ((test "*/" l) (outcomment (cddr l) res)) (else (incomment (cdr l) res)))) (define (inquote sep l res) (cond ((null? l) res) ((eq? sep (car l)) (outcomment (cdr l) (cons sep res))) (else (inquote sep (cdr l) (cons (car l) res))))) (define (inlinecomment l res) (cond ((null? l) res) ((eq? #\newline (car l)) (outcomment (cdr l) res)) (else (inlinecomment (cdr l) res)))) (list->string (reverse (outcomment (string->list l) '()))))
917 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:18:56 ] >>915 test の中の (length lst)
918 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:21:17 ] コメントが現れる度string->listしてる所、 (test "/*" l)とかを (test `,(string->list "/*") l) にしとくとか。(test側も修正) それと、100秒掛かるって言われても判らんから 環境と処理系も書いて欲しいな
919 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:25:49 ] あ、`',(string->list "/*")にしないとだめだったかな 動かしてないから間違ってたらごめん
920 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:03:42 ] (define (test str) ;; Let Over Lambda (let ((l (string->list str))) (lambda (lst) ...))) (define test/* (test "/*")) (define test*/ (test "*/")) (define test// (test "//"))
921 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:19:19 ] lengthをやめたら、100秒が3秒になりました 長さはmaxで2と固定なので (if (or (not (pair? lst)) (not (pair? (cdr lst)))) #f ...) に変更しました また、string->listの箇所も修正するとさらに早くなりました (環境はGauche+cygwin) ありがとうございました!
922 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:24:16 ] 上の"/*"みたいな最終的にstring->listに掛かるようなやつって gaucheじゃ定数伝播してくれないのかな
923 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 12:29:59 ] 数値計算を主体でプログラムしてると あまり自分でマクロを作る場面に出くわさない on lispのマクロはそのまま使ったりするけど
924 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 12:52:12 ] こういうのはどうよ (define-syntax let/ec (syntax-rules () ((_ r b ...) (call/cc (lambda (r) b ...))))) わざとらしい例 (let/ec r (fold (lambda (x y) (if (= x 0) (r 0) (* x y))) 1 '(2 3 0 5)))
925 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 13:28:31 ] 何が?
926 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:44:08 ] いや、なんでもない
927 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:48:00 ] let/ccってのはPLTやGaucheにあるね
928 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 00:17:53 ] redditから ttp://www.google.com/search?hl=en&q=recursion
929 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 04:03:28 ] エロファイルのサンプルをダウンロードして来ました.このファイルはzipで圧縮されておりファイル名の末尾がアルファベットもしくは数字+拡張子zipになっており,展開すると拡張子が取れたディレクトリ名の中にファイル名+拡張子wmvのファイルが出現します. 例: aaaa0725a.zip, aaaa0725b.zip, aaaa0725c.zip, aaaa0725d.zip aaaa0725a/aaaa0725a.wmv aaaa0725b/aaaa0725b.wmv aaaa0725c/aaaa0725c.wmv aaaa0725d/aaaa0725d.wmv b0725-1.zip, b0725-2.zip, b0725-3.zip, b0725-4.zip b0725-1/b0725-1.wmv b0725-2/b0725-2.wmv b0725-3/b0725-3.wmv b0725-4/b0725-4.wmv で,このファイルを末尾がアルファベットの場合は a 数字の場合は 1 にまとめるという作業をLispで行う場合,Lisp脳ではどう考えますか? aaaa0725a/aaaa0725a.wmv /aaaa0725b.wmv /aaaa0725c.wmv /aaaa0725d.wmv b0725-1/b0725-1.wmv /b0725-2.wmv /b0725-3.wmv /b0725-4.wmv 教えてくださいエロい人
930 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 05:16:08 ] zshで unzip *.zip for d in *a; mv ${d%a}[bcd]/*.wmv $d for d in *1; mv ${d%1}[234]/*.wmv $d rmdir * 試してないけど。
931 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 05:18:15 ] > unzip *.zip 訂正 for f in *.zip; unzip $f
932 名前:デフォルトの名無しさん [2009/07/25(土) 09:45:41 ] MatzLispを搭載してるmfilerで展開&連番リネーム
933 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:25:06 ] MatzLispなんてLispはありません Lispと言うからにはS式とマクロがないと駄目です
934 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 19:28:09 ] lisp--
935 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 19:52:08 ] l4u…
936 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:07:36 ] AVRやPICで使えるSchemeってある?LEGO Mindstrom用は見つけたけどマイコン用は見つからなかった。
937 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:09:27 ] stalinでCコード吐かせてgccでコンパイルする
938 名前:929 mailto:sage [2009/07/25(土) 21:15:23 ] なんだ結局正規表現に頼るのか
939 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:19:55 ] こういう時のための正規表現だからね。 まぁ、正規表現に親を殺されて憎んでいるから絶対使いたくないとか、 そういう理由があるなら仕方ないかもしれんが。
940 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:50:57 ] 正規表現殺人事件 「私は見ました!! 彼はバックトラックに轢き殺されたんです!!」
941 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:10:15 ] オートマでした
942 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:47:25 ] >>936 Marc Feeleyの研究室で何年か前にPIC用Schemeコンパイラを作ってた人がいたと思う。
943 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:54:44 ] >>938 やりたければ SRE でも PEG でも使うがいい。 やろうとしてることがいかにもスクリプト言語的なので、 手段だってそれに見当ったものになるだけだろ。 そこに Lisp らしさを求めたところでナンセンスなだけだ。
944 名前:929 mailto:sage [2009/07/25(土) 23:30:41 ] >>943 > やりたければ SRE でも PEG でも使うがいい。 SRE S-expression Regular Expression PEG Parsing Expression Grammar ですね.勉強します. > やろうとしてることがいかにもスクリプト言語的なので、 はい,あえてこういう問題をLisperはどう考えるか知りたくてきいてみました. ありがとうございました.
945 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:33:50 ] >>944 というか、そもそもLisp族での回答が出てないじゃないか。 典型的なパターンだと、ディレクトリを探索する手続きに、 ファイルごとの処理を行う手続きを渡すのがLisp的だと思う。 文字列のマッチングとかは、SREとかPEGとかあるけど、 特別Lisp的に、ってのは無いんじゃない?
946 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 03:30:51 ] まぁ、質問が悪すぎたね。 物事を「無駄に難しく」解決したくてLispをやってる人なんて、 そう居ないわけだからさぁ。
947 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 05:04:52 ] だが、SICPの日本語は無駄に難しい。
948 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 06:05:22 ] 質問者の頭が悪すぎた
949 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 07:46:32 ] >>946 そうだったのか。おれは"物事を「無駄に難しく」解決したくてLispをやってる"と思ってた。 頭の体操のために開発された言語だと思っていたが間違っていたか。、
950 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 08:11:56 ] まぁ、間違ってるね。 言語としてのLispは、ラムダ算法の表現法として開発されたのであって、頭の体操の為ではないし、 「頭の体操」が主に指向するのは、物事を「無駄に難しく」解決することではなく「美しく」解決することだし、 (その美しさを理解or表現する力を身につけるのが「難しい」ということはあり得るけど) 句点のあとに読点つけるのは、正式な日本語としても、2chによく見られる崩しとしてもおかしいし。
951 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 08:38:17 ] 「。、」 は ↓こんな風に落ち込んでる人の顔文字だと解釈した。 。、 -
952 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:21:18 ] >>950 読点消し忘れたからってそんなに喜ぶなよ。 ラムダ算法の表現法として開発されたということはラムダ算法に無縁の人には いらない言語ということか納得できる答えだ。頭の体操の定義はおいといてい らない人には頭の体操以外のなんでもない。
953 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:38:13 ] > 言語としてのLispは、ラムダ算法の表現法として開発されたのであって、 リスト処理用の言語として作られたんであって、ラムダは用語以外関係ない。
954 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:25:17 ] >>952 何をムキになって、相手の言葉からできるだけ相手が辿り着いて欲しく無さそうな結論を見出す 中二病っぽいクソゲーを頑張ってるのかわからないけど、 最初に開発した人の目的なんて、その後の人々にはそこまで関係のあるものではないよ。 Unix開発したい人だけがCを使うわけでもなし。
955 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:27:58 ] あと、「いらない人には」って条件つけちゃったら何でもアリだよな。 板チョコから人命まで、「いらない人には価値を見出すことができない」のは共通でしょ?
956 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:33:29 ] あなたもわざわざ構いなさんなw
957 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:35:21 ] >>953 リスト処理用のFORTRANライブラリとして歩みだし、 ラムダ算法の表現を模索するうちにプログラミング言語となった。 といってもそれほど間違ってないと思う。
958 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:44:41 ] >>956 でも、そんな長くない文章でかなり凄いこと言いまくってて、つい反応してしまうだろうこれはw 「Xの定義はおいといて、X以外のなんでもない」って物言いも、かなりキてるし。 「頭の体操のために開発された言語」という話を「いらない人には頭の体操」まで一気に前線下げて、 それを鼻息のパワーアップでカバーしようとしてるのも、えらくシュールだし。 なんか変な資質あるぞ、この子w
959 名前:929 mailto:sage [2009/07/26(日) 10:55:16 ] なるほど,Lispにとってこういう問題は難しいのですね. Lisperと名乗る人も身近なものにはLispを使わない. ググったところで教科書の写経をするページしか見つからないわけですね.
960 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:12:44 ] おれがよく行くアニメ系板ならわんさかこーゆーのいるけど。 >>959 Lispに限らず他言語のスレ行っても「ファイラでやれ」「シェルでやれ」って反応が殆んどだと思うが。 あーでもrake使ってエロ画像整理とかはやってる人が稀にいるかもしれん。 正しく道具を使い分けるよう心がけてる人が多いのはどの辺だろうねぇ。
961 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:14:52 ] ttp://evalwhen.com/pregexp/index.html 正規表現も自前で実装するのが Lisp クオリティ
962 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:27:59 ] リストのリストをソートする機会があったので (define a '((0 1 2) (0 2 1) (1 0 2) (1 2 0) (2 0 1) (2 1 0))) C++のSTLみたく こんなのを書いてみたんだけど (define (listpred pred a b) (cond ((or (null? a) (null? b)) #f) (else (if (or (pred (car a) (car b)) (pred (car b) (car a))) (pred (car a) (car b)) (listpred pred (cdr a) (cdr b)))))) (sort a (pa$ listpred <)) (sort a (pa$ listpred >)) こういうのって既にあったりします? それか既存の関数の組み合わせでもっと楽に作れたりしませんかね
963 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:31:45 ] あ、比較関数をリスト用に合成するのだからこっちのほうがいいですね (define (listpred pred) (lambda (a b) (cond ((or (null? a) (null? b)) #f) (else (if (or (pred (car a) (car b)) (pred (car b) (car a))) (pred (car a) (car b)) ((listpred pred) (cdr a) (cdr b))))))) (sort a (listpred <)) (sort a (listpred >))
964 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:37:04 ] >>959 どういう過程を辿ってそういう結論に至ったのかは知らないけど、 別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。 某ネ実ゲーの武器の性能計算したりとか、もう日常感たっぷり。 ネット見ると結構そういうのあると思うんだけどな。 ニコニコのコメント抜き出したり、WinampをSchemeで操作したりしてる人とかいたよ。
965 名前:929 mailto:sage [2009/07/26(日) 11:40:01 ] > 正規表現も自前で実装するのが Lisp クオリティ 正規表現を必要としないのが Lisp クオリティと思ってた.
966 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:51:17 ] >>916 とかは正規表現では出来ない例 正規表現で出来ない問題を出せよ
967 名前:929 [2009/07/26(日) 11:58:49 ] >>964 > >>959 > どういう過程を辿ってそういう結論に至ったのかは知らないけど、 > 別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。 はい,945の方がおっしゃってるように ディレクトリを探索する手続きに,ファイルごとの処理を行う手続きを渡すというのは理解できるのですが ここで正規表現って発想ではなくリードマクロを使って...てのを期待してました.
968 名前:929 mailto:sage [2009/07/26(日) 11:59:36 ] >>966 > >>916 とかは正規表現では出来ない例 > 正規表現で出来ない問題を出せよ やりたいことはエロファイルの整理です.
969 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:04:17 ] エロファイルの整理がしたいんじゃなくて Lispのリードマクロを使った回答を知りたい、が正しいんじゃないの? その目的なら>>930-931 で回答が出てるんだから
970 名前:929 mailto:sage [2009/07/26(日) 12:10:38 ] やりたいことは,エロファイルの整理 知りたいことは,シェルスクリプトなどで簡単にできる問題を lisp脳はどう考えるかです.
971 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:17:12 ] シェルスクリプト使うよ
972 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:17:30 ] (define (a x) (let ((end (last x))) (cond ((isalpha end) 'place_a) ((isnum end) 'place_1) (else (error "tukareta"))))) (for-each a ero) 'placeの所はフォルダにおく処理
973 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:27:17 ] >>970 rename.pl(1)使います。
974 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:32:52 ] >>967 俺その>>945 。 リーダーマクロについて、何か勘違いをしてる気がする。 根本的に正規表現とは違う層の概念だよ。 独自の記法をS式にマッピングするだけ。 単に、正規表現以外の文字列のパターンマッチが知りたいのなら、 パーザコンビネータとかがそれ。上に出てるPEGとか。
975 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:56:46 ] >>958 あなたには頭の体操は「美しく」解決しなきゃいけないのかそれともそうではないのか。 「美しく」とはどういうことかなどを定義されることをお勧めします。そしてその後レス してください。
976 名前:929 mailto:sage [2009/07/26(日) 14:30:38 ] >>974 > リーダーマクロについて、何か勘違いをしてる気がする。 いえ,理解出来ていないというか,誤解しているのでしょう. だから,相手に対して勘違いをあたえる. > 根本的に正規表現とは違う層の概念だよ。 > 独自の記法をS式にマッピングするだけ。 ディレクトリ(ファイル)名のリストを作る.そのリストを読み込む際,リードマクロを使って処理をディスパッチする.のかなぁって考えました. > 単に、正規表現以外の文字列のパターンマッチが知りたいのなら、 > パーザコンビネータとかがそれ。上に出てるPEGとか。 文字列処理で正規表現使わない.リードマクロを使う.と言う発想じゃなくPEGを使うって発想するのですね.
977 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 14:44:38 ] >> リーダーマクロについて、何か勘違いをしてる気がする。 >いえ,理解出来ていないというか,誤解しているのでしょう. 勘違いして理解してるから誤解だろ。
978 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 15:06:02 ] >>976 リードマクロは表現をS式にマッピングする機能だって上で出てるだろうが。 書いてある表現のパースは必要なんだよ。 違う層の話が入り混じっててわけわかんなくなってるぞ。
979 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 15:20:13 ] まあ確かにcfgやreは無駄に難しいから 素朴な再帰下降パーサーを高階関数とかで改良していこうという方針は正しい気がする そして、Perlのような言語がそういう方針転換をするよりも 過去の成果物にとらわれないLispのほうが有利だと言えないこともない
980 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:08:54 ] 50以上レスが進んでるから何かと思えばずっと雑談か 暇だなおまいら
981 名前:デフォルトの名無しさん [2009/07/26(日) 19:53:39 ] 処理系何使ってるあたしはGauche。
982 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:40:58 ] /\___/ヽ /ノヽ ヽ、 / ⌒''ヽ,,,)ii(,,,r'''''' :::ヘ | ン(○),ン <、(○)<::| |`ヽ、 | `⌒,,ノ(、_, )ヽ⌒´ ::l |::::ヽl . ヽ ヽ il´トェェェイ`li r ;/ .|:::::i | /ヽ !l |,r-r-| l! /ヽ |:::::l | / |^|ヽ、 `ニニ´一/|^|`,r-|:「 ̄ / | .| | .| ,U(ニ 、)ヽ / | .| | .|人(_(ニ、ノノ
983 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:51:39 ] テキスト処理を主体としたいわゆる「スクリプト言語」的な使い方をするなら Gauche はやはり強いよなぁ。 日本語の扱いをちゃんとしているところがよい。 Ypsilon なんかはやたら高速なのがよい。 まぁ、用途によるんじゃね?
984 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:58:51 ] Gaucheとclisp、newlispを入れてる newlispは簡単にwindow出せたりして面白いよ
985 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:30:14 ] ベタで申し訳ないが、schemeの健全なマクロって必要なのか? 正直 ` , ,@ (gensym) だけのほうがスマートだし、変数捕捉されるのも考慮してこそマクロだと思うんだけどなぁ。 schemeの仕様作ってる人は何を心配してるんだろう。ユーザのこと心配してくれてるのかな。 (PGが人が使う用の為に作っちゃダメっていってたよ。)
986 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:30:36 ] ノシ clisp
987 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:35:59 ] 不健全なマクロはきたない。健全なマクロのほうが美しい。
988 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:54:42 ] ` gensym を必要としなくなれば シンボルやコンスが無い言語でもマクロが書けるようになるかもしれない
989 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:11:13 ] >>985 モジュール化が絡んでくるとそう単純な話ではない。 scheme と CL ではスコープのルールも若干違う。 健全性に固執しすぎなのは確かかもしれないけど、 Scheme 的な一貫性のためには必要だと思うよ。
990 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:21:20 ] >>985 scheme では同じ名前のシンボルは常に同じシンボルなので、 gensym では名前の衝突を本質的には回避できない。
991 名前:985 mailto:sage [2009/07/26(日) 22:28:07 ] なるほど。今まで馬鹿みたいに「うは、ペアeval apply ぐるぐる最強!」とか思ってたけど、 ことはそう単純じゃないのね。もうちょっと精進するよ。馬鹿みたいなこといってごめんね。
992 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:09:19 ] 純粋さよりも簡潔さを重んじるSchemeとしてはそれこそ シンプルな古典的マクロの上に保健的マクロを構築するアプローチのほうが合っていると思う R5RSのなかでもsyntax-rulesは浮いているように感じる
993 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:46:52 ] >シンプルな古典的マクロの上に保健的マクロを構築する 挫折した奴がここにおわす
994 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:52:29 ] >シンプルな古典的マクロの上に保健的マクロを構築する これをまじめにやろうとすると、言語の構文をほぼ全て上書きして 意味論を追加するってこと LISPだから可能なんだけど おれは挫折した
995 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:06:27 ] シンプルさを保つべきだって考えと現実問題を解決するときに少々の汚れ仕事を請け負っても良いの2派閥の間の溝だからなぁSchemeとCommonLISP
996 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 05:59:54 ] >シンプルな古典的マクロの上に保健的マクロを構築する Alex Shinn さんの chibi-scheme がそういうような方向性かな Syntactic Closure の上に Explicit Renaming と Syntax Rules を実装してる Syntax Rules はまだ動いてないところもあった気がするが ttp://synthcode.com/wiki/chibi-scheme
997 名前:デフォルトの名無しさん [2009/07/27(月) 08:13:36 ] CommonLisp(笑)、Scheme(笑) これからはF#の時代だからwww
998 名前:デフォルトの名無しさん [2009/07/27(月) 08:23:37 ] 名前に#が付く言語ってwindows以外のOSで動くの?
999 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:32:57 ] Monoでそれなりには動くらしいよ 使ったことないからよく知らんけど
1000 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 09:25:26 ] SML#があるじゃん
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。