1 名前:デフォルトの名無しさん mailto:sage [04/02/01 19:10] 過去スレ Part1: piza2.2ch.net/tech/kako/987/987169286.html Part2: pc.2ch.net/test/read.cgi/tech/1002584344/ Part3: pc.2ch.net/test/read.cgi/tech/1008220265/ Part4: pc.2ch.net/test/read.cgi/tech/1016211619/ Part5: pc3.2ch.net/test/read.cgi/tech/1023091882/ Part6: pc3.2ch.net/test/read.cgi/tech/1031560687/ Part7: ruku.qp.tc/dat2ch/0311/20/1042167213.html Part8: pc2.2ch.net/test/read.cgi/tech/1058263391/ Part9: pc2.2ch.net/test/read.cgi/tech/1069594582/ 前、"Schemeスレはあるのになんでcommonlispスレはないの?"とか言って別のスレを建てた大馬鹿者がいたので、 標題にCommonLispと付けておきました。 Lispの話題でCommonLisp,Scheme,EmacsLisp(専用スレッドがある)以外のものが出ることはこのスレの歴史上でも 稀なので問題はほとんどないかと思います。 関連リンクは>>2-10 あたり
552 名前:デフォルトの名無しさん mailto:sage [04/06/06 18:00] >「どーやって大量のデータを収集・変換・学習・適用するか」につきているので と > Scheme なんか使ったらほとんど begin と let* だらけになる に論理の飛躍を感じるのは漏れだけですか? ブブカもびっくりですよ。 『Schemeはプログラマを映す鏡』だなあと思う今日この頃、おまえら、いかがお過ごしですか。
553 名前:デフォルトの名無しさん mailto:sage [04/06/07 10:14] 日記なんだから論理は飛躍しても仕方ないと思うけど... >> 552 ところで「begin, let*を使うコードだらけになるじゃん」と言う主張は 新山さんが明らかに何か分かってないという証拠になるのかな? もしそうならどうしてそうなのか教えて欲しいなぁ。
554 名前:デフォルトの名無しさん [04/06/07 13:23] Interlisp-D試した人いないの?
555 名前:デフォルトの名無しさん mailto:sage [04/06/07 19:34] >>554 普通に動いたよ。ドキュメント読む暇が無いんで後回しになってるけど。
556 名前:デフォルトの名無しさん mailto:sage [04/06/07 22:06] >>554 squab.no-ip.com:8080/collab/76
557 名前:デフォルトの名無しさん mailto:sage [04/06/07 22:34] >>555-556 レスサンクス。試してみる。 古参Interlisperの話を聞いてみたいな…
558 名前:デフォルトの名無しさん mailto:sage [04/06/07 23:58] >>553 つまるところ、ストイックな Scheme で全てをやろうとすると、 begin や let* の嵐になるということではないか。言いかえれば、gosh などの 現実的(または妥協的)な Scheme 処理系を使ったことがないのかもしれない。 日記は良く読んでないので外してるかもしれんけど、新山氏は普段 Python を 使ってるらしいからね。 # ほら、Python ってライブラリが充実してるじゃん
559 名前:デフォルトの名無しさん mailto:sage [04/06/08 02:40] >>557 おれも聞いてみたい。どうしてもSymbolicsとかの統合環境への夢が捨てがたい。 いま良くあるような保護指向のOSのモデルと、統合環境指向のシステムを うまく統合させる方法ってないのかねぇ。
560 名前:デフォルトの名無しさん mailto:sage [04/06/08 21:04] >>558 たぶん、「ストイック」の意味が違うと思う。 変数をできるだけ使わず、関数のネストだけで コーディングするのがストイックなScheme流なんだと 思う。
561 名前:デフォルトの名無しさん mailto:sage [04/06/08 22:25] >>560 それは Scheme 限定というより、Lisp 族の一般的な慣習のような。 ああでも、elisp やってる人達はちょいと違う気もするけど。 まあどうでもいいか。
562 名前:デフォルトの名無しさん mailto:sage [04/06/08 23:56] なぜ人間の脳はオーバーロードしないのか。
563 名前:553 mailto:sage [04/06/09 00:21] >>560 に賛成。でも個人的には、関数型プログラミングの作法と手続き型の作法をまぜこぜに使えるのがLISPの強みの1つだとおもうので、新山さんの意見には賛同できないんだけど。
564 名前:デフォルトの名無しさん mailto:sage [04/06/09 00:26] ecl で thread 使えている方いらっしゃいますか? CVS の CHANGELOG には Linux で pthread サポートしている様に書いてありますけど。
565 名前:デフォルトの名無しさん [04/06/09 14:50] fibonacci 数列について質問です。 これを関数型の記述のまま、計算量を減らすことはできないでしょうか? まず、定義どおりに関数型で記述してみました。 (define (fib x) (if (< x 2) 1 (+ (fib (- x 1)) (fib (- x 2))))) これだと、定義がそのままコードになっていて、とてもわかりやすいのですが、 x の小さな項を何度も計算しなおすので、x が大きくなると計算量が膨れ 上がってしまいます。 Chez Scheme では x=35 ぐらいが限界でした。 手続き型で、小さい項をまず求めて、それをもとに大きな項を求めるように書くと、 計算量がはるかに少なくて済むのですが、わかりづらくなります。 定義がそのままコードになっている、関数型の記述とはだいぶ違います。 (define (fib2 n) (if (< n 2) 1 (do ((x1 1 (+ x1 x0)) (x0 1 x1) (m 2 (+ m 1))) ((<= n m) (+ x1 x0)))))
566 名前:デフォルトの名無しさん [04/06/09 14:51] 末尾再帰であらわしたコードも見かけましたが、わかりにくさでは似たようなものです。と言うか、これは手続き型のロジックを末尾再帰に無理に書き換えただけだと思います。 (define (fibo num) (let loop ((num num) (p2 1) (p1 1)) (cond ((= num 0) 1) ((= num 1) 1) ((= num 2) (+ p2 p1)) (else (loop (- num 1) (+ p2 p1) p2))))) もしかして、(よく知らない)遅延評価を使えばよいのかと思い、頭の悪いコードを 書いてみましたが、かえって遅くなるだけでした。 (define (fib3 x) (if (< x 2) 1 (+ (force (delay (fib3 (- x 1)))) (force (delay (fib3 (- x 2))))))) 遅延評価に関して、Shiro さんのところも見てみたのですが、 www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_86.html これも結局、手続き型と同じ、小さい項をまず計算して、徐々に大きい項を求めていく やり方でした。定義がそのままコードになるような書き方ではないと思います。 ということで、質問をもう一度まとめますと、 定義がそのままコードになるような書き方で、fibonacci 数列の一般項を求める関数の 計算量を減らすことはできないでしょうか? 以上です。どうかよろしくお願いいたします。
567 名前:デフォルトの名無しさん [04/06/09 15:07] memo関数使ったら? 一度計算した値をとっておくだけで、再帰的な「素直な」定義はそのまま。
568 名前:デフォルトの名無しさん [04/06/09 15:30] >>567 ありがとうございます。memo関数とは、これのことでしょうか?勉強してみます。 www.sampou.org/scheme/sicp/mailingList/msg00130.html それにしても、delay/force は、一度計算したものはキャッシュされるということでしたが、 それは、同一の約束オブジェクトに関する話なのですね。 (define (fib3 x) (if (< x 2) 1 (+ (force (delay (fib3 (- x 1)))) (force (delay (fib3 (- x 2))))))) において、 (fib3 1) が何回現れても、それは毎回、別の約束オブジェクトとみなされるから、 再計算するしかないのですね。まだまだ勉強が足りないなあ。
569 名前:(define (´∀`) 'マターリ) mailto:sage [04/06/09 19:52] (define (fib x) (define fib (let loop ((y 1) (lst '(1 1))) (if (>= y x) (lambda (x) (list-ref (reverse lst) x)) (loop (+ y 1) (cons (+ (car lst) (cadr lst)) lst))))) (if (< x 2) 1 (+ (fib (- x 1)) (fib (- x 2)))))
570 名前:デフォルトの名無しさん mailto:sage [04/06/09 20:22] >>566 > 末尾再帰に無理に書き換えた そうか?俺には自然に見える。 末尾再帰 = ループ という概念に慣れていないだけでは?
571 名前:デフォルトの名無しさん mailto:sage [04/06/09 22:58] www.iijlab.net/~ew/ptt.html の最後に載ってるfibがO(log n)でなかったかな
572 名前:デフォルトの名無しさん [04/06/10 03:09] >>569 面白いコードをありがとうございます。ただ、fibonacci 数列の定義をこのコードから 読み取るのは難しいと思います。 また、最後の2行は実質的に不要で、コードのわかりやすさに寄与していないのではないでしょうか? (define (fib x) (define fib (let loop ((y 1) (lst '(1 1))) (if (>= y x) (lambda (x) (list-ref (reverse lst) x)) (loop (+ y 1) (cons (+ (car lst) (cadr lst)) lst))))) (fib x)) と書いても結果は同じです。 >>570 すみません、私の言葉が正確でありませんでした。 手続き型の記述をループに書き換える方法としては、私も自然だと思います。 (実は、>>566 の関数 fibo は、既存のそのままのコードではなく、自分がわかりやすい ように書き直したものです。) ただ私は、もとの定義どおりの>>565 の関数 fib の方を末尾再帰にしたかったのです。 手続き型のロジックを元にしたため、定義から大きく違った形になっている、という意味で 「無理に」という言葉を使いました。 >>571 恥ずかしながら、このコードは私には難しいです。 慣れた人になら、このコードも関数型らしい「定義を書くだけでそれがそのままコードになる」 記述に読めるのでしょうか?
573 名前:デフォルトの名無しさん [04/06/10 03:11] 訂正。 ×自分がわかりやすいように書き直した、 ○自分にわかりやすいように、自分なりに書き直した
574 名前:デフォルトの名無しさん mailto:sage [04/06/10 03:37] 自分で末尾再帰にする言語を作れ。
575 名前:デフォルトの名無しさん mailto:sage [04/06/10 03:57] >>572 "関数型らしい「定義を書くだけでそれがそのままコードになる」" ってだれに聞いたのか知らないけど、幻想入り過ぎなのでは。
576 名前:デフォルトの名無しさん mailto:sage [04/06/10 04:21] >>565 計算機プログラムの構造と解釈 問題3.27 メモ化 問題1.19 対数的
577 名前:デフォルトの名無しさん mailto:sage [04/06/10 08:50] >>565 その書き方のまま、高度なキャッシングをするよう最適化するような処理系があったらうれしいな。 仕様としては、R*RSには入らないだろうけどSRFIになら入りそう。 でもこれは夢のような技術っぽい。
578 名前:デフォルトの名無しさん [04/06/10 11:08] Schemeは、どれをDLすればいいんだ?
579 名前:デフォルトの名無しさん [04/06/10 12:07] >>576 ありがとうございます。 mitpress.mit.edu/sicp/full-text/book/book-Z-H-22.html#%_sec_3.3.3 と www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#memoize を参考にして、以下のコードを書いてみました。 (define (memoize proc) (let ((cache '())) (lambda args (let ((hit (assoc args cache))) (if hit (cdr hit) (let ((result (apply proc args))) (set! cache (cons (cons args result) cache)) result)))))) (define memo-fib (memoize (lambda (n) (if (< n 2) 1 (+ (memo-fib (- n 1)) (memo-fib (- n 2))))))) 大変うまくいきました。コードはほぼ定義どおりで、しかも (memo-fib 10000)でも 即時に演算が終わるようになりました。memoize って素晴らしいです。 数年前、Java で数値計算をしていて、再帰で書いたら同じ問題に遭遇して、仕方なく ループで書き直したことがあります。あのときに memoize を知っていたらなあ。 mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.4 は私には難しいので、時間をかけて考えてみます。 ということで皆さま、いろいろありがとうございました。
580 名前:デフォルトの名無しさん mailto:sage [04/06/10 18:05] >>578 www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html ここに処理系のリンク先あり Windowsなら DrScheme あるいは Petite Chez Scheme + ChezEdit が簡単
581 名前:デフォルトの名無しさん mailto:sage [04/06/10 20:34] >>580 ありがとう DrSchemeを入れてみました。 40Mってのには驚きましたよ。
582 名前:デフォルトの名無しさん [04/06/10 23:26] 今日のセミナーに参加した人いる? 午前中は完全に雑談だった。せっかく早起きしたのにちょっと鬱。 明日に期待しよう。
583 名前:デフォルトの名無しさん mailto:sage [04/06/11 00:22] >>582 まあそう言うな、生CEO や生和田先生や生Shiroさんが見れただけでもオレは満足だ もっとちゃんと時間をとって役に立つ話をやって欲しいとは思ったけど
584 名前:デフォルトの名無しさん mailto:sage [04/06/11 07:17] >>582 , 583 漏れ行きたくても行けない地方在住者。 レポートキボンヌ!キボンヌ!
585 名前:デフォルトの名無しさん mailto:sage [04/06/11 09:17] www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Seminar%3aCommonLisp
586 名前:デフォルトの名無しさん mailto:sage [04/06/11 23:12] CL-USER(2): (require :regexp2) ; Fast loading /opt/franz/acl70b/code/regexp2.fasl ;;; Installing regexp2 patch, version 0 ; yacc constructing #<GRAMMAR-CLASS REGEXP> ... ; Finished T CL-USER(3): regexp2キター
587 名前:デフォルトの名無しさん [04/06/12 01:07] これからはJavaよりもLispだと確信しました。 しかしACLの値段は高いのお…
588 名前:デフォルトの名無しさん mailto:sage [04/06/12 01:07] 現在プログラム板にはHSP関連スレに凶悪な荒らしどもが住みついています。 ・HSPに関係の無い話題でスレッドを上げまくる ・HSPオフィシャルサイトの住人を名指しで誹謗中傷する ・重複スレを乱立させる などの荒らし行為を行っています。 みんなで団結してム板のゴミどもを追い出しませんか? 【HSP関連スレ】 【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】 pc5.2ch.net/test/read.cgi/tech/1086878505/ HSP>>>>>>>>>>>>>C=糞w pc5.2ch.net/test/read.cgi/tech/1071899663/ 今日もどこかでHSP初心者が質問ですP19 pc5.2ch.net/test/read.cgi/tech/1084089079/ HSPについて pc5.2ch.net/test/read.cgi/tech/1085149790/
589 名前:デフォルトの名無しさん mailto:sage [04/06/12 08:47] scmutilsについて教えてくだされ。 Structure and Interpretation of Classical Mechanics を読み進むのにScmutilsを使いたいのだが、MITScheme は苦手だ。他の処理系に移植されていないだろうか? Chez Scheme にあるとうれしいのだが。
590 名前:デフォルトの名無しさん mailto:sage [04/06/12 09:45] >>589 私もぜんぜん知らないのだけど、Google で検索すると、 ChezEdit-NT の作者である 笹川さんが出てくる。 www.sampou.org/scheme/sicp/mailingList/msg01408.html その結果は chabo.kingdom.biglobe.ne.jp/93453084312522391/bbs/index9.html > SICMのためのScmutilsを動かしたいんだけど、MIT-Schemeはどうも苦手だなぁ。 > かといって移植するのは大変な労力だ。どうしたもんだろう。 どうも移植はされていないっぽい。 Gauche 方面では、 Scheme:ライブラリ -> scmutils www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Scheme%3a%a5%e9%a5%a4%a5%d6%a5%e9%a5%ea#H-jmimjv > MIT Scheme べったり。Gauche に移植しようとして途中で挫折。-- skimu こちらもだめっぽい。 あきらめて Debian GNU/Linux と MIT-Scheme に行くしかなさそう。
591 名前:589 mailto:sage [04/06/12 10:40] >>590 ありがとう。 MIT-Schemeでなんとかやってみるよ。
592 名前:デフォルトの名無しさん mailto:sage [04/06/12 15:20] CPS(継続渡し)が今までどうしても理解できなかったのだけど、 このページの例を見て、目がさめるようによく分かりました。 www.namikilab.tuat.ac.jp/~sasada/diary/200308.html#d28 なあんだ、まず最初に巨大にネストした無名関数をこしらえて、 それを一気に実行するだけじゃないか。 それだったら、普通にスタックが積まれる再帰とコストが等しくて当然。 しかし、Petite Chez Scheme は CPS の方が二倍ほど速いのですね。 自分の手元で試してみても同様でした。不思議ですね。
593 名前:デフォルトの名無しさん [04/06/12 16:09] すまねぇ、誰か助けてくれ。 こないだAllegroCommonLispのウワサを聞きつけトライヤル版を試してみたくて ダウンロードしたんだが、さっきFranz.comのSalesManagerのクレイグから いきなしメール来て、ACLを何処で知ったか、とかいって幾つか質問が 書かれたハードオファーなメールが来たんだよ。英語だし意味ワカンネエし、 毎日にチャンネルしかやってない俺にとって非常に恥ずかしいっていうか、 何で俺のようなアホにメールよこすんだよ!っていうか、「読んでくれて ありがとう。私はあなたからすぐに便りをもらうことを期待します」とか クレイグ書いてるし、そういう訳で困っています。 普段アホの新山とかblog読んでアヒャヒャと喜んでいるアホなのですが、天才新山名誉 教授でもなんでも良いのでだれか知恵を貸して下さい。 知名みにlispは初心者で、本当はAllegroCommonLispよりもGaucheを使って 半日ほどハアハアしてたりDを使っていました。
594 名前:デフォルトの名無しさん mailto:sage [04/06/12 22:35] >>593 相手は単に商売なんだから、ほっといたらいいんではないかー?
595 名前:デフォルトの名無しさん mailto:sage [04/06/13 08:51] どれシニョリーナ 「ウミネコ」の魔術をといてやるよ
596 名前:デフォルトの名無しさん mailto:sage [04/06/13 17:13] >>593 トライアル版落とすとそのメール来るよね。 前に落としたときは日本の法人から営業担当者のメールが来ますたよ。 そんな高いもん個人で買えないからご遠慮メール出しちゃったら、担当が変わりましたメールが忘れた頃に(w そこまで売りたいなら値段下げれ!とか思た(藁
597 名前:デフォルトの名無しさん mailto:sage [04/06/13 18:16] とりあえずexe作る権限だけでも売れると思うんだけどなあ。
598 名前:595 mailto:sage [04/06/13 18:21] すみません595 は誤爆…良スレを汚してごめんなさい
599 名前:デフォルトの名無しさん [04/06/13 21:26] 確かに個人で買えるような値段ではないよね。学生なら研究室の予算で買ってもらえるかも 知れないから指導教員に頼んでみるのもいいと思うけど。
600 名前:デフォルトの名無しさん mailto:sage [04/06/14 00:13] かえなければほかのつかったらいいじゃん、ってきもするんだけど。 使ったことがある人のAllegro CLの「これはべんりだ」ってあたりを 聞かせてもらえるとうれしいかも。 あと、個人的にはAlleglo Storeがすごそうなんだけど、そのへんも。
601 名前:デフォルトの名無しさん [04/06/14 00:49] Trial版しか使ったことないけど、日本語の文字がちゃんと扱えてWindows上でちゃんとした 処理系があるのはACLだけかな。Trial版でもちょっとしたプログラム開発には十分使えますよ。
602 名前:デフォルトの名無しさん mailto:sage [04/06/15 00:10] VBやObjectPascalのイベントハンドラがLispで書かれていて萌えた(w
603 名前:デフォルトの名無しさん [04/06/15 23:31] >>13 で紹介されているSECDR-Schemeですが、配布元のサイトが 無くなっているみたいです。 私が利用しているDNSが悪いのでしょうか? 誰か親切な人うぷしていただけませんか?
604 名前:603 [04/06/15 23:39] 今、鯖落ちてる?
605 名前:デフォルトの名無しさん mailto:sage [04/06/16 00:27] >>601 LispWorksは? >>603 覚えてたら暇なとき発掘してみるよ。flatlineさん(だっけ?)が上げてたサイト使わせて もらってねら〜Lisper用ポータルでも作ろうか。 先週のセミナーでも思ったんだけど、Lisp興味あるけどどこから手を付けたらいいのか わからないって人も結構居るみたいだし。
606 名前:デフォルトの名無しさん mailto:sage [04/06/16 01:08] >Lisp興味あるけどどこから手を付けたらいいのか わからないって人も結構居るみたいだし 禿げしく力強くうなづきつつ、同意。
607 名前:デフォルトの名無しさん mailto:sage [04/06/16 01:54] そういえば初心者スレ無くなっちゃったね。 とりあえず c.l.l と Blog と wiki と *-dev 系の ML はチェックしてる。
608 名前:デフォルトの名無しさん mailto:sage [04/06/16 01:59] >>606 そうだよなぁ。 Schemeに関して言えば、そういう情報を集積する場所としてWiLiKiがあると 思うのでがしがし「こんな情報はないのか?」って書き込んでみるといいかも。
609 名前:デフォルトの名無しさん mailto:sage [04/06/16 03:07] >>607 次スレは 【common lisp】(S式のみで語らう漢のスレ)【scheme】 でお願いしm
610 名前:デフォルトの名無しさん mailto:sage [04/06/16 07:14] >>609 (だが気をつけ給え。 ((その論理)の行きつく先は) (激しく読み難い(スレ)だ))
611 名前:デフォルトの名無しさん mailto:sage [04/06/16 07:59] >>610 (and (気をつけ給え。 インデント) (equal (修正すると >>610 ) (気をつけ給え。 (equal (行きつく先 (その論理)) (激しく読み難い スレ)))))
612 名前:デフォルトの名無しさん mailto:sage [04/06/16 18:47] このスレを見て思い出した・・・ 去年、プログラミング言語2(Scheme)の単位落としたんだよな・・・ 今年の後期プログラミング言語2(Lisp)取らないと・・・
613 名前:デフォルトの名無しさん mailto:sage [04/06/16 18:56] おまいさんの大学は Scheme -> Lisp に変わったのか おれんとこは2年前から逆になったわけだが
614 名前:デフォルトの名無しさん [04/06/16 22:19] (age)
615 名前:605 mailto:sage [04/06/16 22:32] >>603 Secdr.tar.bz2っての拾ってきたけど多分コレだろ。 ドコに置けばいいか教えれ。288KBくらい。
616 名前:デフォルトの名無しさん mailto:sage [04/06/16 23:06] 皆さんは、LISP を習得することで、他の言語でのプログラミングにどういう メリットを感じましたか? 私は Scheme をある程度おぼえて、簡単なプログラムなら書けるようになったの だけど、この知識が例えば Java でのプログラミングに生かせるかというと、 今のところ、よく分からない。 関数プログラミング、ファーストクラスクロージャ、継続、マクロなどはとても 面白いと思ったけれど、Java では使えないし。 今のところ、JavaScript で何かできるかな?と思うぐらいです。JavaScript には ファーストクラスクロージャがあるから。 エリック・レイモンドが cruel.org/freeware/hacker.html 「LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。 この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。 たとえ、実際には LISP そのものをあまり使わなくても。」 と言っていたのはどういう意味なんだろう?
617 名前:デフォルトの名無しさん mailto:sage(ネタ振り参加) [04/06/17 03:00] >>616 > たとえ、実際には LISP そのものをあまり使わなくても。」 LISP を直接扱う仕事が少ない、LISP の技法が C に直接マッピングし辛い(クロージャとか)って 事ですよね。Java でも無名クラスとか CPS とか使う機会はそれほど無いのではないでしょうか。
618 名前:デフォルトの名無しさん mailto:sage [04/06/17 03:18] >>615 Secdr.tar.gz が 313KB なんでそれくらいでしょうね。ライセンスは GPL みたいなんで うぷろださえあれば私もうぷ出来ます。 ところで、SECD マシンじゃなくて SGCD マシン(G-Machine)というのがあるみたい ですが、これってどういう物なのでしょうか? ググって見たらグラフ理論と関係あるみたいですが、グラフ理論って最適化とかでよく 聞く物の、中身が良く分かりません。。。
619 名前:デフォルトの名無しさん mailto:sage [04/06/17 14:21] >>617 ちょっとメール欄が気になりますが、まあ、まさにその通りです。それだけでは Java のプログラミングスタイルが大きく変わる、という気がしないんです。 Lisp の良さは、どのようにも書けることだと思うんです。手続き型風にも、オブジェクト 指向風にも、関数型風にも書ける、何でもそろう百貨店のようです。 ところが他の言語は専門店なんです。例えば Java はクラスベースの型制限のきつい オブジェクト指向言語として書く以外に、あんまりできることがない。そうすると、 結局デザインパターンに従って書くより他にないのかな、ということになってしまう。 Java 捨てろ、と言われても、Lisp でやらせてもらえる仕事なんてないし。 皆さんはどのように考えていらっしゃいますか? >>618 私もグラフ理論はぜんぜん知らないんですが、n次空間での点と線の組み合わせの性質を 研究する学問だと聞いたことがあります。応用としては、回路図を基盤に起こすとき、 どのように回路を取り回せばよいかを検討するのに役立つそうです。 レゲエ数学者の秋山仁先生が、日本における第一人者だそうです。 『秋山仁の 落ちこぼれは天才だ 』 www.amazon.co.jp/exec/obidos/ASIN/4062739623/
620 名前:デフォルトの名無しさん mailto:sage [04/06/17 14:31] >>619 んー。逆方向で。 Lisp が百貨店だとしたら、他の言語で初めて触れるような機能に出くわしたとき、 「ああ、これは Lisp で言ったら○○だな」 て風に(Lisp にマッピングして)理解してみる、ということがやり易い、 ていう具合に考えてみるのはどうでしょう。
621 名前:デフォルトの名無しさん mailto:sage [04/06/17 15:35] >>618 G-Machineは、lazyな言語向きの仮想機械で 実行にグラフ書換えを利用してるものだったような。 うろ覚えだけど。 グラフ書換えについては、 『コンピュータ基礎理論ハンドブック』のたぶん2巻に解説があった気がする。
622 名前:デフォルトの名無しさん mailto:sage [04/06/17 16:13] >>620 確かにそれはできるかも知れません。実は Lisp を源流としている技術はこの業界には すごく多いみたいですから。 Java には、フレームワークだとか、EJB とかさまざまな新技術が次々導入されて いますが、「あ、これは Lisp のアレに相当するな」と分かれば習得は早いでしょうね。 しかし、もともと Lisp のエキスパートだった人はそれで良いでしょうが、今から Lisp を学ぼうという人はどうでしょう?遠回りをせず、Java の新技術を学んだ 方が早いのではないかという気がします。 何しろサーバサイド・プログラミングは Java の一人勝ちで、Java だけ覚えれば それで済んでしまうような状況ですから。代わりに Lisp が普及していてくれたらなあ。
623 名前:デフォルトの名無しさん mailto:sage [04/06/17 18:07] それにしても、Scheme の世界観は本当に美しいと思います。 以前、「継続というのは、靴下を裏返すようにして、ひっくり返した ラムダ」 という話を聞いて感動したのですが、 この下のほうの Shiro さんの説明 www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Seminar%3aKahua 「値を返す ≡ 値を継続手続きに渡す」 これを聞いて、さらに感動しました。 結局 Scheme の制御構造は ラムダしかない。関数もブロックも環境も、全部 ラムダ。なんか世界の見え方が変わってしまいますよね。 しかし、これを Java でのプログラミングに、どのように生かせばいいのだろう…。
624 名前:デフォルトの名無しさん mailto:sage [04/06/17 19:25] 例えば,今まで C しか知らず,そのままでいると: 1. 再帰を恐れる.再帰で考えられない.再帰のコーディングの仕方に慣れていない. 2. 配列ばっかり. 3. スコープについてしっかり理解できていない. 4. なぜか速度ばかり気にして,少ないステップ数を重視した見辛いコードを書く. といった感じになると思います. でも,これは「言語はいくつか学べ」の理由でしか無いかも.
625 名前:デフォルトの名無しさん mailto:sage [04/06/17 20:47] >>624 お前、C使いに物凄い偏見を持っていないか? または、たまたま >>624 の周りでCを使う奴は皆 その程度にしか使えないだけなのか?
626 名前:デフォルトの名無しさん [04/06/17 20:52] scheme 使う人に質問です。 何故 scheme は list の末尾が nil ではないのですか? 末尾は nil にしておいた方が美しい設計だと思うのですが・・・
627 名前:デフォルトの名無しさん mailto:sage [04/06/17 21:00] nil が存在しないからです。
628 名前:デフォルトの名無しさん mailto:sage [04/06/17 21:45] scheme を知ってからは C でも alist もどきを多用するようになった。
629 名前:デフォルトの名無しさん [04/06/17 23:11] >>626 リストの末尾は他と区別できる単一の要素(空リスト)があればいいだけなので、特にnilだと 美しいという根拠がわかりません。それよりも真偽値と区別のないLispよりはSchemeの方が すっきりしているのではないでしょうか。そもそも真偽値とリストは型が違うわけですから。
630 名前:デフォルトの名無しさん mailto:sage [04/06/17 23:39] >>626 名前が欲しいだけなら(define nil '())で。
631 名前:デフォルトの名無しさん mailto:sage [04/06/17 23:42] >>630 '(a . nil) が (a) にならない罠
632 名前:630 mailto:sage [04/06/17 23:50] あうち。リーダーマクロでなんとかとか... ごめん、忘れてください。
633 名前:603 mailto:sage [04/06/18 01:39] >>618 有難う御座います。↓とかにうpして貰えれば嬉しいです。 ttp://www.uploda.net/cgi/uploader2/index.php >>605 = 615 ご親切に有難う御座います。 bz2でうpできる場所は、見つかれませんでした。 拡張子を誤魔化してうpするという方法が、可能かどうかまで調べていません。 気が向いたら、うpしてください。
634 名前:デフォルトの名無しさん mailto:sage [04/06/18 01:58] うう…結局、Lisp を学んで、Java のプログラミングスタイルが変わった人は いらっしゃらないのでしょうか。この言語はとても魅力的だけど、仕事にほとんど 生かせないのなら、なんとも悲しいものがあります。 Namazu の高林さんが 「Scheme を学んでからは、他の言語でプログラムを書くときの切れ味もずいぶん変わった 気がする。」 namazu.org/~satoru/unimag/10/ と言っていたから、すごく期待していたんだけどなあ。 そう言えば高林さんは、Java が嫌いだとも言っていたか…。 www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview20.html
635 名前:デフォルトの名無しさん mailto:sage [04/06/18 02:05] 所詮その程度の人間だったということだ
636 名前:デフォルトの名無しさん mailto:sage [04/06/18 02:24] >>633 上げといた。こういうの使うの初めてなんだけど、これで良いのかな。
637 名前:デフォルトの名無しさん mailto:sage [04/06/18 02:59] >>634 今どきLispをやろうなんて物好きは、趣味で楽しんでやってるだけなんだから 仕事に生かそうなんて期待するな。
638 名前:603=633 mailto:sage [04/06/18 03:51] 無事↓できました。有難う御座いました。 勝手に想像していたものより良い意味で裏切られました。 まだ、ちょろっと読んだだけですが、付属のLibも一通り揃っている感じですし SECDRのRを何故Sから分離したのか、勉強してみたいと思います。 そういえば、どこかでSECDH machineというのが有ると聞いたときがありますが ここでのHの意味って、何なんでしょうね?
639 名前:デフォルトの名無しさん mailto:sage [04/06/18 09:23] >>634 プログラミングスタイルが変わらないんだとしたら、要するにLispで やってるような抽象化が必要とされるようなプロジェクトをやってない ってことでは。実際、Paul Grahamがなんと言おうと、世の中の プログラムの9割はそんな「力」を必要としないんだしさ。 漏れは、どうしても仕事でLisp以外の言語で書かざるを得ない時は、 人間コンパイラになったつもりで頭の中の高階関数のコードを静的な クラスに展開したり、人間マクロエクスパンダになったつもりで パターンに沿ったコード書いたりしてるけど。つくづく無駄なことを してると思うが、そのぶん金払うのはお客さんだしね。 ただ、どうしても我慢ができなくなった時は、LispでJavaやらCやらの 簡易マクロプロセッサを書くこともある。
640 名前:デフォルトの名無しさん mailto:sage [04/06/18 10:36] >>637 そう割り切ればいいのかもしれませんけど、仕事しんどいし、何かこの知見を 利用して楽になれないものかと思っちゃうんです。 >>639 > 要するにLispでやってるような抽象化が必要とされるようなプロジェクトをやってない ああ、それはありますねえ。 せっかく CPS を理解したんだから、今度の Java の仕事で session に継続を 保持させてみよう、と思ったんですが、考えてみたら、CPS を用いるほど細かい 制御はまず必要ないんです。 Lisp が一番力を発揮するのは、構文解析とか、複雑な構造のデータを扱う場合 だと思うんですけど、そういう仕事やってないですし。DB に SQL を発行して、 返った値をオブジェクトに収めて、JSP で表示させて、ハイ、おしまい。 マクロで展開させたいと思うようなことも、あんまりないです。 嫌だと言っても、世の中の99%はそういう仕事ですし。 「技術野郎の復讐---Revenge of the Nerds---」への反響 www.shiro.dreamhost.com/scheme/trans/icadmore-j.html >>635 氏の言う通り、私には Lisp は必要なかったのかな?いや、Lisp 業界が 私を必要としていないのか。…鬱だ死のう。
641 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:14] IO操作はcall-with-うんたらかんたら系があると便利だよね。 標準IOをインターフェース変えずにファイルやソケットや文字列に割り当てたり。 C/C++言語もそういう仕様だったらよかったのに。 こっちは出来た時代が古かったんだね。
642 名前:デフォルトの名無しさん [04/06/18 11:27] LISPのcarやcdrが基本なリスト操作知ってからは ほかの言語でリストコンテナ書き直す回数が減った。 いまどきのC++やjavaには標準で付いてるけどね。 でもそういう標準コンテナを使うときも LISPで培ったやり方が適用できると思う。 先にLISPのマクロ知ったおかげでboostとかのライブラリが幼稚に見える。
643 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:29] Javaの仕事がきついって言うけど、 それなら一番手っ取り早いのはJavaのエキスパートにコードを見せて 何か改善点がないか相談することでしょ。 改善のしようがなかったら、転職するかその仕事に耐えるかしかない。 どうやったらJavaに生かせるかLisperに訊かれても、そんなん知らんがな。 自分で応用していくしかないんだよ。
644 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:30] ま、仕事の質から言って、やっぱLISPが最強だったね。
645 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:35] 何でもかんでもLispでやりたがる奴はLisperじゃない
646 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:38] Guy Steele Jr.のメアド教えてください。
647 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:38] 誰もそんなこと言ってないが。 >被害妄想な645
648 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:38] >>646 どっかのMLにいたよ。
649 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:41] `(Guy,@Steele.Jr)
650 名前:デフォルトの名無しさん mailto:sage [04/06/18 11:42] 最強厨、現る
651 名前:デフォルトの名無しさん mailto:sage [04/06/18 14:32] >>647 お前に言ったわけじゃないんだが
652 名前:デフォルトの名無しさん [04/06/18 15:41] Lispの本って高い!!