1 名前:デフォルトの名無しさん [2005/05/12(木) 21:44:01 ] 過去スレ Part1: piza2.2ch.net/tech/kako/987/987169286.html Part2: pc.2ch.net/tech/kako/1002/10025/1002584344.html Part3: pc.2ch.net/tech/kako/1008/10082/1008220265.html Part4: pc.2ch.net/tech/kako/1016/10162/1016211619.html Part5: pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part6: pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part7: pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part8: pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part9: pc2.2ch.net/test/read.cgi/tech/1069594582/ Part10: pc5.2ch.net/test/read.cgi/tech/1075630259/ Part11: pc5.2ch.net/test/read.cgi/tech/1091456033/ Part12: pc8.2ch.net/test/read.cgi/tech/1100229366/ 関連リンクは>>2-10 あたり
2 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 21:45:39 ] >>1 スレ立て代行して頂きまして、 どうもありがとうございました。。。 世の中、良い人も居るんだなぁ〜とチョと嬉しくなりますた。
3 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 21:46:16 ] □参考リンク□ 日本Lispユーザ会(日本語) jp.franz.com/jlug/index.html ここにかなりの情報があります。 jp.franz.com/ 削るとAllegro Common Lispのページへ プログラミング言語Scheme(日本語) ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html Schemeの人はまずここを見ましょう。 Lisper への道(日本語) ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/rakup.html 判りやすいLISP入門サイト。 Schemeへの道(日本語) ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html ここはschemeの入門サイト。
4 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 21:46:28 ] □参考リンク□ 日本Lispユーザ会(日本語) jp.franz.com/jlug/index.html ここにかなりの情報があります。 jp.franz.com/ 削るとAllegro Common Lispのページへ プログラミング言語Scheme(日本語) ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html Schemeの人はまずここを見ましょう。 Lisper への道(日本語) ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/rakup.html 判りやすいLISP入門サイト。 Schemeへの道(日本語) ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html ここはschemeの入門サイト。
5 名前:デフォルトの名無しさん [2005/05/12(木) 21:47:00 ] 慶応の授業のページ・記号処理プログラミング 2001 buri.sfc.keio.ac.jp/lisp/menu.html Practical Scheme(日本語) ttp://www.shiro.dreamhost.com/scheme/index-j.html 「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。 (Gaucheという完成度の高いscheme処理系作者さんのページでもあります。) Scheme Hash(英語) okmij.org/ftp/Scheme/index.html S式でXMLを使える様にするSXMLなど John McCarthy's Home Page www-formal.stanford.edu/jmc/ LISPの生みの親、J・マッカーシーのページだそうです。 Association of Lisp Users www.alu.org/alu/home 米国のLispユーザ会
6 名前:デフォルトの名無しさん [2005/05/12(木) 21:47:30 ] □SICP関係□ SICP(英語) mitpress.mit.edu/sicp/full-text/book/book.html 「計算機プログラムの構造と解釈」の原書です。 全てオンラインで読めます。 計算機プログラムの構造と解釈 第二版 (snip) に関連するホームページ www.ipl.t.u-tokyo.ac.jp/sicp/ SICPの回答集 www.melt.kyutech.ac.jp/~gogogo/sicp_ex/ pluto.aurorasd.co.jp/~mkama/sicp/ www.ipl.t.u-tokyo.ac.jp/sicp/solution.root.html www.sampou.org/scheme/sicp/answer/
7 名前:デフォルトの名無しさん [2005/05/12(木) 21:48:41 ] □その他□ Schemeで書かれた正規表現ライブラリ ttp://www.cs.rice.edu/~dorai/pregexp/pregexp.html 幻の「入門Scheme」 ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html オンラインで読める 各種scheme処理系をcygwin上からビルドする方法など。 ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/ Bit - Implantation compacte de Scheme www.iro.umontreal.ca/~dube/ mini-schemeよりも小さい(?)bytecode変換系 Lisp 言語処理系: CAMPUS LIsP, Lemon version aten.aial.hiroshima-u.ac.jp/~kakugawa/clisp/index-ja.shtml Cコードによるわずか1000行の実装 Cliki www.cliki.net/index CommonLispのプログラムがたくさん紹介されているのでここを当たるべし。
8 名前:デフォルトの名無しさん [2005/05/12(木) 21:49:14 ] encyCMUCLopedia www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/ cmucl以外でも有益なはず CMUのLisp Repository ftp://ftp.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/0.html 新旧様々なプログラムが置いてある Tiny CLOS Tutorial home.adelphi.edu/~sbloch/class/272/tclos/tutorial.shtml Schemix www.abstractnonsense.com/schemix/ Linuxのkernelへのパッチで、/dev/として扱えるTinyScheme Bibliography of Scheme-related Research library.readscheme.org/ Scheme関連の論文リンク集
9 名前:デフォルトの名無しさん [2005/05/12(木) 21:50:32 ] その他よさそうなリンク awkで書かれたわずか500行のLispインタプリタ awklispを読めばLispが理解できる ttp://www.accesscom.com/~darius/ Emacs Lisp 2 pc2.2ch.net/test/read.cgi/tech/1068467385/ * Hotdog Scheme rover.cs.nwu.edu/~scheme/ MS が金出してたみたい * Bigloo www-sop.inria.fr/mimosa/fp/Bigloo/ CLR 用のコードを吐けるようになったらしい 継続 なんでも継続 ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html Schemeへの道:継続 www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/continuation.html 継続の使い方 www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#continuation 継続の使用法 www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html CPS(継続渡しスタイル)の説明 www.csl.sony.co.jp/person/masui/Forum/data/20011215023622/ Kahua: 継続ベースのアプリケーションサーバー ttp://www.kahua.org/
10 名前:デフォルトの名無しさん [2005/05/12(木) 21:51:06 ] 仕様関係) CLtL2: Common Lisp the Language 2nd edition www-2.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html CLHS: Common Lisp Hyper Spec www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/FrontMatter/Chapter-Index.html R5RS: Revised(5) Scheme(ja) www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html 便利な情報リソース) The Common Lisp Cookbook: いわゆる Cookbook cl-cookbook.sourceforge.net/ 小さい実装) SECDR-Scheme: SECD machine model に基づく実装 ttp://lily.fan.gr.jp/~kmd/adhoc/view.rhtml?n=SECDR-Scheme_woyomu Minischeme: 1 ファイルに凝縮された Scheme 処理系 tinyscheme.sourceforge.net/minischeme.tar.gz TinyScheme: Minischeme を色々弄ったもの tinyscheme.sourceforge.net/ KI-Scheme, AM-Scheme, etc... www.nifty.com/download/dos/prog/lisp/ LispMe: Palm 上で動く Scheme 処理系. これも SECD virtual machine. www.lispme.de/lispme/
11 名前:デフォルトの名無しさん [2005/05/12(木) 21:51:34 ] LISP Scheme Part9 (html化) ruku.qp.tc/dat2ch/0403/01/1069594582.html 独習 Scheme 三週間 www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-1.html Schemeの教科書 よろずや www.geocities.co.jp/SiliconValley-SanJose/7474/ lispの実用的な情報が色々。
12 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 21:54:42 ] >>1-11 おつかれさまです
13 名前:前すれ995 mailto:sage [2005/05/12(木) 22:06:47 ] すまん駄目だった。 何も書かないってのはまずかったな。 かえってストレス溜まるわ。 >1乙
14 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 22:55:58 ] こいつらも貼っておこうぜ Common-Lisp.net: 多くのプロジェクトがホスティングされてる ttp://common-lisp.net/ Bill Clementson's Blog: Lisp関連の話題が中心のBlog ttp://home.comcast.net/~bc19191/blog/ Practical Common Lisp: S式の羅列で現実的な問題をどう解くのかそのギャップに悩まされてる人に ttp://www.gigamonkeys.com/book/
15 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 23:02:53 ] >>13 乙です。 末尾再帰 (define fact (lambda (n) (letrec ((fact-tailrecursion (lambda (n prod) (if (= n 1) prod (fact-tailrecursion (- n 1) (* prod n)) ) ) )) (fact-tailrecursion n 1) ) ) 上記の末尾再帰は、下記のiterationと等価。 (define fact-iteration (lambda (n) (do ((n n (- n 1)) (prod 1 (* prod n)) ) ((= n 1) prod) ) ) )
16 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 23:04:11 ] 新スレわざわざ立てずとも、 末尾再帰最適化でなんとかならんのかw
17 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 23:07:54 ] 継続があれば
18 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 23:09:10 ] とりあえず gc しときますね。
19 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 23:40:23 ] ゴミがまったくなかったらGCなんて無意味
20 名前:デフォルトの名無しさん mailto:sage [2005/05/13(金) 09:23:04 ] ゴミのないものなどない >1 乙
21 名前:デフォルトの名無しさん mailto:sage [2005/05/13(金) 20:09:25 ] 再利用できないゴミばっかだったらGCなんて無意味
22 名前:デフォルトの名無しさん mailto:sage [2005/05/14(土) 22:25:15 ] Prolog → … → Progol / μPlannner→Planner → Conniver→ Scheme → Common Lisp → ISO Lisp \ / ▲このスレ Plasma → → → → ABCL → ... Simula67→ Smalltalk70 → … → Smalltalk80 → … → Java , C# (w 目的指向プログラミング 論理プログラミング 帰納論理プログラミング 積み木の世界 Actor理論 並列オブジェクト 分散オブジェクト マルチエージェント セマンティックWeb
23 名前:デフォルトの名無しさん mailto:sage [2005/05/15(日) 02:45:27 ] >>22 は何?
24 名前:デフォルトの名無しさん mailto:sage [2005/05/15(日) 02:55:24 ] gcされなくなるので参照しないこと
25 名前:デフォルトの名無しさん [2005/05/15(日) 03:52:27 ] 2ちゃんで異様に伸びてるスレって、 大抵ネイティブ住人はとうの昔に消えて、 荒しが初期のスレの拡大再生産してるだけだって噂、本当なんだな。 ここまで荒廃してるとは知らなかった。もうこねぇよ。じゃぁな
26 名前:デフォルトの名無しさん mailto:sage [2005/05/15(日) 03:55:18 ] >>25 は何?
27 名前:デフォルトの名無しさん mailto:sage [2005/05/15(日) 04:07:19 ] >>22 = >>25
28 名前:デフォルトの名無しさん mailto:sage [2005/05/15(日) 04:14:59 ] よくわかりませんが、ここに (gc) 置いときますね
29 名前:デフォルトの名無しさん mailto:sage [2005/05/15(日) 10:32:03 ] >>22 いろいろ消し過ぎ....gcのバグか?
30 名前:デフォルトの名無しさん [2005/05/15(日) 11:57:14 ] 以下の処理が実行できない理由を教えて下さい。 (define a 33) (letrec ((c a)(a 10)) c)
31 名前:30 mailto:sage [2005/05/15(日) 12:22:26 ] すみません。自己解決しました。 letrecで、cとaの未初期化領域が生成され、cには未初期化のaの値がはいる。 そのため、gaucheだと#undefがでてくる。 letrecの本質は、ローカル変数定義時にエラーを出さずに本体を実行するという部分にあるのですね。
32 名前:デフォルトの名無しさん mailto:sage [2005/05/15(日) 12:29:16 ] >>31 それは違う
33 名前:デフォルトの名無しさん mailto:sage [2005/05/15(日) 15:51:50 ] recはrecurs-のrec
34 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 09:37:17 ] >>31 >letrecの本質は、ローカル変数定義時にエラーを出さずに本体を実行するという部分にあるのですね。 これは違うと思う。30の例はシンタックスエラーになるべきだと思うんだが。 > gaucheだと#undefがでてくる ということは、もしかしてgaucheだと (define a 33) (letrec ((c a) (a 10)) (set! c a) c) --> 10 になるのかな? そうなるとしたら、ちょっと不味いと思うんだが....どう?
35 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 09:41:09 ] >>34 それで10になるのは全然問題なさそうに思うんだけど、どうまずいの?
36 名前:34 mailto:sage [2005/05/16(月) 09:52:10 ] >>35 gaucheの#undefがどういう意味で出力されているのか知らないから聞いたんだけど、もしこれがletrec全体の評価結果として出力しているとしたら、これはシンタックスエラーを無視して実行していると思えたからなんだ。 これは、cにaを束縛しようとした時点で未定義変数への参照によるエラーが発生するべきだと思うからなんだけど.... これは正しいプログラムなら実行結果は同じになるからいいんだけど、schemeの勉強に使うにはちょっと不味いんじゃないかと思ったんだ。 実際、30は勘違いしたみたいだし。
37 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 10:43:01 ] 補足: R5RS 4.2.2 より (letrec
38 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 10:46:37 ] 補足: R5RS 4.2.2 より (letrec
39 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 12:11:05 ] >>36 エラーを出さなくてもR5RS違反ではないけどね。学習用として不親切ではあるな。
40 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 12:20:51 ] 局所変数定義 letrec使ってエラーだエラーじゃないって? 頭が可笑しい人のレスか
41 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 12:32:23 ] letrec ではすべての局所変数が定義されてから初期化されますが、 初期化中に局所変数をアクセスするとエラーになってしまいますので注意。 すべての初期化が終わってからでないとアクセス出来ません。 letrec は、再帰関数を定義するのに使います。 (letrec ((fact (lambda (x) (if (> x 0) (* (fact (- x 1))) 1)))) (fact 10))
42 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 13:15:00 ] 学習用の DrScheme でもエラーにならないね。 (letrec ((x a) (a 1)) ...) を (let ((x 未定義) (a 未定義)) (set! x a) (set! a 1) ...) のように展開 する実装では、チェックが難しいのかな。
43 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 13:36:54 ] エラーになる処理系ある?
44 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 16:07:24 ] SCM はエラー出すみたい。
45 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 21:36:19 ] >>9 >継続の使用法 >ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html これの学生さん卒業したのかな 2005 年 4 月以降どうなるか不明と書いてある Bill Clementson's Blog も移動するみたいだね ttp://home.comcast.net/~bc19191/blog/index.html
46 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 22:00:06 ] ああ。学生の頃の自分思い出して、やり切れない気持ちになった。 特にLispって研究テーマにはなりにくいよなぁ。 最近は、ソフトウェア実装屋を対象とした学部/研究科が増えてるらしいけど。 俺の友人で、どうしても哲学をやりたくて、社会人入学した香具師がいる。 まだ数年前、塾だか予備校で飯代稼ぎながら、いろいろ模索してた。 そこまで真剣に学問の道を考えるなら、きっと誰か拾ってくれるでしょ。と祈りたい(w
47 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 02:55:59 ] どっかで見た話題だなあと思ったら、似たのが sicp の練習問題にあるね。 letlec じゃなくて internal define だけど。 mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_thm_4.19 確か r6rs では internal define と関連して letlec* が追加されるとかいう話だけど、 未束縛の変数に左から順に set! していく、て実装だったら そっちの方がやってる事に即している感じはするな。
48 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 13:10:19 ] r6rsって出るのかなぁ
49 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 13:17:03 ] 今議論してるんだから、出るだろ。そのうち。
50 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 22:52:50 ] R6RSに含まれる機能は何でしょう? おれが欲しいと思ってるのは ・名前空間 (せめてパッケージ)はぜひとも導入して欲しい。 いつまでも大域letで囲むなんて馬鹿げてる。 ・多値のファーストクラス化 インタプリタの延長みたいな実装がほとんどの現状で 多値を効率よく扱える手段がないとまともに使いたくない。 (let ((v (values 1 2 3))) (if (values? v) (value-ref v 2) ;; => 3 (error "excepted values")) とか。 せめて上のvalues?のように関数の返す値が多値かどうか 呼び出し側で判らないと使い物にならないだろう。 ・関数呼び出し側の名前つき引数。 VBのアレは便利だろ? あと ・キーワード、定義済マクロ名の参照はエラーにする くだらん論争の種を潰す。 とか。
51 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 23:18:59 ] www.schemers.org/Documents/Standards/Charter/
52 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 23:39:22 ] >>51 >remove multiple values 正気かよ。 って、まだ決まってないのか。 消すんじゃなくて発展させる方向に行かないかね。 副作用記述減らせる手段の1つなのに。
53 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 23:49:43 ] >>50 > ・名前空間 > ・関数呼び出し側の名前つき引数。 Common Lisp で幸せ
54 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 23:51:41 ] いや、CommonLispに転向するぐらいならLISP辞めたほうがマシ
55 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 23:52:37 ] 以降、CL厨が暴れます。。。
56 名前:デフォルトの名無しさん mailto:sage [2005/05/17(火) 23:58:10 ] R6RS より CLtL3 をやってほしい
57 名前:デフォルトの名無しさん mailto:sage [2005/05/18(水) 00:03:09 ] >>54 >副作用記述減らせる手段の1つなのに。 詳しく。
58 名前:デフォルトの名無しさん mailto:sage [2005/05/18(水) 00:19:04 ] リスト内包表現が簡単に書けた。拡張可能だしhaskellより便利になり得る。 (define-syntax %inner-tuple (syntax-rules (<-) ((_ (<- ret) form var val rest ...) (%inner-tuple ret (set! ret (cons form ret)) var val rest ...)) ((_ ret form () ()) (let ((ret '())) form (reverse! ret))) ((_ ret form (pred rest-var ...) (<- rest-val ...)) (%inner-tuple ret (if pred form) (rest-var ...) (rest-val ...))) ((_ ret form (var rest-var ...) (val rest-val ...)) (%inner-tuple ret (let lp ((lis val)) (if (null? lis) '() (let ((var (car lis))) lis form (lp (cdr lis))))) (rest-var ...) (rest-val ...))) ((_ ret form (var ...) (val ...) (var1 <- val1) rest ...) (%inner-tuple ret form (var1 var ...) (val1 val ...) rest ...)) ((_ ret form (var ...) (val ...) pred rest ...) (%inner-tuple ret form (pred var ...) (<- val ...) rest ...)) )) (define-syntax tuple (syntax-rules () ((_ form args ...) (%inner-tuple (<- ret) form () () args ...)))) (tuple (cons i j) (i <- (iota 10)) (j <- (iota 10)))
59 名前:デフォルトの名無しさん mailto:sage [2005/05/18(水) 03:22:06 ] クロージャ用シンタックスシュガー?
60 名前:デフォルトの名無しさん mailto:sage [2005/05/18(水) 05:09:08 ] 多値なんて (関数引数と戻り値の対称性に関する神学的な論争を除けば) パフォーマンスハックにすぎないんだから、ファーストクラス化しちゃったら 唯一のメリットが失われるじゃん。 >>50 みたいに扱いたいならリスト返すか、(receive v (values 1 2 3) ...) で受ければいいだけだしさ。
61 名前:デフォルトの名無しさん mailto:sage [2005/05/18(水) 23:48:39 ] 神学的な論争こそがschemeの本質なのに!
62 名前:デフォルトの名無しさん mailto:sage [2005/05/19(木) 00:00:16 ] 否定はすまい
63 名前:デフォルトの名無しさん mailto:sage [2005/05/19(木) 00:14:04 ] ……………… き り と り せ ん ………………
64 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 01:34:32 ] 合理性 → HASKELL 神学的論争 → SCHEME 実用性 → その他
65 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 02:10:31 ] 実用性 → Common Lisp に決まってる
66 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 03:57:47 ] ……………… き り と り せ ん ………………
67 名前:デフォルトの名無しさん [2005/05/20(金) 22:23:21 ] 久々にSchemeインタプリタ作った やっぱええわ
68 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 23:25:37 ] 久々にCommon Lispコンパイラ作った やっぱ疲れるわ <湯浅>
69 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 23:31:35 ] 「ええ、PM経験した僕も、一昨年は近山PMの下でスーパークリエータとしてデビューしました。 はぎゃー君も誘ったんだけど、彼は真面目だから付き合ってくれませんでした。 成果物は国際学会の発表ネタに使いまわしたんですけど、 サスマン教授は『素晴らしい。是非このロボを譲ってくれないか』って激賞されちゃいましたよ」 だいたいマジ
70 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 00:09:28 ] おとなげない
71 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 00:17:04 ] いみふめ。 こだわらずに楽しい事をやろうとする精神、 そして応募して採択されたもん勝ちだよんとアピールする姿に、 なんか楽しくなっちゃったけどなw
72 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 00:23:16 ] 重要なのは、言語でなくライブラリだよ
73 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 00:28:59 ] >>72 だよねー
74 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 00:42:32 ] また頭悪そうなのが粘着しはじめたな
75 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:46:28 ] 言語仕様(意味論込)として、scheme 以上にすっきりした言語 ってなにがありんすか?
76 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:48:10 ] ○ransk?
77 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 02:03:40 ] アセンブリ
78 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 02:05:48 ] 万能チューリング機械
79 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 02:10:23 ] brainf*ck
80 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 02:25:38 ] >>50 >・名前空間 >(せめてパッケージ)はぜひとも導入して欲しい。 >いつまでも大域letで囲むなんて馬鹿げてる。 遅レスすまそ。let使ってパッケージもどきを作る方法があるの? Schemeだとlet内でdefineしてもグローバルに反映されないから無理だと 思ってたんだけど(Common Lispならできる)。 モジュールじゃおおげさな時に使いたいので教えて。
81 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 07:56:06 ] 横スレだが、わたしゃこうしてる。 (define export:foo #f) (let () (define foo ...) ... (set! export:foo foo)) (define foo export:foo)
82 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 09:15:39 ] それならグローバルなハッシュテーブルに詰め込んでおく方が。 パッケージとは別に、CommonLisp風のset!(ローカルでunboundなら グローバルにbindする)ができたら便利だとは思うが、Schemeじゃ多分無理。
83 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 09:29:09 ] 俺はこうかな (define foo #f) (define bar #f) (let () (define hoge ...) (set! foo (lambda (...)...)) (set! bar (lambda (...)...)) ) でも、最適化が効きにくくて>>81 より遅くなりそうだな...(考え中) >それならグローバルなハッシュテーブルに詰め込んでおく方が。 それってどんなやりかた?
84 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 11:15:02 ] えぇー、scm.libとかでやってる方法がデフォルトだと思ってた
85 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 11:20:08 ] (make-hash-table xxx-package) (let (pi 3.141692) (define hoge ...) (hash-table-put! xxx-package 'foo (lambda (...) ...)) (hash-table-put! xxx-package 'bar (lambda (...) ...)) ) (define foo (hash-table-get xxx-package 'foo)) (define bar (hash-table-get xxx-package 'bar)) >>83 こんな感じ。実際こうやって使ったことないからちゃんと動くかわからないけど。 >>84 それはパッケージ管理?CommonLisp風のset!の提供の方?
86 名前:84 mailto:sage [2005/05/21(土) 11:40:44 ] >>85 パケージ管理の話してるんだろ、ここ?
87 名前:84 mailto:sage [2005/05/21(土) 11:57:22 ] slibの話のつもりだったんだけど・・・あれ?パッケージ管理してねぇや。。。スレ汚しすまそ
88 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 11:58:31 ] slibの話のつもりだったんだけど・・・あれ?パッケージ管理してるけど名前空間は分けてないや。。。スレ汚し^2すまそ
89 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 12:11:23 ] つまらんことで悩んでないで Common Lisp 使え
90 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 12:14:26 ] うぜ
91 名前:83 mailto:sage [2005/05/21(土) 15:17:48 ] >>85 なるほどそういう使い方があったのか THX! すると例えば (define-syntax define-package (syntax-rules (export) ((_ pkgname (export id ...) body ...) (begin (define pkgname (make-hash-table)) (let () body ... (hash-table-put! pkgname 'id id) ...) (define id (hash-table-get pkgname 'id)) ...)))) とやって (define-package foo-package (export foo bar) (define hoge 9) (define foo (lambda (x) (- x hoge))) (define bar (lambda (y) (+ y hoge)))) とすれば hoge => #unbound (foo 10) => 1 (bar 10) => 19 となるわけか。 実装に依存したくない時はいいかも!
92 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 16:11:17 ] hash-table自体が実装に依存する罠 まあ後付で作れるけどさ
93 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 03:54:25 ] すごく遅くてもいいならalist使えばいい。
94 名前:ミミ [2005/05/22(日) 19:28:26 ] Scheme でクラスを定義する場合、 メンバ変数の命名規則はどうしていますか? Java や C++ だと m_var とか _var とか var_ とかで 命名すると思いますが、Scheme でアンダースコアは あまり使われませんよね。
95 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 22:43:35 ] >>94 そうでもない。アンダースコアも普通に使うよ。
96 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 22:55:17 ] 入力したlistを整数倍してlistで返すにはどうすればいいんですか?(list 3 4) → (list 6 8) みたいな感じです。 consでかえるようにならできたんですが。
97 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 22:56:18 ] map
98 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 22:58:57 ] >>96 (map (lambda (elt) (* elt 2)) (list 3 4)) --> (6 8) ってことかな?
99 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 22:59:39 ] ((cut map * 2 <>) '(3 4)) => (6 8) cut :: SRFI 26: Notation for Specializing Parameters without Currying
100 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 23:02:09 ] (map (lambda (n) (* n 2)) (list 3 4)) LISPなど全く知らない俺が適当に書いてみました
101 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 23:16:22 ] (define-syntax m-list (syntax-rules () ((_) ()) ((_ dat ...) (list (* dat 2) ...)))) (m-list 3 4) --> (6 8)
102 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 23:23:36 ] (define-syntax rewrite-list (syntax-rules (list) ((_ n (list dat ...)) (list 'list (* dat n) ...)))) (rewrite-list 2 (list 3 4)) --> (list 6 8)
103 名前:ミミ [2005/05/22(日) 23:28:13 ] >>95 クラスのメンバ変数をアンダースコアで命名していますか?
104 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 23:36:35 ] クラスのメンバ変数など存在しない
105 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 23:46:45 ] ハイフォンが使えるのにアンダースコア使う理由って何? と、LISPなど全く知らない俺が適当に聞いてみる
106 名前:ミミ [2005/05/22(日) 23:50:28 ] >>104 どういうこと?
107 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 00:03:56 ] >>105 単に単語の区切りの意味でハイフンは使うから区別したいんじゃね?
108 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 00:08:48 ] >>107 わかるようなわからんような、実例プリーズ
109 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 03:27:32 ] すみません。scheme というか lisp 初めたばかりなのですが、 list と cons の意味がわかりません。 (cons 1 2) と (list 1 2) はどう違うんでしょうか。 両方とも car と cdr の結果は同じですよね?
110 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 03:36:08 ] >>109 car は同じだけど、 cdr は違うよ。 (car (cons 1 2)) 1 (cdr (cons 1 2)) 2 (car (list 1 2)) 1 (cdr (list 1 2)) (2)
111 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 04:07:51 ] はい。 (cdr (list 1 2)) が (2) になるのはどういった理由かわからないのです…
112 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 04:18:46 ] あぁ、pair と list の項目を読んでみたら、なんとなくわかった気がします。 スレよごし、スミマセン。
113 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 08:34:12 ] >>112 cons は「core」で、list は「library」みたいな区別をしてみるのもいいかも. 「library」は「core」から導くことができるんだね. 例えば list は (lambda x x) と等価とかね ( もちろん lambda は「core」). 後になって、define-syntax とかでマクロを組むときに、きっと役に立つよ. 雑談スマソ
114 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 09:25:14 ] わざわざオレ用語で説明せんでも。
115 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 11:07:33 ] >>113 lambda は「library」でいいじゃん (define-syntax λ (syntax-rules () ((_ formals body1 body2 ...) (let-syntax ((dummy (syntax-rules () ((dummy) #f)))) (define (proc . formals) body1 body2 ...) proc))))
116 名前:3歳児 mailto:sage [2005/05/23(月) 11:13:33 ] たんなることばのもんだいだと思いまちた
117 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 17:04:35 ] >>111 (cadr (list 1 2))が2になる、って言ったら解る? (car (cdr (list 1 2)))と同じ。 あと、(list 1 2)は(cons 1 (list 2))と同じ 図で描くと解りやすいけど、図入りの本は持ってないの?
118 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 17:11:34 ] 最もプリミティブなのは点対だからね。 (a b c) ってのは (a . (b . (c . ()))) の略だということを思い出そう。
119 名前:3歳児 mailto:sage [2005/05/23(月) 17:15:23 ] このすれのれべる、がくっとさがりまちたねぇ
120 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 17:28:09 ] >>114 R5RS読めば?
121 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 18:09:23 ] R5RSの「primitive」のことを「core」なんて命名してるからオレ言語と 揶揄されてるんじゃないの?
122 名前:Scheme 初心者 mailto:sage [2005/05/23(月) 23:57:52 ] >>115 define は lambda を使って定義できると思うのですが・・・
123 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 00:08:48 ] >>122 つか (define (f args...) body...) って (define f (lambda (args...) body...) の省略形だから(ry
124 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 00:21:28 ] let も lambda で書ける
125 名前:112 mailto:sage [2005/05/24(火) 00:40:23 ] >>115 >>123 1変数関数の場合で、例えばフィボナッチ数列を 求める関数をdefineを使わないで定義したいときは、 (((lambda (f) ((lambda (p) (f (lambda (arg) ((p p) arg)))) (lambda (p) (f (lambda (arg) ((p p) arg)))))) (lambda (fib) (lambda (n) (if (<= n 1) 1 (+ (fib (- n 1)) (fib (- n 2))))))) 10) で定義できるから、lambdaがprimitiveでdefineはlibraryじゃないの? マジで初心者だから教えてよママン!
126 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 01:53:11 ] >>125 基本的には正しい。lambdaがあれば変数の束縛もできるからdefineの代用になる。
127 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 02:18:50 ] トップレベル以外はな
128 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 08:02:54 ] トップレベルもset!があればR5RS的には○。IEEE的には●でなかったっけ?
129 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 09:21:37 ] R5RSだと、define で割り当てされてないと set! はエラーじゃなかったっけ
130 名前:?デフォルトの名無しさん mailto:sage [2005/05/24(火) 11:52:15 ] R5RS 5.2.1 の最後の段落の日本語訳によれば 「Schemeの実装によっては、初期環境として、可能なあらゆる変数がなんらかの場所に束縛されており、そしてその場 所の大多数が未定義値を入れている、という環境を使う。このような実装ではトップ・レベル定義は代入と全く等価である。」 とあるんだけど.... これはそういう実装でもかまわないって意味なのかねぇ?
131 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 11:59:00 ] そういうこと。
132 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 16:24:30 ] 手元の処理系 (Gauche、Guile、PLT Scheme) では、未定義変数の参照、変更 はいずれもエラーになったな。>>130 からするとエラーにしなくてもかまわない みたいだけど、そういった処理系ある?
133 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 19:45:26 ] petite chezではエラーにならないようだ。 SCMもオプションでそうできた記憶があるけど未確認ですまぬ。
134 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 21:25:05 ] schemeのquasiquote書いてみました。これで合ってます? (define-syntax qq (syntax-rules (quote quasiquote unquote unquote-splicing) ((qq x) (qq "in" 0 x)) ((qq "in" lv (quote x)) (list 'quote (qq "in" lv x))) ((qq "in" lv (quasiquote x)) (list 'quasiquote (qq "in" (1 . lv) x))) ((qq "in" 0 (unquote x)) x) ((qq "in" (1 . lv) (unquote x)) (list 'unquote (qq "in" lv x))) ((qq "in" 0 (unquote-splicing x)) x) ((qq "in" lv ((unquote-splicing x) . xs)) (append (qq "in" lv (unquote-splicing x)) (qq "in" lv xs))) ((qq "in" lv (x . xs)) (cons (qq "in" lv x) (qq "in" lv xs))) ((qq "in" lv #(x ...)) (list->vector (qq "in" lv (x ...)))) ((qq "in" lv x) (quote x))))
135 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 00:57:22 ] LISP の歴史 community.computerhistory.org/scc/projects/LISP/ INTERLISP の絵が可愛い
136 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 04:29:05 ] >>135 可愛いね。壁紙にしよう。
137 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 09:20:32 ] すごく2chのAAっぽいんだが。
138 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 09:24:53 ] >>137 2chのやりすぎ(w
139 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 15:42:08 ] >>136 壁紙には風太くんの写真だよ。
140 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 01:33:40 ] やった、LISP をものにしたぞ!
141 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 03:57:12 ] >>140 悟れた?
142 名前:デフォルトの名無しさん mailto:age [2005/05/30(月) 09:14:27 ] Windows/VC++版のGauche-0.8.3w-03公開記念age
143 名前:デフォルトの名無しさん [2005/05/30(月) 22:20:33 ] あはは、やっとWindowsで動かないと糞だってことが透過したか その調子でCMUCLのWindowsポーティングも頼むよ
144 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:32:25 ] >>143 取り敢えず、ここら辺りから頑張ってみれ。 www.caddr.com/macho/archives/sbcl-devel/2004-7/3690.html
145 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:36:20 ] 15年位前の記憶だけど、 CMUCLはKCLと違って、 RISC CPU (SPARC)専用にチューニングされてるから Intelには移植しにくそう・・・つう風評を聞いたな。
146 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:39:08 ] こっちの方が良かったかな。 ttp://www.dridus.com/~nyef/sbcl-on-win32.png 一年もあれば何とかなるんじゃなかろうか。
147 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:44:37 ] いまどき、CMUCL移植までして動かすアプリって何なんだろ? 当時は 制約ベースのGUIツールキットとか、音楽関係で動かしたいアプリがあったような記憶があるけど。
148 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:47:00 ] >>146 もしかして、シグウィン上で動かしているの? 折れ、cygwin嫌いなんだよな。 昔、ノーパソに入れたら恐ろしく遅かったから。。 多分、日本語も今市だし。
149 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:48:13 ] いや、君が嫌いだろうと好きだろうと、俺は別に構わんが。
150 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:06:14 ] >>145 今でも CMUCL のメインのメンテナは SPARC 使いだね。 メインのプラットフォームは x86 と言って間違いないと思うけど。
151 名前:145 mailto:sage [2005/05/30(月) 23:07:54 ] >>144 なるほど。 SPARCベッタリのCMUCLとは別に、 移植性の高いCMUCLクローンを Pythonベースのクロスコンパイラを種に ブートストラップ方式で作る、つうプロジェクトっすか。 CMU CL:カーネギー氏とメロン氏が鉄鋼業で貯めたお金で作った大学のCommon Lisp SB CL: 例の 鉄でガッポリ儲けた所が作ったのとよく似たCommon Lisp っすか。なんじゃこのネーミングセンスはw
152 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:14:49 ] >>150 ・・・今じゃx86で動くんですか。DOS Extender時代(pre Linux時代)とは隔世の感だなぁ
153 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:22:13 ] ずいぶん前にSchemeのContinuationの実装方法をここで議論した事があったんだけど、 議論と思ってたのは俺だけ、実はお相手は随分なプロヘッショナルな方だったのね。 某所でプロが揃い踏みしてるの見て、ちょっとビビってしまった(いやいや俺もプロだし・・・何のプロだろう?
154 名前:Schemer mailto:sage [2005/05/30(月) 23:22:18 ] Lisper からみたら Schemer ってどうみえるのでしょうか? 自分の中では、 Lisp = 松下(統制されている)またはブリーフ(チソポが窮屈) Scheme = ホンダ (自由にしてる)またはトランクス(チソポがフリー) という感じがする。
155 名前:153 mailto:sage [2005/05/30(月) 23:22:52 ] あらら、一瞬にしてレベルが低下してるし
156 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:31:50 ] Lisp遣い・・・・・・数式処理や並列計算、専用ハード設計、あと駅スパートシステムとかWebアプリのプロヘッショナル Scheme遣い・・・実物見た事ないっす。厳選された奇妙な形のブロックでお城を建てる哲学者?
157 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:32:28 ] >>151 鉄はカーネギーで、メロンは銀行だよ。だからスチール(鉄)バンク(銀行)。 最近は SBCL の方が UNICODE やネイティブスレッドの採用など、CMUCL よりも使い易くなってると思います。移植性も良いし。 SPARC は tagged arithmetic があるから Lisp コンパイラを作り易いという 話だけど、ユーザーベースから言ったらやっぱり x86 な訳で、開発者にも Linux 使いが多い感じ。あと、意外にも Mac ユーザが多いっぽいね。
158 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:35:49 ] >>157 すまそ、Steel Bank Common Lisp Developper MLの一通目を斜め読みするのがやっとで、 バンクをなんとなく無視してますた。 > SPARCは tagged arithmetic そうそうw SUN のSPARC関連論文漁ってると、SPARCは最初からLispのサポートを視野に入れていたとか見た。 ・・・Java CPUは一体どうなったんだろう(w
159 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:37:05 ] >>154 Schemer: "Buddha is small, clean, and serious." Lispnik: "Buddha is big, has hairy armpits, and laughs." Nikodemus 氏のシグニチャだけど、名言だね。
160 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:41:22 ] >>158 ググると、Lucid Common Lisp の為に用意されたって記述があるけど 真偽の程はどうでしょう。 Lucid の社長さんって Sun に居た気がしたけど、今どうしてるのかな。
161 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 23:53:24 ] >>159 綺麗でかわいいブッダと、 腋毛ボウボウの豪傑ブッダかよ! 科学では、少ない原則でより多くの事柄を説明できる理論を採用する。 すると、Schemeが示そうとしているScienceは一体なんなんだろう。。。 >>160 Lucid 社長・・・わかんない。名前は聞いた事あるけど。 最近、Lisperの臭いをくんくん嗅ぎ分けながら業界のたくってるんだけど、 Frantz社長の名前くらいしか聞かなかった。あとは元Symbolicsで今は紺猿の人とか。
162 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 00:06:15 ] 閑話休題
163 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 00:42:03 ] Lucid は今の LispWorks じゃないかな。 以前評価したときは Allegro より高速だった(on x86)けど、日本ではマイナーかな。
164 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 07:51:23 ] tagged arithmeticって、何?
165 名前:デフォルトの名無しさん [2005/05/31(火) 07:57:43 ] 6月19日-22日に開催されるInternational Lisp Conference 2005のスピーカーリストには、 Richard Gabriel, Sun Labs (Menlo Park, CA) って書いてある。現在も、Sunにいるらしい。 www.international-lisp-conference.org/speakers.html
166 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 13:01:32 ] >>164 32bit wordの下位2ビットをタグとして扱うことができる。
167 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [2005/05/31(火) 18:24:40 ] サイト移転しますた ttp://user.ecc.u-tokyo.ac.jp/~t50473/
168 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [2005/05/31(火) 18:24:55 ] サイト移転しますた ttp://user.ecc.u-tokyo.ac.jp/~t50473/
169 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 18:38:51 ] ・・・確かに「lispは25歳以下のスポーツ」と呼ばれるだけの事があるなw
170 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 20:01:18 ] >>169 それはつらいなあ.私はヘキサでもギリギリだ.
171 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 21:56:57 ] i.loveruby.net/ja/misc/ycombinator.html 上のページの Y-Combinator を,練習を兼ねて Common Lisp に移植してみました. (setf (symbol-function 'Y) #'(lambda (f) ((lambda (proc) (funcall f #'(lambda (arg) (funcall (funcall proc proc) arg)))) #'(lambda (proc) (funcall f #'(lambda (arg) (funcall (funcall proc proc) arg))))))) (setf (symbol-function 'fact0) #'(lambda (f) #'(lambda (n) (if (zerop n) 1 (* n (funcall f (- n 1))))))) (funcall (Y #'fact0) 5) => 120 ...やっぱり大変だ,これ.もっといい書き方はないものでしょうか.
172 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 22:52:36 ] (setf (symbol-function ... はムリムリ感が強いなあ。 (defvar Y (lambda (f) ((lambda (proc) (funcall f (lambda (arg) (funcall (funcall proc proc) arg)))) (lambda (proc) (funcall f (lambda (arg) (funcall (funcall proc proc) arg))))))) (defvar fact0 (lambda (f) (lambda (n) (if (zerop n) 1 (* n (funcall f (- n 1))))))) (funcall (funcall Y fact0) 5) => 120
173 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 23:07:36 ] >>172 なるほど,無理に関数側にセットするより,funcall を使う前提で変数 側にセットした方が,かえって自然ですね. しかし,funcall が林立するのは,どうしようもないのかなあ.
174 名前:デフォルトの名無しさん mailto:sage [2005/05/31(火) 23:13:58 ] evalが林立するよりはイイw
175 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 00:34:04 ] Gauche 0.8.4 キタ━━━━(゚∀゚)━━━━ッ!!
176 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 03:35:54 ] >>159 さしずめ Scheme 屋は三論の学僧で Lisp 屋は禅坊主ってところっすか。 仲が悪くてもしかたないな。 >>173 確かに関数をぐるぐる渡していくとなると面倒ですよね。 CPS とかでちょっと書いてみる位でも結構うんざりしたり。 #`(f ...) -> (funcall f ...) とかなリーダマクロでも書いてみるとか。あんま変わらないか。
177 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 11:10:12 ] 私は Scheme から入ったのだけど,他の Lisp の良さも知りたいなあ. Schemer と Common Lisper は仲が悪いみたいだけど,どちらも Lisp 文化の 主要な担い手なのだから.Scheme の方が短いコードでその優秀性を示しやす いのか,こういう場では Scheme のよさが目立ちがちな気がする.だけど, Common Lisp の優秀性もぜひお教えいただきたいものです. 自分の知っている例だと,かの「グリーンスパンの第10法則」のグリーンスパ ン氏の blog から philip.greenspun.com/bboard/q-and-a-fetch-msg?msg_id=0006XQ 「Common Lisp はロバストで効率的.Scheme ではハイパワーマシンでもこな せなかった処理を,Common Lisp だと非力なマシンでも成し遂げることができ た」 こんな感じで,自分の知っている言語の良さを出し合っていけたらなあ,と思 うのです.Scheme や Common Lisp や,スレ違いだけど Emacs Lisp までも. (Y-Combinator を Emacs Lisp に移植しようとして,動かない原因がしばら くわからなかったのは秘密.気が付いてみたら当たり前.動的スコープだから クロージャにならないのだもの...絶対に無理)
178 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 12:52:55 ] ところで,Common Lisp で,末尾再帰の最適化をやってくれる処理系って,ど んなものがあるでしょうか?xyzzy がバージョンアップしたみたいなので,試 してみたのだけど,やっぱりスタック数40,000 程度でオーバーフロー. (defun tail-rec (x y) (if (<= x 0) y (tail-rec (- x 1) (+ y 1)))) (tail-rec 40000 0) => オーバーフロー Petite Chez Scheme だったら 100,000,000 でも軽々動くのに.こういうのは 再帰にせず,堂々と loop で書くのが Common Lisp 的なのだろうか. (define (tail-rec x y) (if (<= x 0) y (tail-rec (1- x) (1+ y))) (tail-rec 100000000 0) => 100000000
179 名前:デフォルトの名無しさん [2005/06/01(水) 13:04:24 ] >>178 Allegro CLは大丈夫だったよ。
180 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 13:06:37 ] >>178 > ところで,Common Lisp で,末尾再帰の最適化をやってくれる処理系って,ど > んなものがあるでしょうか? インタプリタではほとんどの処理系がやってない。 コンパイラではほとんどの処理系がやっている。
181 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 13:10:37 ] clispもcmuslも大丈夫じゃない? xyzzyのことはわからないけど、一般的にソースの頭に (optimize speed) と書いておくと末尾再帰をループ扱いしてくれるとか。 速度も上がるだろうしメモリも定量で済むはず。
182 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 13:58:05 ] >>178 CLispで試してみた。>>180 氏の言うとおりだった。 [1]> (defun tail-rec (x y) (if (<= x 0) y (tail-rec (- x 1) (+ y 1)))) TAIL-REC [2]> (tail-rec 40000 0) *** - Program stack overflow. RESET [3]> (compile 'tail-rec) TAIL-REC ; NIL ; NIL [4]> (tail-rec 40000 0) 40000 [5]> (tail-rec 10000000 0) 10000000
183 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 14:52:06 ] >>182 ディスアセンブルしてみませう。
184 名前:178 mailto:sage [2005/06/01(水) 17:11:03 ] ありがとうございます.今度 Debian に CLisp でもインストールしてみます. Scheme だと ・まずは普通に再帰で書く ・うまく動くようになったら,末尾再帰にして最適化 という書き方をすることが多いですが, Common Lisp だと加えて ・コンパイル という一連のステップで行けばよいということですね. さて,問題は xyzzy です.(optimize speed)も効かなかったし,残念ながら バイトコンパイルしても最適化されませんでした.どのようにコーディングし たら良いものか.やっぱり loop しかないのかなあ...と,そろそろスレ違い ですが.
185 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 22:49:23 ] >>184 Common Lisp では末尾呼び出しの最適化が保証されてないんだから 特定の処理系に依存させたくないのなら > Common Lisp だと加えて > ・コンパイル ではなく、繰り返しに展開しないと。
186 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 23:22:59 ] >>184 clisp + emacs + slimeでWin上でも結構快適と思うけど。emacsもxyzzyも メモリ消費量は変わらない。 ディスク消費量はemacsの方が多いが。。 なぜかWin上では、clisp 2.33.2ではslimeが動かなかったので、2.33.1にしたら ちゃんと動いた。
187 名前:デフォルトの名無しさん mailto:sage [2005/06/01(水) 23:30:18 ] gauche 0.8.4 cygwin で (- (/ 1 2)) が-0.5にならないよ。 -1/2 (- 0.5) は ok
188 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 00:03:46 ] >>177 Y-Combinatorにはならないのだろうが、 lambdaだけで再帰を書くのなら動的スコープのほうが楽じゃない? (funcall ((lambda (f) (lambda (x) (funcall f x))) (lambda (x) (if (= x 0) 1 (* x (funcall f (- x 1)))))) 5) 120 ところで自由変数使わずに束縛変数だけ使うのなら 動的スコープも静的スコープも一緒じゃないの? ちょっとEmacs LispでY-Combinatorやってみるよ。
189 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 01:00:57 ] >>15 みたいな格好の閉じ方を初めて見たんだけど、手動でスペース開けてるのかな? 読みやすい様な、読みにくい様な... しばらく真似してみよ.
190 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 04:31:42 ] >>184 トランポリンでも仕込んでみるってのはどう?
191 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 04:39:47 ] >>187 俺んとこではなるよ。そっちでは何が返ってるんだ?
192 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 09:12:17 ] >>190 今は「トランポリン」がイディオムの名前だってこと知らない人多いかもよ?
193 名前:デフォルトの名無しさん [2005/06/02(木) 09:23:34 ] トランポリンというと、gccで入れ子関数を作ったときなどにスタックに 生成される小さなコードのことしか思い出さない。イディオムとしての トランポリンてどういうの?
194 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 10:07:13 ] 「なんでも継続」 ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html を参照してちょ
195 名前:178 mailto:sage [2005/06/02(木) 10:46:43 ] >>185 > ではなく、繰り返しに展開しないと。 うう,再帰を繰り返しに展開するのって,面倒くさいし,バグの元になりませ んか?やっぱり,汎用性を目指すなら,初めから繰り返しで書いた方がいいの かなあ.しかし,再帰のほうがきれいで扱いやすいし... Common Lisper の皆 さんは,普段どのようにお書きなんでしょうか? >>188 > ところで自由変数使わずに束縛変数だけ使うのなら > 動的スコープも静的スコープも一緒じゃないの? それはないです.例えば >>172 の fact0 という関数は lambda 式を返すけど, その式の最後の行の f は,fact0 の外に出たら,動的スコープだと何にも束 縛されなくなっちゃうでしょう?(と言うか,実行するとそのエラーがでる) しかし,動的スコープの方が歴史的には古いのだから,もしかしたら動的スコー プのための Y-Combinator が先に存在していたのかもしれません.私が知らな いだけで. >>192 今は「トランポリン」がイディオムの名前だってこと知らない人多いか >もよ? それは私です.Google検索したら見つかったのが「何でも継続」だったので赤 面.身になってないなあ.
196 名前:178 mailto:sage [2005/06/02(木) 11:08:23 ] >>186 > clisp + emacs + slimeでWin上でも結構快適と思うけど。 じつは,いろいろ思うところがありまして,将来的に個人的な環境をなるべく Linux一本に移行したいと思っているのです.ただ,slime は全然知りません でした.大変便利なものをお教えいただき,ありがとうございました. www.geocities.co.jp/SiliconValley-SanJose/7474/LispDevelopEnvironment.html#slime
197 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 12:31:34 ] 漏れはWindowsでもEmacs(Meadow)だなぁ。xyzzyって使ったことないけど良いの?
198 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 14:02:50 ] emacsそのものが使いたいのでなければ、 Windows用のemacs風エディタとしてはかなり素敵。
199 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 14:12:00 ] Emacs を使う理由の半分以上は本物の Emacs だから、なんだよね。 豊富なライブラリがあるから離れられず、ダイナミックスコープ氏ねと 思いながら Emacs Lisp パッケージのメンテナンスをして、それが... のスパイラル。
200 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 14:31:06 ] 使ってみよかと思うが公式Webページは無いのか?>xyzzy
201 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 14:38:09 ] ttp://www.jsdlab.co.jp/~kamei/ ttp://xyzzy.s53.xrea.com/wiki/
202 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 18:22:12 ] xyzzy は,とんでもなく非力なマシンでもそこそこ動いてくれるのがいい.
203 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 18:45:53 ] とことん非力って486でHDが100MBくらいのマシンのこと? 10年前のスペックだな。
204 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 20:16:41 ] さすがにそれはきびしいだろうけど、Windows98 が何とか動く程度のマシンなら、 普通に使えてる。確か Pentium の メモリ32メガ。
205 名前:187 mailto:sage [2005/06/02(木) 23:28:18 ] >>191 0.5 が返ります。 ちなみに WINXP HOME SP2 で gcc 3.3.3 。mingw版も駄目 Athron 650 (print (- (/ 1 2))) => 0.5 (print (- (- 1 2)))=> -1 (print (- (+ 1 2)))=> 3 (print (- (* 1 2)))=> 2 (print (- (expt 2 2)))=> -4 (print (- (- 1)))=> -1 (print (- (- (- 1))))=> -1 (print (- (+ (- 1))))=> -1 (print (- (and 1 1)))=> -1 (print (- (or 1 1)))=> -1 (print (/ (/ 1 2)))=> 2.0 (print (/ (- 1 2)))=> -1.0 (print (/ (+ 1 2)))=> 0.3333333333333333 (print (/ (* 1 2)))=> 0.5 (print (/ (- 1)))=> -1.0 (print (/ (- (- 1))))=> -1.0 (print (/ (+ (- 1))))=> -1.0
206 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 23:55:40 ] そこまで分かってるならふつーにバグ報告すればいいじゃない ここに書く意図が分からない
207 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 00:34:01 ] バグ報告したことないし。
208 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 00:51:46 ] ソース確認して直せば即終了やん
209 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 13:02:21 ] xyzzy の話を引っ張るんですけど,確かに軽くていいエディタだと思います. 私も便利に使わせていただいてます.だけど,Common Lisp インタプリタとし ては,ちょっと遅いのではないでしょうか? ;;;竹内関数 aka たらいまわしべんち (or 'Common 'Emacs) Lisp (defun tarai (x y z) (if (<= x y) y (tarai (tarai (1- x) y z) (tarai (1- y) z x) (tarai (1- z) x y)))) (tarai 12 6 0) => 12 これの実行に65秒かかりました.バイトコンパイルしても30秒. (Celeron 2.6GHz, 756MB RAM) Petite Chez Scheme なら1秒前後で終わるのですが.
210 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 13:15:29 ] tarai懐かしいな。 久しぶりに回してみた。((tarai 12 6 0) @ Athlon FX-55) clisp インタプリタ 12秒 clisp コンパイラ 1.7秒 gcl インタプリタ 12秒 gcl コンパイラ 1.4秒 プチチーズ優秀だね。
211 名前:209 mailto:sage [2005/06/03(金) 13:46:23 ] なるほど,xyzzy Lisp が速いとは言えないけれど,比べた Petite Chez Scheme が速すぎるから,びっくりするような相対値になったのですね. Gauche とかだとどうなんだろう. Emacs Lisp でも試してみようと思ったけれど,エラーになって動かない. (error "Lisp nesting exceeds max-lisp-eval-depth") Emacs はなかなかよく分かりません. あと,野暮かも知れませんが,一応, Chez Scheme => しぇすきーむ Petite Chez Scheme => ぷてぃとしぇすきーむ Paul Graham => ぽーるぐれあむ が原音に近いのではないかと.
212 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 14:22:05 ] clisp 2.33.2: インタプリタ 15秒、コンパイラ 2.6秒 Emacs 21.3: インタプリタ 10.4秒、コンパイラ 4.7秒 Gauche 0.8.4: 3.3秒 SBCL 0.9.1: 0.4秒 (tarai 12 6 0) @ Pentium 4 2.4GHz > (error "Lisp nesting exceeds max-lisp-eval-depth") 再帰の深さが変数 max-lisp-eval-depth を超えたってことなんで増やせばいい
213 名前:210 mailto:sage [2005/06/03(金) 15:28:20 ] defunの行とifの行の間に (declare (fixnum x y z)) を入れると gcl のコンパイラのみ 1.4秒→1.2秒になったがその他は変化無し。思ったほど効かないな。
214 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 16:18:46 ] >>212 cmuclの結果も知りたい。
215 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 16:38:47 ] lisp-worksでやってみた。 インタプリタだと66秒、コンパイルすると1秒以下になった。
216 名前:212 mailto:sage [2005/06/03(金) 17:03:28 ] >>214 CMUCL 19a: インタプリタ: 92秒 コンパイラ: 0.55秒 コンパイラ (declare (type fixnum x y z)): 0.23秒 コンパイラ (declare (optimize speed)): 0.53秒 コンパイラ (declare (optimize speed) (type fixnum x y z)): 0.23秒 SBCL 0.9.1: コンパイラ: 0.42秒 コンパイラ (declare (type fixnum x y z)): 0.31秒 コンパイラ (declare (optimize speed)): 0.38秒 コンパイラ (declare (optimize speed) (type fixnum x y z)): 0.21秒
217 名前:209 mailto:sage [2005/06/03(金) 20:23:37 ] いろいろな方にベンチを実行していただき,ありがとうございます.大変参考 になりました. ところで,おまけとして,ラムダ式による遅延評価版を書いてみました. (参考)www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Scheme%3a%a4%bf%a4%e9%a4%a4%a4%de%a4%ef%a4%b7%a4%d9%a4%f3%a4%c1 ;;;竹内関数 aka たらいまわしべんち (or 'Common 'Emacs) Lisp ;;;遅延評価版 (defun tarai (x y z) (if (<= (funcall x) (funcall y)) (funcall y) (tarai (lambda () (tarai (lambda () (- (funcall x) 1)) y z)) (lambda () (tarai (lambda () (- (funcall y) 1)) z x)) (lambda () (tarai (lambda () (- (funcall z) 1)) x y))))) こちらだと,引数が12 だとあっという間に終わってしまいますので,数字を 変えました. (tarai (lambda () 192) (lambda () 96) (lambda () 0)) => 192 先ほどの条件で,xyzzy だと13秒程度でした.いささか極端な例とは言え,遅 延評価のありがたみを痛感します.
218 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 08:23:03 ] (defun tarai (x y z) (let ((xx (funcall x)) (yy (funcall y))) (if (<= xx yy) yy (let ((x (lambda () xx)) (y (lambda () yy))) (tarai (lambda () (tarai (lambda () (- xx 1)) y z)) (lambda () (tarai (lambda () (- yy 1)) z x)) (lambda () (tarai (lambda () (- (funcall z) 1)) x y)))))))
219 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 13:02:22 ] xとyを遅延させる意味が無いように見えるんだが と、LISPをまるで知らない俺が適当に言ってみる
220 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 13:31:58 ] 無いね。z だけ遅延させるならこんな感じ? (defun tarai (x y z) (labels ((tarai-1 (x y fz) (if (<= x y) y (let ((z (funcall fz))) (tarai-1 (tarai-1 (1- x) y (lambda () z)) (tarai-1 (1- y) z (lambda () x)) (lambda () (tarai-1 (1- z) x (lambda () y)))))))) (tarai-1 x y (lambda () z))))
221 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 22:14:55 ] >>219 >>220 そんじゃ209が早くなったと言っているのは勘違いなの?
222 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 22:23:48 ] >>221 >>217 の参考リンクの一番したみてみそ。Zだけの遅延評価のページが紹介されている罠
223 名前:デフォルトの名無しさん [2005/06/05(日) 17:29:43 ] 流れ断ち切って悪いけど DrSchemeって何て読むの? ドクタースキームでいいの?
224 名前:デフォルトの名無しさん [2005/06/05(日) 17:34:22 ] ドラスケ
225 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 18:09:09 ] >>224 採用。
226 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 23:21:23 ] スキーム博士
227 名前:デフォルトの名無しさん [2005/06/05(日) 23:45:14 ] Note that they are listed as procedures, but implemented as syntax, so it is possible to use a name where the syntactical context implies one (they can also be used as values, but error messages will not have a meaningful name in this case). これどういう意味か分かりますか? どなたか解説をお願いします。
228 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 01:08:09 ] のっけからtheyとか代名詞が出てくるんだから、どういう文脈の文章かを 説明しろよな。まあ内容から何の話か見当つくけどさ。
229 名前:?デフォルトの名無しさん mailto:sage [2005/06/06(月) 11:00:03 ] ぬるい実装の話みたいだが...どの処理系だ?
230 名前:デフォルトの名無しさん [2005/06/06(月) 17:33:33 ] >>290-210 Cだと78msec(Pentium4,2.25GHz)でした。 やはりLISPは遅いようですね。 int tarai(int x,int y,int z) { if(x<=y) return y; else return tarai(tarai(x-1,y,z),tarai(y-1,z,x),tarai(z-1,x,y)); }
231 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 19:53:32 ] とりあえず空気嫁、と。 空気をどうしても読めなかったら、 悲惨な喪毎の頭のベンチマークでも並べとけと。
232 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 20:47:44 ] >>230 >>220 なら sbcl on Pentium 4 2.4GHz で 7μsecだよ。 がんばって遅延評価実装してみ。
233 名前:227 mailto:sage [2005/06/06(月) 20:57:01 ] >>228 ごめん、もう分かった。 >>229 MzScheme です。
234 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 21:29:03 ] >>227 R5RS関連だろうと思ってたら、やっぱコレか。 PLT Foreign Interface Manual PLT <scheme@plt-scheme.org> 299.100Released March 2005 download.plt-scheme.org/doc/299.100/pdf/foreign.pdf 2. Foreign Interface This is a description of the foreign interface. The interface has some parts implemented in C (plt/src/foreign/foreign.c) which is available as a built-in #%foreign module. This module is not intended for general use as is, and further documentation can be found in the source. The relevant functionality is provided via the foreign module in MzLib (foreign.ss). 2.2 Simple Types 2.2.4 Type Constructors Since types are first-class values, there are several type constructors that build type objects. These are just the simple ones, more constructors are described below. Note that they are listed as procedures, but implemented as syntax, so it is possible to use a name where the syntactical context implies one (they can also be used as values, but error messages will not have a meaningful name in this case).
235 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 21:49:17 ] >>233 お願いだから次からはもうちょっと質問の仕方も上達してくれよ
236 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 23:21:44 ] class tarai { int x, y; const tarai* tp; public: tarai(int y) : x(0), y(y), tp(0) {} tarai(int x, int y, const tarai& t) : x(x), y(y), tp(&t) {} int operator()() const { if (x <= y) return y; int z = (*tp)(); return tarai(tarai(x-1,y,*tp)(),tarai(y-1,z,tarai(x))(),tarai(z-1,x,y))(); } }; LISPをまるで知らない俺が五分で作ったC++遅延評価版 tarai(192, 96, tarai(0))()で、0.01秒くらい?
237 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 23:53:03 ] tarai(192, 96, 0)と使えるように直した class tarai { int x, y; const tarai* tp; public: tarai(int y) : x(0), y(y), tp(0) {} tarai(int x, int y, const tarai& t) : x(x), y(y), tp(&t) {} operator int() const { if (x <= y) return y; int z = *tp; return tarai(tarai(x-1,y,*tp),tarai(y-1,z,x),tarai(z-1,x,y)); } };
238 名前:209 mailto:sage [2005/06/07(火) 08:18:39 ] 209 です.ろくにレスもしなくてすみませんでした.>>209-237 の流れを,大 変興味深く読ませていただきました.正直,>>236-237 はすばらしいと思いま す. >>232 のレスを見て,自分もC で遅延評価を実装しようと考えて,かなり汚い コードしか思いつかず,ああクロージャ(関数閉包)って本当に便利なんだな, と思った矢先に>>236-237 が書き込まれました.自分は C++ はよく知らない のですが,とてもすっきり書けているように見えます. 日本の Lisp の巨人というと,竹内郁雄先生(たらいまわしべんちの生みの親) と萩谷昌己先生がまず挙げられると思います.竹内先生は「Lispは確かに遅い が,言語としての生産性は格段に高い.トータルのコストはLispの方がずっと 小さい」という考えであり,萩谷先生は「Lisp はあくまでプロトタイプのた めのもので,本物のプログラムは C で書かなければならない」という考えだ と聞いております. Lispというのはとにかく書きやすい言語ですから,解くべき問題の複雑さによっ て,どちらが正しいかは変わるのだと思うのですが,竹内関数(たらいまわし べんち)に関しては,現時点では萩谷教授が正しいということになるようです. この逆説めいた結末に,私は興奮すら覚えました.
239 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 08:20:50 ] Bill Clementson's Blog が復活したみたい ttp://bc.tech.coop/blog/ 何時もこっちを見てるけど planet.lisp.org/
240 名前:209 mailto:sage [2005/06/07(火) 08:59:31 ] 今回の流れを見て,もう1つ思い出したのがこの言葉です. 「10年前ならLispは大きなアドバンテージを持っていたけれど、現在は他の言 語が追い付いて来てLispのメリットは小さくなっている。」Peter Norvig 今回のC++のエレガント(と私には見える)な回答を見て,確かにいくつかの 洗練は,Lispの占有物ではなくなったのだ,と感じた方もおられるのではない でしょうか. しかし,聞きかじりで書くのですが,C++にはテンプレートを多用した新しい スタイルが登場しつつあるそうです.それは Lisp や関数型言語から大きな影 響を受けているそうです.つまり,Lisp は2005年の現時点でも,豊かなアイ ディアの源泉でありつづけているのではないでしょうか.もちろん(不幸にも) Lispの進歩が停滞して,その差が縮まりつつあるのかも知れませんが. ところで,Lisp 側は最速のものがまだ出ていません.Allegro Common Lisp (ACL) と Chez Scheme コンパイラの,二つの商用ソフトです.これらなら, C++とも結構いい勝負をするかもしれません. それにしても,最初にたらいまわしべんちを書き込んだ時にはまったく予想し なかった展開になりました.大変勉強になりました.ありがとうございました.
241 名前:209 mailto:sage [2005/06/07(火) 09:01:28 ] 参考リンク(うざいので最後にまとめました) 竹内郁雄『初めての人のためのLISP』 www.amazon.co.jp/exec/obidos/ASIN/4781904548 萩谷昌巳「たかが論理 されど論理」 nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/7bits/saredo Lisp:読み物 www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Lisp%3a%c6%c9%a4%df%ca\ %aa Modern C++ Design www.amazon.co.jp/exec/obidos/ASIN/4894714353 The Great Computer Language Shootout web.archive.org/web/20030602185735/www.bagley.org/~doug/shootout/craps.s\ html
242 名前:209 mailto:sage [2005/06/07(火) 09:09:16 ] リンク貼り失敗.本当にウザくてごめんなさい. 竹内郁雄『初めての人のためのLISP』 www.amazon.co.jp/exec/obidos/ASIN/4781904548 萩谷昌巳「たかが論理 されど論理」 nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/7bits/saredo Lisp:読み物 www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Lisp%3a%c6%c9%a4%df%ca%aa Modern C++ Design www.amazon.co.jp/exec/obidos/ASIN/4894714353 The Great Computer Language Shootout web.archive.org/web/20030602185735/www.bagley.org/~doug/shootout/craps.shtml
243 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 10:39:40 ] C++のテンプレートは、色々やろうとすると制限が多すぎてちょっと嫌になる
244 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 11:21:50 ] >>243 boost の lambda なんかを見ると、一見 Lisp チックなんだけど、正確な挙動を 理解するのはなかなか大変。C++ って複雑な言語だなと思う。 そのくせ、制限が多いというのには同意。 Common Lisp なんかも「大きな言語」と言われるけど、C++ に比べれば子供 みたいなもんだなと思うよ。(もちろん良い意味でね)
245 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 11:58:44 ] >>240 過剰なお褒め、恐縮です。というか、気恥ずかしいです でも、自分でも思った以上にエレガントだなと、思っていたり ちなみに、Cでもやってみました CでやるなんてlazyというよりCrazyかとおもったけど 書いてみたら、非常に簡単でした struct tarai { int x, y; const struct tarai* tp; }; int tarai_sub(int x, int y, const struct tarai* tp) { if (x > y) { int z = tarai_sub(tp->x, tp->y, tp->tp); struct tarai t[3] = { { z, z, 0 }, { x, x, 0 }, { y, y, 0 } }; struct tarai tz = { z-1, x, t+2 }; return tarai_sub(tarai_sub(x-1,y,t), tarai_sub(y-1,z,t+1), &tz); } return y; } int tarai(int x, int y, int z) { struct tarai tz = { z, z, 0 }; return tarai_sub(x, y, &tz); } C++よりも、速いっぽい
246 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 11:59:15 ] C++版もちょっと手直し int tarai(int x, int y, int z) { class Tarai { int x, y; const Tarai* tp; public: Tarai(int y) : x(y), y(y), tp(0) {} Tarai(int x, int y, const Tarai& t) : x(x), y(y), tp(&t) {} operator int() const { if (x <= y) return y; int z = *tp; return Tarai(Tarai(x-1,y,z), Tarai(y-1,z,x), Tarai(z-1,x,y)); } }; return Tarai(x,y,z); } このコードなら、人に見せても恥ずかしくないかな
247 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 12:13:50 ] >>245 struct tarai に tp 入れる必要なくない? typedef struct { int x, y, z; } tarai_t; int tarai(int, int, int); int tarai_1(int x, int y, tarai_t *tp) { if (x <= y) return y; int z = tarai(tp->x, tp->y, tp->z); return tarai_1(tarai(x - 1, y, z), tarai(y - 1, z, x), &(tarai_t){ z - 1, x, y }); } int tarai(int x, int y, int z) { if (x <= y) return y; return tarai_1(tarai(x - 1, y, z), tarai(y - 1, z, x), &(tarai_t){ z - 1, x, y }); }
248 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 15:18:08 ] 個人的には興味深い話題ではあるのだけど、延々とC++の話が続くのはさすがに スレ違いだと思う。もうちょっとLisp絡みの話へ軌道修正してほしい。
249 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 17:54:02 ] もうちょっとだけ、Cで 245を書いて、247を読んで、ちょっと考えてやっと気づいたんですけど この問題の本質って、実はめちゃめちゃ簡単ですね LISPのコードで書かれてる段階では全く気づかなかったんですけど Cで書いて、読んでみたら、やっと気づきました 必要になるかどうか分からない関数値は、 事前に計算しないで引数のまま渡す タダそれだけですね int tarai(int x, int y, int z); int tarai_sub(int x, int y, int z_x, int z_y, int z_z) { if (x > y) { int z = tarai(z_x, z_y, z_z); return tarai_sub(tarai(x-1,y,z), tarai(y-1,z,x), z-1, x, y); } return y; } int tarai(int x, int y, int z) { return tarai_sub(x, y, z, z, 0); } このコードなら、Cに疎いLISPerの方々でも余裕で理解できるでしょう なんかこう、高度なというか表現力や抽象化能力の高い道具が 問題の本質を逆に隠してしまっていたような、そんな気がします
250 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 18:03:57 ] …………………… 頭悪いのが粘着してるの放置 ……………………
251 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 18:07:32 ] 確かに。tarai関数の主旨もわからず、Lazy Evaluationの例>>220 の30スレも後になって そんな事言い出すとは、かなり逝かれてるな。 なんつうか、人の話聞いた後「ところで話題変わるんだけど・・・」とか言って同じ話しだすドキュソを思い出した。
252 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 18:12:14 ] >>241-242 もかなりイタタ。 こんなの(理系全般板の悪名高い荒らし)にURL覚えられちゃった はぎゃ先生も災難だな
253 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 18:27:00 ] >>249 > なんかこう、高度なというか表現力や抽象化能力の高い道具が > 問題の本質を逆に隠してしまっていたような、そんな気がします そんなことないよ。>>220 の labels を分解して (defun tarai (x y z) (labels ((tarai-1 (x y fz) (if (<= x y) y (tarai-2 x y (funcall fz)))) (tarai-2 (x y z) (if (<= x y) y (tarai-1 (tarai-2 (1- x) y z) (tarai-2 (1- y) z x) (lambda () (tarai-2 (1- z) x y)))))) (tarai-2 x y z))) tarai-1 をインライン展開して (defun tarai (x y z) (labels ((tarai-2 (x y z) (if (<= x y) y (let ((xx (tarai-2 (1- x) y z)) (yy (tarai-2 (1- y) z x))) (if (<= xx yy) yy (tarai-2 xx yy (funcall (lambda () (tarai-2 (1- z) x y))))))))) (tarai-2 x y z)))
254 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 18:27:54 ] まとめると (defun tarai (x y z) (if (<= x y) y (let ((xx (tarai (1- x) y z)) (yy (tarai (1- y) z x))) (if (<= xx yy) yy (tarai xx yy (tarai (1- z) x y)))))) それを C にすると int tarai(int x, int y, int z) { for (;;) { if (x <= y) return y; int xx = tarai(x - 1, y, z), yy = tarai(y - 1, z, x); if (xx <= yy) return yy; z = tarai(z - 1, x, y); x = xx; y = yy; } } こうなるんだけど、>>249 よりシンプルだし速度も倍。
255 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 18:31:21 ] …………………… 頭悪いのが自作自演始めたので放置 ……………………
256 名前:209 mailto:sage [2005/06/07(火) 21:45:06 ] 勝手ながら,flatline 氏の Wiliki を借りました. www.komaba.utmc.or.jp/~flatline/wiliki.cgi?%bb%a8%c3%cc&l=jp このスレでは,ちょっとこれ以上の話は皆さんにご迷惑のようです. しかし,できるならもう少し続けたい気持ちが私にはあります. いっしょにこちらに移動していただけませんか?>> C++ の人
257 名前:209 mailto:sage [2005/06/07(火) 21:48:32 ] 補足.Wilikiのリファレンスです(私も不慣れなのですが). www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?WiLiKi%3a%a5%ea%a5%d5%a5%a1%a5%ec%a5%f3%a5%b9%a5%de%a5%cb%a5%e5%a5%a2%a5%eb ということで,大変ご迷惑をおかけしました.申し訳ありません.>>ALL
258 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 22:38:25 ] 今度はwiki荒らしか
259 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 22:57:12 ] >>253-254 どうもすみません。勉強になりました 勉強ついでに、249のCコードをそのままLISPにしてみました (defun tarai (x y z) (labels ((tarai-1 (x y zx zy zz) (if (<= x y) y (let ((z (tarai zx zy zz))) (tarai-1 tarai((1- x) y z) tarai((1- y) z x) (1- z) x y))))) (tarai-1 x y z z 0))) そこで、let式を関数呼び出しに変えて (defun tarai (x y z) (labels ((tarai-1 (x y zx zy zz) (if (<= x y) y (tarai-2 (x y (tarai zx zy zz))))) (tarai-2 (x y z) (tarai-1 tarai((1- x) y z) tarai((1- y) z x) (1- z) x y))) (tarai-1 x y z z 0))) さらに、tarai-1呼び出しをlet式に変えてみました (defun tarai (x y z) (labels ((tarai-2 (x y z) (let ((xx (tarai((1- x) y z)) (yy (tarai((1- y) z x))) (if (<= xx yy) yy (tarai-2 (xx yy (tarai (1- z) x y))))))))) (if (<= x y) y (tarai-2 x y z))))
260 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 22:57:25 ] これをそのままCにすると、こうで int tarai_sub(int x, int y, int z); int tarai(int x, int y, int z) { if (x <= y) return y; return tarai_sub(x, y, z); } int tarai_sub(int x, int y, int z) { for (;;) { int xx = tarai(x-1,y,z), yy = tarai(y-1,z,x); if (xx <= yy) return yy; z = tarai(z-1,x,y); y = yy; x = xx; } } 最初のifがループの外に出せて、なんか倍くらい速くなります。 それともこれ、何か間違ってますか?
261 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 23:33:28 ] フリーのCommon Lisp処理系で、threadをサポートしているのって有ります? SchemeはDrSchemeがサポートしているけど。。
262 名前:デフォルトの名無しさん mailto:sage [2005/06/08(水) 00:16:13 ] >>261 つ www.sbcl.org/manual/Threading.html
263 名前:デフォルトの名無しさん mailto:sage [2005/06/08(水) 03:59:01 ] >>239 おお、待ち焦がれてたよ BIll さん。 blog 関連のリンクはテンプレに入れるとしたら Planet Lisp のがいいかもね。 さておき、記念に前に出たトランポリン関連のネタを引っ張っておく。 ttp://bc.tech.coop/blog/040613.html リストに詰めて apply、ってやり方だから大量のゴミを作るだろうあたりが気になるけど。 相互末尾再帰でもかかわってくる関数それぞれが取る引数の数は大抵の場合は同じだろうから、 そこを固定したコードを吐くマクロを書いた方が実用上は好ましいかな。
264 名前:デフォルトの名無しさん mailto:sage [2005/06/08(水) 07:46:38 ] >>261 ECL もオケ DrScheme のスレッドは所謂 Green Thread でしょ。 Native Thread じゃなくていいなら CMUCL にもある。
265 名前:デフォルトの名無しさん mailto:sage [2005/06/08(水) 08:01:30 ] 連投スマソ >>261 PowerPC 使いなら OpenMCL も Native Thread 使える Intel Mac の登場で x86 にポーティングされないかな… 作業大変だろうけどね
266 名前:デフォルトの名無しさん mailto:sage [2005/06/08(水) 12:31:04 ] .coopなんてTLDできてたのか……。.bizとか.infoと同時に作られたのだな。
267 名前:デフォルトの名無しさん [2005/06/08(水) 20:54:46 ] すいません スレ間違えたっぽいので誰か知ってたら答えてください pc8.2ch.net/test/read.cgi/tech/1115335709/380 エラー検出とかのためにリストがどの行のものか保存する LISP処理系ってありますか?
268 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 06:50:31 ] Shiro Kawaiの演技にカツモクせよ [ドラマ] 恋におちたら 〜僕の成功の秘密〜 第01話 「ずっと探してた人」 (D-KTV 1024x576 DivX511).avi aaLPbRVQ8B 1,089,947,648 56df0ca851a66ec551b59c6a54db9978
269 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 08:05:03 ] 一瞬、誤爆かとおもた(w
270 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 16:28:51 ] >>268 こらこらこら
271 名前:デフォルトの名無しさん mailto:sage [2005/06/10(金) 05:07:09 ] 一瞬、ny導入しようとした俺guile
272 名前:ミミ [2005/06/11(土) 07:54:40 ] Scheme 関係の文書に arity ってよく出てくるけど、うまい訳語ある?
273 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 09:24:39 ] 一応、『項数』ってのがあるけど、使わない方が無難だと思う。 直感的じゃないし、初学者には意味不明な単語が増えるだけ。 『引数の数』じゃダメな理由でもあるの?
274 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 09:24:54 ] ttp://en.wikipedia.org/wiki/Arity 読んでみたけど、 カジュアルには「引数の数」かな。 もう少し丁寧に「手続き(関数)が受け取り可能な引数の数」とか。 精確に行くなら「アリティ」で。
275 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 09:38:15 ] ちなみに中国語では元数と書くみたいだね 引数はそのまま引数みたい
276 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 10:25:32 ] 有体
277 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 10:40:51 ] 可変個の引数も扱うわけだから 引数として受け付ける個数の範囲かな
278 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 10:41:05 ] algorithmに語源はあるけど、 arityに語源はないの?
279 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 11:48:59 ] unary, binary の ...ary ----> arity
280 名前:ミミ mailto:sage [2005/06/11(土) 14:34:38 ] ありがとうございます。 やはり「引数の数」が一番分かりやすそうですね。 でも用語に「の」が入ると、「の」が沢山でてきて 読みにくい文章になったりするんですよね。 そういう意味では「アリティ」のほうがましかも。
281 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 16:02:01 ] >>280 > そういう意味では「アリティ」のほうがましかも。 それはない。
282 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 17:52:52 ] アリティ(引数の個数)... として、以降アリティで良いんじゃないかな
283 名前:ミミ mailto:sage [2005/06/11(土) 18:15:03 ] ちなみに、「引数の数」と「引数の個数」では、 後者ののほうが分かりやすいと思うんだけど、 「個数」って訳する人、意外と少ないんだよねぇ。
284 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 18:18:41 ] アニキィ
285 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 18:26:10 ] ありていにいって>>281 に同意。
286 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 18:35:56 ] >>285 全米が凍った
287 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 20:54:02 ] 確かにGaucheのマニュアルで説明無しにarityという 用語が出てきて困ったな〜。
288 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 21:25:31 ] めんどいからもう引数数でいいんじゃね
289 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 21:26:57 ] アミティ
290 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 21:27:48 ] arityという単語を覚えて貰うためにも、ちゃんと説明した上で「アリティ」で良いと思う。 どうせいつかは英文のマニュアルとか読む機会もあるだろうからね。
291 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 22:15:51 ] だったら変なカタカナにするよりarityのままの方がいいような
292 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 22:39:14 ] それは翻訳としては不完全。 商用レベル文書の品質としては失格。
293 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 22:46:35 ] そんな業界基準があるなら正してもらう必要があるな。 間違っている。
294 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 22:56:50 ] そろそろ誰かコードを… コードをくれ
295 名前:デフォルトの名無しさん mailto:sage [2005/06/11(土) 23:05:08 ] 商用レベルの邦訳って変な拘りがあるんですね。 それで分かり難い訳本が多いんですね。 納得しますた。
296 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 00:15:55 ] まともな翻訳には日本語で表現できる概念を増やすという役割もあるから。
297 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 00:22:08 ] . o O (理想が高過ぎると返って悪い結果を生む良い例だな...)
298 名前:通りすがり mailto:sage [2005/06/12(日) 00:29:43 ] いやだから、人類の知性の向上に役立ってない屑は関係ないって。 屑はいつもみたくν速で一日中遊んでりゃいいやん
299 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 00:38:36 ] 元数は納得できる訳語だな。 方程式でも変数がxだけなら1元、xとyなら2元というのを そのまま函数にも適用したという感じだ。 (方程式の変数の数を元数というのは日本でも普通) 今辞書を引いて初めて知ったんだが、函数というのは中国由来で functionのfunと同音の字を当てたらしい。関数は日本で更に同音の字を 当てて書き換えたものとか。 googleで関数(簡体字で)を検索すると世界で4件しか引っ掛からん。
300 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 00:56:59 ] 四元数とかの元数か。悪くないね。 ただ、やっぱり使う前に説明が必要だね。
301 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 01:10:03 ] ここ数ヶ月、随分レベルの低い話題ばっかだな。
302 名前:3歳児 mailto:sage [2005/06/12(日) 01:11:00 ] レベルが低いのは、ここ数ヶ月ではなく ここ数日のまちがいだとおもいます。
303 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 01:20:17 ] >>302 3歳は もう寝ろYO!
304 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 01:21:48 ] 最高につまんねぇレスだな。
305 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 01:27:16 ] 自演コテが湧くよりゃマシだ
306 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 02:17:46 ] Joswig タンの Concordia デモムービー見たんだが、あれが本物の CLIM かぁ 今見ると、やっぱりちょっと古くさいね…
307 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 13:23:58 ] えぇぇ〜CLIM(Common Lisp Interface Manager)? Symbolics みたいなタイルウィンドウシステムでしょ。 一度触ってみたいなぁ。 Macintosh CommonLispのdigitoolには Mac用バイナリがまだ置いてあるみたいだけど
308 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 20:45:30 ] >>301 君のいうレベルの高い内容を提示してくれよ。
309 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 21:24:01 ] (gc)
310 名前:デフォルトの名無しさん [2005/06/12(日) 21:29:58 ] OS ネイティブのスレッドを扱える Lisp/Scheme 処理系はありますか?
311 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 22:14:02 ] >>310 >>262
312 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 22:27:55 ] 誰かILC2005行く香具師いる?
313 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 02:08:41 ] Commonclipseかと思った。 www.eclipsewiki.net/eclipse/?Commonclipse
314 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 04:05:46 ] >>310 scheme なら gauche と KSM も Lisp/Scheme 以外でもフリーの処理系でネイティブスレッドを サポートしている物は非常に少ない 知ってるのは OCaml, GHC, Perl, Python, Erlang くらいかな SML 系は全滅っぽいね
315 名前:デフォルトの名無しさん [2005/06/13(月) 11:31:38 ] >>314 > サポートしている物は非常に少ない なぜ少ないのでしょうか?
316 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 11:55:13 ] >>315 面倒なんだろ。
317 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 12:02:55 ] >>315 おこちゃまだから。。
318 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 12:07:21 ] 頭の悪いレスだ
319 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 12:52:33 ] >>318 おまえがな。
320 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 13:04:14 ] 必死だな
321 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 13:12:15 ] >>320 See: 319
322 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 13:18:21 ] × おまえがな ○ おまえモナー
323 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 13:37:46 ] >>322 See: 320
324 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 14:02:20 ] ・・・・・・ここからはLispに関係ないレスは禁止・・・・・・
325 名前:デフォルトの名無しさん [2005/06/13(月) 20:38:12 ] 後藤英一先生のご冥福をお祈りします。
326 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 20:49:40 ] IPSJ コンピュータ博物館 後藤英一 - 日本のコンピュータパイオニア www.ipsj.or.jp/museum/pioneer/gotou.html
327 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 20:57:40 ] この人か。HLISP 作った人なんだね。 www.ipsj.or.jp/katsudou/museum/pioneer/gotou.html www.mainichi-msn.co.jp/shakai/fu/news/20050614k0000m060060000c.html ttp://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/essay/omoide >>315 理由はここら辺じゃないかな 1. 実装が面倒 2. 1CPU のマシンではネイティブスレッドのメリットが見えにくい 3. Linux のスレッドがイケてなかった 1 は GC 絡みとかなのかな 2 は最近の CPU のデュアルコア化でちょっとはメリットが出てくるかも 3 は 2.6 以降問題なくなった(らしい)
328 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 21:01:10 ] スマソ。リロードしてなくて被った。 Lisp Machine ってスレッドとか LWP みたいな概念はあったのでしょうか?
329 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 21:04:33 ] GUI作ったりメリットは沢山あるよ。 やっぱ面倒なんじゃないかね。 作るとしたら、GCやコンストラクタは排他制御して、 オブジェクトの更新毎にWriteバリアかね。 やっぱGC周り面倒だなあ。 適当に作ったらすぐ破綻しそう。
330 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 21:54:17 ] JavaのGCなんかを見るとネイティブスレッディング自体はそれほど性能的な ハンデにはならないのかなという気もする。面倒なのは同意だけど。w
331 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 22:03:28 ] >>325 まじか。 中西(正和)先生も少し前に亡くなったが、今度は後藤先生か。
332 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 10:56:27 ] このスレでもおなじみの新山ゆうすけ氏が、Common Lisp の仕事を始めたらしい。 tabesugi.net/memo/2005/62.html#111413 > しかし相手はそこそこ有名なLisp ハッカーであり、習うべきことは多い。 > Lisp で仕事できる機会なんてそんなにないと思う。 などと書いている。今まで Lisp の悪口ばかり書いていたのになあ。 と思ったら、今日はさっそく Lisp の悪口であった。 tabesugi.net/memo/2005/62.html#131404 やっぱり新山氏はそう来なくっちゃ!
333 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 12:56:36 ] >>332 なんか有名な人なの? 嫌いな言語使って仕事してるっていう愚痴のようにしか読めんが。
334 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 14:50:02 ] >>333 NY市立大の院生で、Python や Scheme、OpenSSH の世界ではそこそこ有名な人。 www.unixuser.org/~euske/doc/index.html Shiro さんが wiliki で取り上げたこともある。 www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Shiro%3alog%3a2004%b8%e5%c8%be
335 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 15:01:18 ] >>334 何言ってんの? この人ぜんぜん有名じゃないよ。
336 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 18:25:51 ] 有名かどうかは人それぞれが判断すればいいこと。それより、内容についての 話をしようよ。 Common Lisp のライブラリが、過去互換性のために見通しが利きにくいこと、 package は実用上不可欠なのに、Scheme にはまだ標準がなく、実装依存だと いうこと、これらはもっともな批判だと思うのだけど。
337 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 19:06:44 ] ごく一部の日本人で英語が読めない奴限定で有名かも知れんが >>334 > Python や Scheme、OpenSSH の世界ではそこそこ有名 なんていうような仕事はしとらん。 まあ言ってみればプチ岩谷宏。
338 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 19:08:14 ] LispはJavaにMLはC#に昇華しましたので、そのようなことを考えること自体無駄です。
339 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 19:36:34 ] >>336 > Common Lisp のライブラリが、過去互換性のために見通しが利きにくいこと、 確かにそういう面は否定できないが、正直言って慣れてしまったね。 それを言うなら例えば C のライブラリとか UNIX のシステムコールにしたって 「過去互換性のために見通しが利きにくい」と思うし。 誰かが整然とした New Common Lisp を設計したとしても、それを布教するのは 大変だろうなぁ・・・
340 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:04:52 ] Scheme はそういう整然とした Lisp の標準を作ろうとしているわけだが、議 論百出で、いつまでたっても Common Lisp 並のライブラリがそろわない件に ついて。
341 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:12:26 ] 今のペースだと、 あと50年は掛かるな
342 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:25:24 ] C や UNIX の設計のまずいところを一気に作り直そうとした Plan9(Inferno) も、いつまでたっても実験段階から離陸しないものね。 コンピュータ技術、ひいては技術一般に、いかに市場とのタイミングというも のが重要か、分かるように思う。
343 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:41:53 ] 「技術」の一般論を語るには、まだまだじゃない? 現状と個人の経験なわけで。 このスレには厳密主義が多いかと思った。
344 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:47:54 ] >>338 ちょっと待て、聞き捨てならん。こんな書いてて楽しくないものが、LISP の 昇華物であってたまるかぁっ!
345 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:03:17 ] >>344 昔、Lispの研究をしていた人がSunに行ってJavaを作り、それに対抗したMicrosoftが MLの研究グループを引き抜いてC#を作ったんだよ。 Lispは特にリサーチプロジェクトなんかには便利な言語だね。 Javaは大規模なプロジェクト 向きかな。 要するに、適材適所で使えば良いかと。
346 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:09:40 ] 昇華(しょうか)(Sublimation) 物理学では 省略・・・ 心理学では 防衛機制の一つ。 実現不可能な目標・葛藤や満たすことができない欲求から、 別のより高度で社会に認められる目標に目を向け、 その実現によって自己実現を図ろうとすること。 例)かつてアクション映画で活躍したが、 障害を負ってアクション映画に出演できなくなった→障害者保護団体を設立する
347 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:18:09 ] >>345 本気で言ってるのだとしたら面白すぎる
348 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:22:16 ] → 数理論理学では ならば
349 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:33:23 ] >>345 それって、ガイ・スティールのことか?Java はやっぱりジェームズ・ゴスリ ングのものだと思うのだけどなあ。ゴスリングとビル・ジョイが Java の仕様 でもめたところを、ガイ・スティールがまとめたんだろう。彼は他にもいろん な言語の仕様に関わってるし。JavaScript とか。 ML とC# の関係は全然知らなかった。ありがとう。
350 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 22:08:05 ] 下らん ヒント:Java, Delphi, ObjectPascal
351 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 22:15:33 ] >>349 > 彼は他にもいろんな言語の仕様に関わってるし。 をいをい。Schemeを忘れるなよ。w 時系列で言えば Scheme→Common Lisp→Java の順で手がけている。 もちろんこの順序と言語の優劣は関係ない。 漏れはGuy Steeleの絡んだ言語はすべて好きだよ。
352 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 22:24:29 ] >>351 初期のJavaの研究会行ったら「私の仕事はGuy L. Steele 仕事ですw」という奴が居て噴いたなぁ。 Scheme → CommonLisp → StarLisp, C* (ThinkingMachine) → HighPerformanceFortran → Java のうち、漏れ自身ThinkingMachine以外はやってたw
353 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 22:48:06 ] C: A Reference Manual を書いたり ECMAScript の標準化を手伝ったりも
354 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 00:09:09 ] ガイ・スティールの手のひらでころがされてる気分になってきた
355 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 00:20:44 ] >>344 反応するなよ >>349 騙されるなよ
356 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 00:31:28 ] >>345 ダウト
357 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 01:21:56 ] r6rs の作業が始まってから一年半経つけど、あとどのくらい掛かるんだろうか。 UNICODE サポート、例外機構、モジュール機構、構造体辺りが楽しみだ。 モジュールは長く標準化が待ち望まれた機能だしね。
358 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 01:28:41 ] 構造体作るから多値はいらないという 多値は受け取ったり受け取らなかったりと、今一不可解なプロトコルと言える 参照ベースな言語では構造体パックが正解なのかもしれない
359 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 03:35:45 ] >>339 そこで Arc ですよ。 >>358 個人的には多値で渡していくやり方は細かいことを気にせずに済んで好きなんだけど、 いまいち現状だと構文上すっきりしないところが多いのも確かですね。 wiliki であった、アリティに応じて返す値の数を変えられるようにする、 ってのは結構面白いなあと思った。問題が色々出て来ちゃうみたいだったけど。 ……でもその辺すっきりしたいなら他の関数型言語に転んじゃった方が楽な気が。 どうせ構造体でパックしちゃうなら 1-in 1-out で、型付けも静的な方が楽じゃないですか?
360 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 07:09:22 ] 多値で受け取るのも、構造体のアクセッサ経由で値を受け取るのも、 手間は変わらないって考えて良いのかな。
361 名前:デフォルトの名無しさん [2005/06/15(水) 11:25:48 ] こんな感じかな? (i) 構造体のコンストラクタが関数の末尾位置にあるときは、構造体 そのものをスタックにアロケートして、 (ii) その関数の呼び出し側で返値(構造体)がエスケープしないなら そのままスタックの上で使う。
362 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 11:37:37 ] 割り込み失礼。スラドに載った。シンボルを HashTable にしたのが後藤氏の 仕事とは知りませんでした。 「日本のコンピュータ研究の先駆者、後藤英一さん他界」 slashdot.jp/article.pl?sid=05/06/14/0954213&topic=89&mode=nested&threshold=-1
363 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 11:02:58 ] 質問です。 『初めての人のためのLISP』を図書館で借りて読んでいるのですが、ちょっと 分からない点があります。 P147 ------------------------- 初心者は nconc の使い方でミスをするケースが非常に多い。例えば,プログ ラムの中で (setq x (nconc '(title =) y)) などとやると,プログラムの中の (title =) というリストの後ろに y の値がくっついてしまう。だからふたたびこの式を 評価すると,前回くっついたものの後ろにまた nconc することになる。プロ グラム中で quote されたリストもデータには代わりはないから要注意。 ------------------------- しかし、手元の処理系(emacs21, xyzzy)では、上の式は何度評価しても、x に は同じ(equalな)値がバインドされています。どんどん長くなったりしません。 私が勘違いしているのでしょうか?それとも、昔の処理系なら x はどんどん 長くなったのでしょうか?
364 名前:ζ [2005/06/16(木) 12:21:12 ] こうゆーことが言いたいんじゃないのか? (setq a "hi" ) => "hi" (setq a (nconc '(title =) a)) => (title = . "hi") => (title = title = . "hi") => (title = title = title = . "hi") => (title = title = title = title = . "hi")
365 名前:363 mailto:sage [2005/06/16(木) 12:37:21 ] ちょっと違うと思います。それだったら、nconc ではなく append でも同じで すから。
366 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 13:31:00 ] 評価するときに (setq x (nconc '(title =) y)) ってもう一度打ち込んでるとか。 そうすると '(title =) のリストが(多くの処理系では)再評価のたびに新しく作られる。 (defun f () (setq x (nconc '(title =) y))) のような関数を作って (f) を再評価してみては? ちなみにANSI Common Lispの規定ではquote式のリストを書き換えることは禁止 になっていたと思う。
367 名前:364 mailto:sage [2005/06/16(木) 14:06:31 ] 当方の環境は emacs と xyzzy ですので、新たに手入力をしたりはしていませ ん。*scratch buffer* の同じ行で、C-j を繰り返しています。それでも x は 伸びないのです。 なお、念のため (defun f () (setq x (nconc '(title =) y))) も書いてみま したが、やはり emacs、xyzzy とも x が伸びたりはしません。
368 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:15:10 ] こうじゃないの? (setq x '(1 2 3)) (nconc x '(4 5)) nconc を繰り返すと x は長くなっていく(@emacs21)。
369 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:15:44 ] >>367 >C-j を繰り返しています。 これはLispインタプリタ側から見たらテキストを再入力してるのと同じ。 内部的にはトップレベルの (read) がもう一回呼ばれるからね。 ところで y の値には何を入れて試してるの?
370 名前:364 mailto:sage [2005/06/16(木) 14:36:05 ] (setq y 'hoge) としてから実行しています。ちなみに、先の関数 f をバイト コンパイルしても、やはり x は伸びません。 私の疑問をまとめますと、'(title =) を評価したら、それが再度の手入力で あれ、バイトコンパイル後の関数内であれ、毎回新たな cons セルが生成され るのが自然なのではないか、x が伸びるのはおかしいではないか、というもの です。 しかし、よく考えてみると、伸びないのが逆におかしいような気もします。混 乱してきました。 nconc に渡されるものの実体は何でしょうか?渡されるものがただの文字列で、 それを nconc が評価してリストを生成するなら、伸びないのが自然だし、渡 されるものが cons セルそのもので、その生成は最初にコードを書いたときに 行われるなら、伸びるのが当然のような気がします。 皆さんの処理系では、どうなるでしょうか?
371 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:44:44 ] destructive か non-destructive の差だろ。 実装による。
372 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:48:44 ] >>370 '(title =)のセルが作られるのはトップレベルの内部で呼ばれるread関数の中。 エディタは文字列で持っているが、それがLispの世界に渡されるときにconsセル に変換される。君の場合はC-jを押したときに起こっているはず。 あとyの値がアトムでは面白いことは起きないだろ。 (setq y '(hoge)) (defun f () (setq x (nconc '(title =) y))) しておいて(f)を評価してみ。2回目の評価で凄いことが起きるぞ。w
373 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:50:01 ] >>371 nconcがdestructiveでない実装ってある?
374 名前:364 mailto:sage [2005/06/16(木) 16:39:48 ] 大変よく分かりました。ありがとうございます。というか、実に自分は分かっ てませんでした。 (setq y '(hoge); リストを入れる。 (f); 評価にあたって、バイトコンパイルの必要はない。 =>(title = hoge) ; 1回目 =>(title = hoge hoge . #2) ; 2回目 =>無限ループ ;3回目...あわてて C-g で停止。 nconc は破壊的だから、同じリストを nconc で何度も結合すると、自己参照 が起きてしまうのですね。私のところで問題が起きなかったのは、一つはアト ムを nconc していたからなのですね。 まとめると、こんな感じでしょうか。 ・(setq x (nconc '(title =) y)) の評価は、これを素で評価するのと、関数 に入れて評価するのとで、結果が違う。 ・(setq z '(title =)) として、(setq x (nconc z y)) を評価すると、素で 評価しても、関数に入れても同じ結果になる。 ・だから、Common Lisp では、quote 式のリストに破壊的操作を行ってはなら ないことになっている。
375 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 18:54:46 ] 違う。それだと (setq x (nconc (list 'title '=) y)) でも同じだよね。 * '(a b c) のようなフォームはリテラルと呼ばれ、コンパイル時に作成される。 * だから (defun f () '(a b c)) の時、(eq (f) (f)) は真になる。 * もしここでリテラルの変更を許可してしまうと (f) => '(a b c) (nconc (f) '(d e f)) (f) => '(a b c d e f) となり、参照透過性が保てなくなる。 * また、コンパイラは同じ値のリテラルを同じオブジェクトにしてもかまわない。 (setq x '(a b c) y '(a b c)) において (eq x y) が真になってもかまわない ということ。そのような最適化をするコンパイラでは (setq x '(a b c) y (nconc '(a b c) '(d e f))) で x まで '(a b c d e f) になってしまう。
376 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 20:06:54 ] >>375 「コンパイル時に作成される」という言い方は抵抗あるなぁ。 基本的にはインタプリタでも事情は似たようなもんだから。 同一リテラルを再利用する最適化はread関数が行う可能性も あるし、もちろんコンパイラが行う可能性もある。 (実際にやる処理系は見たことないけど)
377 名前:363 mailto:sage [2005/06/16(木) 21:16:25 ] 興味深い、ありがとうございました。 しかし、後者の理由はわかりますが、前者の参照透過性については、副作用の ある関数も多いわけですから(カウントアップのクロージャとか)、純粋な関 数型言語でない LISP にとってそれほど重要なのか、よく分からないです。 あと、 (setq y '(hoge)) (defun f () (setq x (nconc (list 'title '=) y))) これだと、(f) を何度評価しても、結果は (title = hoge) なのですが。
378 名前:363 mailto:sage [2005/06/16(木) 21:17:16 ] あ、日本語がおかしい。「興味深いお話、ありがとうございます」でした。
379 名前:375 mailto:sage [2005/06/16(木) 22:16:50 ] >>376 インタプリタであっても、クロージャの作成等ある程度の変換処理が入るので、 そういった物も含めてコンパイラと書いたんだけど、 Common Lisp では 「コンパイラ」という用語は interpreted function を compiled function に 変換する機能として定義されてるからよくなかったね。 「処理系によって作成される」等に訂正。 ところで、read 関数が返すのは #n# 等の例外を除いて新規に割り当てられる ことが保証されてなかったっけ。reader の段階では '... を (quote ...) と 変換できることは知ってても (quote (a b c)) がリテラルであり再利用可能 であることは知らないはずだけど。 もし保証されてないとすると、prin1 で保存したデータを read して破壊的操 作してるコードを修正しないと。。。 >>377 一見参照透過に見えるのにそうでないのは混乱の元だってこと。 実際にはリテラルを直接返すのは呼び出し元の挙動に依存するので あまり好ましいやり方じゃないんだけどね。 あと、後半部についてはそのとおり。(setq x (nconc (list ... はまとめ の部分に対してのコメント。
380 名前:363 mailto:sage [2005/06/16(木) 23:07:13 ] なるほど、意図を逆だと勘違いしていました。すみません。
381 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 23:26:37 ] すみませんが質問です。 Windows で Scheme を書いておられる方は、環境に何をお使いですか?Emacs の scheme-mode + run-scheme と似たような環境がほしいのです。 ・ChezEdit ... Shift + F2 で範囲選択した個所を評価・実行できるので、Emacs と かなり使い勝手は近い。しかし Petite Chez Scheme 専用。また Windows95 系の OS では動かない。 ・xyzzy ... scheme-mode はあるが、run-scheme はない。 ・Meadow ... 使ったことないけれど、run-scheme は Gauche ではうまく動かない らしい。 ・Dr.Scheme ... MzScheme 専用。英語なので使い方がよく分からない。
382 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 04:17:37 ] お願い: ある処理系で Shift_JIS をサポートするに当たり、locale が Shift_JIS の 際の nl_langinfo(CODESET) の値を調べてます。 以下のコードを foo.sh と保存し、sh foo.sh の結果を教えてください。 ちなみに、当方では以下のようになります。 FreeBSD 5.4-RELEASE-p2 codeset: SJIS --ここから-- foo.sh #! /bin/sh c=$0.$$.c o=$0.$$.out cat > $c <<__EOF__ #include <langinfo.h> #include <locale.h> #include <stdio.h> main() { setlocale(LC_ALL, ""); printf("codeset: %s\n", nl_langinfo(CODESET)); } __EOF__ cc -o $o $c uname -sr for l in $(locale -a | grep -i -e sjis -e 'shift.*jis'); do LC_ALL=$l ./$o done | sort -u rm $c $o --ここまで--
383 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 05:25:49 ] SolarisではPCKだったと思うのでひっかからないような。
384 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 05:27:28 ] スレ違いなものにレスをつけてしまったorz
385 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 09:07:13 ] あっそ、じゃあ調査は終了。
386 名前:381 mailto:sage [2005/06/17(金) 10:42:50 ] うわーい、全然レスがついてません。まいりました。 みんなホント、Windows でどうやってるんですか?Gauche を Windows に移植 した人たちとか、一体どんな環境で Gauche を使いたくて移植したんでしょうか?
387 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 11:18:19 ] >>381 Windows でも Emacs(Meadow) + scheme-mode + run-scheme ですが何か?
388 名前:381 mailto:sage [2005/06/17(金) 12:52:38 ] >>387 すみません、Meadow は Gauche を普通に使えるみたいですね。 64.233.161.104/search?q=cache:pD4TKAZBB8cJ:eclipse.neneko.com/diary/20040313.html Meadowのrun-schemeでGaucheを使う場合には-iオプションを付ける必要がある. (setq scheme-program-name "gosh -i") 少し質問させてください。 ・Meadow で MzScheme、Chez Scheme などは使えますか? ・もう少し軽い環境はないでしょうか?VisualStudio が軽々動くマシンでし たら、Meadow + Cygwin も問題なく使えるのだろうと思うのですが、私の Windows 機は xyzzy ももっさりしているぐらいなので。
389 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 12:59:07 ] Windowsの代わりにLinuxかFreeBSDでも入れて、GnomeやKDEなんかの 重たいデスクトップ環境を使わないようにすれば古いPCでも快適ですよ。 当方は初代ThinkPad560をそうやって使ってます。買い替えたのは内蔵 ハードディスクだけ。GoshもMzSchemeもそこそこ快適に動きますよ。
390 名前:381 mailto:sage [2005/06/17(金) 15:15:05 ] ありがとうございます。実は、Linux をすでに別のマシンに導入しており、 Emacs21 + Gauche を快適に使っています。それまでずっと Windows (とその 系統のソフト)しか使っていなかったので、こんなに便利な環境があるなんて、 想像もしていませんでした。今まで使わないで大損をしていた、と後悔してい るほどです。 www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs21/scheme.html 現用の Windows(98)機は事情があって、Linux を入れることはできないのです が、このマシンでも Petite Chez Scheme は意外に早く動くので、こちらでも もう少し環境を整えられないかな、と思ったのです。Emacs 環境がいかに便利 とは言え、長く使った Win 版ChezScheme に少々愛着もありますので。
391 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 21:13:21 ] >381 >Windows で Scheme を書いておられる方は、環境に何をお使いですか? DrScheme 使ってる。 >Dr.Scheme ... MzScheme 専用。英語なので使い方がよく分からない。 最近 GUI が日本語化されたよ (v299.106 以降)。 マニュアルは英語のままだけど。
392 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 21:39:49 ] >>391 それって、どこでダウンロードできますか?下記のサイトではまだ Version:299.100 なんだけど。 download.plt-scheme.org/drscheme/
393 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 21:50:31 ] pre.plt-scheme.org/installers/table.html
394 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 22:20:52 ] ありがとう!これはなかなか凄そうだ!
395 名前:381 mailto:sage [2005/06/17(金) 23:44:45 ] Dr.Scheme(PLT Scheme)は、Windows の COM オブジェクトの操作ができるとい うので、とても興味があります。 いくつか質問させてください。 ・開発環境は、日本語は通りますか? ・エディタ画面の、指定した範囲の評価はできますか? (Emacs の C-x C-e にあたるもの) ・エディタ画面は、S式単位の編集はできますか? (参照:4.2. カーソル移動) www.kahua.org/cgi-bin/khead.cgi/kahua-web/show/eg/emacs ・Emacs キーバインドにすることはできますか? ・以前試したとき、素のMzScheme は結構早いのに、Dr.Scheme環境だと大変遅 くなった記憶があります。今はどうでしょうか?遅いままだとしたら、使い 方による回避はできますか? たくさん聞いてすみません。私のほかにも、興味はあるけど手を出せないでい る人は多いと思いますので。少しでも答えてもらえたら、大喜びです。
396 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 23:52:39 ] >興味はあるけど手を出せないでいる人は多いと思いますので。 この辺が漏れには理解できないんだよね。 とりあえず試してみればいいのに。
397 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 00:08:12 ] (本音-of >>395 ) => いちいち試すの面倒だからさっさと教えろよ!
398 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 07:13:00 ] >>395 (cond (開発環境は、日本語は通りますか? 今時Unicode対応は標準だと思うんだが.....) (エディタ画面の、指定した範囲の評価はできますか? そんなことすらできないものをIDEと呼ぶはずが無いと思うんだが....) (エディタ画面は、S式単位の編集はできますか? できなかったらキーボードに突っ伏して寝てしまうほど基本的な機能だと思うんだが....) (Emacs キーバインドにすることはできますか? キーバインド固定のIDEなんて絶滅して久しいと思うんだが....) (素のMzScheme は結構早いのに、Dr.Scheme環境だと大変遅くなった記憶があります。 デバッグ機能を外せば実行は早くなると思うんだが....) (else 予想と現実ってあんまり一致しないんだよな))
399 名前:381 mailto:sage [2005/06/18(土) 08:48:50 ] すみません、確かに少々ずうずうしい質問でした。 実は、最新版を一応インストールして、少し試してはいたのですが、知人のマ シンを借りて行っていたので、きちんと試す時間がなかったのです。だから試 したとは書かなかった(書けなかった)のですが、>>395 の質問項目は、いず れもその短い時間で解決できなかった項目を、知人のマシンから書き込んだも のです。 現在は自宅の自分のマシンですが、実は、インストールしようとすると、何度 やってもインストーラが途中で失敗してしまいました。おそらくメモリ不足で しょう。知人のマシンで試した時、かなり重かったので、うまく行かないよう な気がしてはいたのですが。 ただ、開発環境としては非常に興味があります。将来、新しいマシンを入手し た時のために、参考になることを教えてもらえたら、大変ありがたいのです。
400 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 18:14:12 ] (atom 381) nil
401 名前:デフォルトの名無しさん [2005/06/18(土) 20:25:36 ] Scheme で (if #t (define abc 123)) とするとエラーになるのはなんで?
402 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:31:44 ] >>401 そこは define の書ける場所ではなから。
403 名前:デフォルトの名無しさん [2005/06/18(土) 20:36:01 ] なぜ、書けないのでしょうか。 たとえば、何らかのフラグ (これこれのシンボルが定義されているかどうか) によって、定義を変えたいときは、どのようにするのがよいでしょうか。
404 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:37:27 ] >>403 set!
405 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:38:24 ] >>404 すいません、もう少し詳しく説明していただけませんか?
406 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:42:17 ] >>405 (define abc 123) (if 何かの条件 (set! abc 456)) みたいにすればいい。 define は他の言語での変数の宣言に近い。 純粋な代入は set! を使う。
407 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:47:23 ] > 他の言語での変数の宣言に近い。 なるほどー。 今の例だと、123 という簡単な値なのでよいのですが、 たとえば、構文の定義を変えたい場合はどうでしょう? たとえば、Windows と Mac で、構文の定義を変えたい場合です。 シンボル WIN32 が定義されていれば Windows の定義にしたい。 これも set! で可能でしょうか?
408 名前:デフォルトの名無しさん [2005/06/18(土) 20:47:26 ] >>402 ブロックの先頭だから書けるはずじゃない? ローカルスコープなので>>401 の例では無意味だが。 ちなみにGaucheだと書けるが、グローバルにabcが定義されちゃう。 これはバグだと思うが。
409 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:56:48 ] >>408 R5RS的にはdefineが書けるのはトップレベルか<body>の先頭。 ifの中の式は<body>ではないのでR5RS的には駄目。 つまり、lambdaとかletなどの新しいスコープを作る場所でのみ許すという 考え方だとおもわれる。 Gaucheの場合、トップレベルのifの中はまだトップレベルのスコープだという 解釈なのではないかな。これはこれで便利に使えそうな気がする。
410 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:58:01 ] おれならMLですまーとにかくけどねw
411 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 21:00:46 ] >>407 構文というのがマクロの定義を変えたいという意味なら不可だと思う。 (Gaucheなどは>>409 で書いたように可能かもしれないが) 関数の定義を変えたいという意味であれば、 (set! func (lambda (...) ...)) のようにすれば定義を変更できる。
412 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 21:10:01 ] >>411 > 構文というのがマクロの定義を変えたいという意味なら不可だと思う。 そうですかー。 できてもよさそうな機能なんですけど。。 > 関数の定義を変えたいという意味であれば、 > (set! func (lambda (...) ...)) > のようにすれば定義を変更できる。 Scheme コードをコンパイルする場合、 これだと無駄なコードがコンパイルされてしまいますよね。 だから、構文展開時に切り替えたいんです。。
413 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 22:07:43 ] >>412 > これだと無駄なコードがコンパイルされてしまいますよね。 仮に if の中に define が書けたところで、この辺の事情は 変わらないと思うのだが。
414 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 22:09:07 ] >>412 そんなのが気になるなら、win32.scm macos.scm とかにプラットフォーム 依存の構文を入れておいて、make 等でそれを target.scm にコピー、 使用する際は (load "target.scm") するようにすれば?
415 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 22:22:48 ] 基本すら理解できていないのに、何故そんな枝葉にこだわるのか
416 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 23:22:26 ] 俺もそうだけど、初学者ってそういうもんじゃないかな。 今の疑問が枝葉かどうか判別するには、ある程度見通しが立ってないと。
417 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 00:39:27 ] それは学習の仕方が下手なだけ。 ある程度学習経験があれば、そういうところにあまり時間を浪費せずに進み 後でわかるようになってるという進め方が普通。 その決断が自分でできないなら、疑問点をまとめてリストアップしておく ノートを作っておけばいい。ノートに覚えてもらうわけだ。 先に進んで問題にぶちあたったとき、スキップした項目が理解に関連するなら そのとき立ち戻ればいい。
418 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 00:58:21 ] まぁ、理想的にはその通りなんだろうけどね。 マンドクサ狩りの俺みたいなのは Scheme には #ifdef ないのか マンドクセ とりあえず放置... で終了する事が多いんで、疑問は感じた時に解決っつー スタンスもありだと思うよ。
419 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 00:59:43 ] 結局だれも解決できないんじゃ。。。 だから初学者だの何だのと言って話をそらすんじゃ。。
420 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:08:10 ] >>419 んなこたぁないょ
421 名前:ミミ mailto:sage [2005/06/19(日) 01:15:26 ] こんなんでどう? MzScheme だけど。 (define-syntax (if-for-syntax stx) (syntax-case stx () ((_ TEST-EXPR TRUE-EXPR FALSE-EXPR) (if (eval #'TEST-EXPR) #'TRUE-EXPR #'FALSE-EXPR)))) (define PLATFORM "Windows") (if-for-syntax (string=? PLATFORM "Windows") (begin (define Vendor "Microsoft") (define Color "Blue")) (begin (define Vendor "Unknown") (define Color "Red"))) (display Vendor)
422 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:18:41 ] >>419 そもそも、言語処理系のユーザが考えるべき問題じゃないし、 ユーザレベルで解決できる問題じゃないってこと。 マクロがどう展開されるか、関数がどう最適化されるかって問題だろ? 部分評価とかする処理系なら、>>412 みたいな心配はないかもしれない わけだし。
423 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:26:12 ] >>419 414 で解決したと思ってたんだけど
424 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:32:31 ] それもありだけど。
425 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:59:01 ] SRFI 0 の feature にプラットフォームも入れてくれる処理系なら (cond-expand (win32 ...) ((or unix macosx) ...) (else ...)) とか
426 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 18:16:57 ] 前も書いた気がするが、おれの処理系は#if #else #endif をreadに入れたよ。 >>425 みたいに無駄にS式縛りにするのは面倒だし 読みにくいと思ってる。 S式に縛られてないから任意の箇所で (func #if (defined 'platform-win32) 1 2 3) #else #if #t 4 5 6) #else 7 8 9) #endif #endif みたいなことができる。 まあSRFIレベルの定義じゃ無理だな。
427 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 18:42:54 ] >>426 エディタはちゃんとインデントしてくれるの?
428 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 18:44:20 ] ちなみにCommon Lispだと#+, #-でやるよね. CL風の#+ #-が使えるScheme処理系ってないの?
429 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:00:36 ] プラットフォームで分けたい場合って、関数の中身の処理だけ違っていてインターフェースは同一なはずだから scheme だと単純に変数へ束縛する関数オブジェクトを変えればいいだけになる。 だから scheme ではわざわざ新しい構文を導入するまでもなく (define hoge (if (eq? 'platform win32) (lambda (arg) ...) (lambda (arg) ...))) とかすればいい。 そしてなにより美しい。 ← 一番重要w
430 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:07:30 ] 実行時に (if (eq? ... したくないって流れだと オモテタ けど...
431 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:11:00 ] >>430 マクロ展開されるのだって1回だけと期待できるにせよ実行時だし、 >>429 のifだってよほどnaiveな実装でない限り、1回しか実行されない。 わかってる?
432 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:25:25 ] >>431 コンパイルが別パスの処理系ならマクロ展開はコンパイル時が普通じゃない? そしたら実行イメージに余分なコードは入らない.
433 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:27:49 ] >>432 別パスなコンパイラ使うなら、それこそ適当なプリプロセッサでも使えば 良いじゃん
434 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:28:48 ] >>431 あらかじめコンパイルしたファイルをダンプしておいた場合も if は評価されない?
435 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 20:10:04 ] >>434 あらかじめコンパイルしたファイルをダンプするって意味が良くわからないが、 >>429 の例を借りると、hogeの束縛時つまり(define hoge ...)の実行時に1回if は評価されるし、されないと困る。が、これによって定義されたhogeを評価 する時には(if (eq? 'platform win32) ...)部分のifを評価するような処理系は 存在しない。
436 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 21:18:53 ] ごめん・・・俺の作った処理系・・・評価しちゃう・・・
437 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 22:07:44 ] >>429 言いたいことはわかるが、別に美しくない。 使う側はそんな事のためにlambdaに分離してまでやりたくないんだよ。 使う側の気持ちを素直に酌めば、S式縛りでやるなら (if (eq? 'platform win32) (define (arg)...) (define (arg)...)) と書いた方が自然なのでは。 おれの処理系では書けるし、実装するためのトリックみたいなものもない。 逆にscheme的には書けないのはおかしい気がする。 マクロで(begin (define 〜)(define 〜))と書きたい場合もあるし。 まあ、#if〜#endifを作るまではおれもこういう方法を仕方なくとってたけど、 条件毎に余計な部分まで定義をまるごと書かないとダメな点が どうにも我慢ならなくて切捨てた。
438 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 22:13:37 ] >>437 おまいの処理系自慢はいいよ。Schemeの話してるんだから。
439 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 22:28:16 ] 悪かったよ。 おれも散々悩んだ部分だし。 schemeの中だけでやるなら429みたいな方法しかない。 あとは処理系依存だろ。
440 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 22:34:13 ] つか、こういう時のための SRFI-0 だろ
441 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 22:37:55 ] R5RS見るとトップレベルのbeginだけ例外になってるのな。 萎え。
442 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 22:39:37 ] SRFIのせいでどんどんschemeが変な言語になって行くと思うのは俺だけですか。
443 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 22:44:54 ] >>442 でも無いといろいろと再発明する羽目になるからなぁ。 きれいで使えないよりは変で使えるほうがいい。
444 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 22:47:00 ] SRFIとR6RSの関係ってどうなるの?
445 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 23:20:01 ] >>436 評価するとなると、ifの中に副作用の有る式が書かれていたらプログラムの意味が変わるでしょ。それじゃ全然Schemeじゃないじゃん。 それとも、副作用がないということがプログラム解析で証明できたときだけ評価するの?
446 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 23:30:07 ] 「処理系が存在しない」 「naiveな実装でない限り、1回しか実行されない」 「それじゃ全然Schemeじゃない」 どれが正しいのか教えてください。
447 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 23:44:06 ] Scheme ってリーダーマクロ使わないの?
448 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 00:05:30 ] 今はSchemeの話をしてるのだから、 上の「処理系が存在しない」と俺の処理系は評価するが?に対する 「それじゃ全然Schemeじゃない」ってのは同じことじゃね?
449 名前:3才児 mailto:sage [2005/06/20(月) 00:23:04 ] チンカスの匂いがしてきまちた
450 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 00:41:53 ] >>444 SRFI でも obsolete 扱いのやつはあるんじゃなかったっけ? 順次、事実上の格下げされていくんじゃないかな。R6RS と コンフリクトしそうな物とかも。 R6RS が出来ても、実装が普及するまで時間が掛かるだろうから、 しばらくはそのままなんだろうけど。
451 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 07:29:45 ] car cdr atom eq cons は、LISP の5つの基本関数である。それ以外の関数は、 全てこれらを使って合成できるとされる。数学で言う公理に当たる。 car 板 hobby7.2ch.net/car/ cdr 板 pc8.2ch.net/cdr/ atom 板 society3.2ch.net/atom/ eq 板 live18.2ch.net/eq/ cons 板はまだない。速やかな板新設が必要ではないだろうか。
452 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 07:31:29 ] WindowsXP 上で CLISP を実行すると WARNING: locale: no encoding CP932, using UTF-8 WARNING: *TERMINAL-ENCODING*: no encoding CP932, using UTF-8 WARNING: *FOREIGN-ENCODING*: reset to ASCII といった具合に文字コード関連の警告が出ますが これを解決する方法をご存知でしたらご教示ください。
453 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 07:49:45 ] >>400 今意味が分かったw >>381 には悪いがちょっと ワラタ
454 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 09:16:09 ] (if (eq? platform 'win32) (define hoge ...) (define hoge ...)) とかが許されないのは、プログラム全体をCやネイティブに変換するコンパイラーとかで面倒だからでないかい? 例えば、同じコンパイルユニットの中でplatformが定義されていれば、コンパイラーはどっちのdefineをコンパイルして書き出すか判断できるけど、 platformが独立にコンパイルされる別のユニット内で定義されている場合には、特別な仕組みが必要に思える。 そういった足枷をつけるより、ライブラリーレベル(srfi-0)で対応した方が良いということで現行のようになったんだと思ってるんだけど。 どう思う?
455 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 20:57:56 ] >>454 すまんが言ってることがわからん。 >platformが独立にコンパイルされる別のユニット内で定義されている場合 この辺をもう少し説明してほしい。 platformが未定義の場合ということ? 定数畳み込みで消えずに未定義でコンパイル通ったとしても、 一度はどっかで実行されるわけだから 最悪ランタイムエラーになったり、 コンパイルの段階で未定義エラーで検出するで良いんじゃないの? さっぱりわからん。 >特別な仕組み 特別な仕組みとは? >ライブラリーレベル(srfi-0) cond-expandという名前が気に食わん。 適当としか思えない・・
456 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 21:10:30 ] 未定義エラーはリンクの段階かもしれん。
457 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 23:35:56 ] >>443 CL使っとけ。
458 名前:デフォルトの名無しさん mailto:sage [2005/06/21(火) 01:27:02 ] cmucl とかアセンブラ(に変換するlisp)で書かれているし。
459 名前:デフォルトの名無しさん mailto:sage [2005/06/21(火) 01:35:40 ] >>457 再発明なんて高々一回程度だよ。 古臭いCL使うぐらいなら再発明も悪くないだろう。
460 名前:デフォルトの名無しさん mailto:sage [2005/06/21(火) 02:49:08 ] CommonLispもSchemeもそうやって作られてきた。
461 名前:デフォルトの名無しさん mailto:sage [2005/06/21(火) 06:49:58 ] >>452 コマンドラインで、clisp -E ASCII とかどう?
462 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 16:59:02 ] schemeを始めたんですけどリストを逆順にする関数がわかりません。 (define (reverse lst) (if (null? lst) '() (cons (reverse (cdr lst)) (car lst)))) こうやるとペアになってしまいます。 (reverse '(1 2 3)) ((3 2) . 1) (3 2 1)となるやつをおしえてください。
463 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 17:29:15 ] (define (reverse lst) (if (null? lst) '() (append (reverse (cdr lst)) (cons (car lst) '()))))
464 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 17:42:55 ] >>462 ↓わかりやすい例 (define (my-reverse lst) (if (null? lst) '() (append (my-reverse (cdr lst)) (list (car lst))))) ↓より効率の良い例 (define (my2-reverse lst) (my2-reverse-1 lst '())) (define (my2-reverse-1 lst done) (if (null? lst) done (my2-reverse-1 (cdr lst) (cons (car lst) done))))
465 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 17:48:54 ] >>463 そりゃ効率が悪いよ。append で同じリストを何回もコピーしてしまう。 こっちの方がいいと思う。 (define (my-reverse list0) (let loop ((list0 list0) (result '())) (if (null? list0) result (loop (cdr list0) (cons (car list0) result)))))
466 名前:465 mailto:sage [2005/06/22(水) 17:50:23 ] あ、やっぱりかぶっちゃった。 私のはローカル関数を使って一つにまとめたバージョンということで。
467 名前:デフォルトの名無しさん [2005/06/22(水) 18:41:55 ] こういう片方向のリスト演算って、 他の言語だとしょーもないライブラリ関数や自作関数で 限定的にやるしかないんだよね。 やっぱ年季が違うなあ。 LISPすごい。
468 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 19:39:23 ] (define my-reverse reverse)
469 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 19:54:52 ] ワラタ。 (setf (symbol-function 'my-reverse) #'reverse)
470 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 20:01:19 ] 無知丸出しw
471 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 20:04:33 ] えー、どうやるの?
472 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 20:07:53 ] >>470-471 え、なんかあったの?
473 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 20:17:37 ] 無知ですいません。 これって Common Lisp だとどう書くのがスマートなんでしょうか?
474 名前:462 mailto:sage [2005/06/22(水) 21:09:29 ] 理解できました。ありがとう。
475 名前:デフォルトの名無しさん mailto:sage [2005/06/23(木) 06:31:50 ] (define (my-reverse! list0) (let loop ((list0 list0) (result0 '())) (if (null? list0) result0 (let ((result1 (loop (cdr list0) list0))) (set-cdr! list0 result0) result1))))
476 名前:デフォルトの名無しさん mailto:sage [2005/06/23(木) 06:49:08 ] !イラネ!!
477 名前:デフォルトの名無しさん mailto:sage [2005/06/23(木) 07:32:30 ] 効率命の破壊的リスト操作なのに、スタックを消費するのがつらいところだのう。
478 名前:デフォルトの名無しさん mailto:sage [2005/06/23(木) 08:15:37 ] (define (my-reverse! lst) (let loop ((l lst) (r '())) (if (null? l) r (let ((l1 (cdr l))) (set-cdr! l r) (loop l1 l)))))
479 名前:デフォルトの名無しさん mailto:sage [2005/06/23(木) 19:25:49 ] (define my-reverse! reverse!)
480 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 06:39:47 ] >>165 に書かれてるイベント行った方います?
481 名前:デフォルトの名無しさん mailto:sage [2005/06/27(月) 04:36:05 ] この板にちょくちょく出没している様子のtabesugiのひとが行ったんじゃないか?
482 名前:デフォルトの名無しさん mailto:sage [2005/06/27(月) 22:50:00 ] Scheme のレキシカルスコープは Algol 60 の影響なのでしょうか? 私はラムダ計算の変数の、自由変数と束縛変数による影響だと思った のですが。
483 名前:デフォルトの名無しさん mailto:sage [2005/06/27(月) 22:58:18 ] 1970年代のLispは動的スコープが主流でFUNARG問題に悩んでいた。 それに対するアンチテーゼというか実験としてSchemeという言語が作ら れたような節はあるね。その後Common Lispにも採用されてLisp界全体 でもレキシカルスコープが主流になるわけだが。
484 名前:482 mailto:sage [2005/06/27(月) 23:10:36 ] >>483 もっと計算機よりの実装を知らなければならなかったのですね。 Lisp の歴史を勉強してみてよくわかりました。m(_ _)m
485 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 08:54:21 ] Emacsが動的スコープなんで、何でレキシカルスコープじゃないの?とRMSに 尋ねた人によると、「レキシカルスコープは実行速度が遅い」といったそうな。 昔の話。
486 名前:デフォルトの名無しさん [2005/06/28(火) 09:22:24 ] International Lisp Conferenceに参加した人に聞いたんだけど、結構を盛り上がってたって聞いた。 結構人も集まってて、熱心な若者Lisperも結構いたのに驚いたとか。 bioinformatics系のアプリが結構多くて、時代の流れを感じたとか。 当日proceedingsが配布されたけど、後日、 www.international-lisp-conference.org から販売するそうな。
487 名前:デフォルトの名無しさん [2005/06/28(火) 12:56:20 ] 理解に苦しんでいるstatic scopeの話がちょうど出たようですので、 質問させてください。 ;;; 例-A ---------------------------------------- A1> (define foo begin) A2> (define bar (lambda (a b c) (foo a b c))) A3> (bar #t 0 1) ;;==> 1 A4> (define foo list) A5> (bar #t 0 1) ;;==> 1 ;;; 例-B ---------------------------------------- B1> (define foo (lambda (m) (- m 3))) B2> (define bar (lambda (n) (foo n))) B3> (bar 10) ;;==> 7 B4> (define foo (lambda (m) (+ m 3))) B5> (bar 10) ;;==> 13 例-Aのほうは、fooをtop-levelで再定義(A4)しても、 barを呼び出したとき(A5)には、手続き定義時(A2)の 環境が使われています。 これはstatic scopeの考え方からすると当然だと 思えるようになりました。 ところが、例-Bのほうは、 fooを再定義(B4)すると、手続き呼び出し時(B5)には 手続き定義時(B2)のfooではなく、再定義されたfooが 使われています。 この違いは何でしょうか?
488 名前:487 [2005/06/28(火) 13:00:37 ] 失礼。 static scopeではなくて、lexical scopeでした。
489 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 13:20:54 ] >>487 変数が既に束縛されている場合の top level での define は set! と同等な ので例-B が妥当。例-A は A1 で変数に syntax を代入してるけど、変数経由 で syntax を使用した場合の動作は未定義のはず。たぶんその処理系では foo も syntactic keyword になって、かつ A2 の段階で展開されてしまってるん じゃないかと思う。
490 名前:487 [2005/06/28(火) 13:52:58 ] >>489 ありがとうございます。 > 変数経由で syntax を使用した場合の動作は未定義のはず。 これって、どこかに書いてありますか? 書いてないから未定義なのかな? ここらへんのことをよく知りたいと思っているのですが、よい 資料はありますでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 17:17:51 ] >>490 >これって、どこかに書いてありますか? >書いてないから未定義なのかな? おれは489ではないのだがちょっと失礼する R5RSの5.2 Definitionsによれば、定義は (define <variable> <expression>) でもって7.1.3. Expressionsにはsyntactic keywordが<expression>になる記述は無い。 だから、(define foo begin)はR5RS的には有効ではないと思われる(例えばPLTとかchezとかはシンタックスエラーとなる) しかし1.3.2 Error situations and unspecified behaviorによれば処理系にそのエラーの報告義務は無い。 つまり動作は未定義で処理系依存でよいということであり、(define foo begin)などが通る場合は処理系独自の拡張の結果という事だと考えて良いと思うんだけど.......これでいいのかな?皆の衆
492 名前:487 [2005/06/28(火) 20:17:38 ] >>491 なるほどR5RSはそういう読み方をしなければいけないんですね。 私が試した処理系のほとんど(kawa,guile,gosh)では >>487 例-Aのようになったので、そうあるべきなのかと思いこんでいました。 唯一biglooと個人的に使っているマイナーな処理系では 同様のコードを読ませると、手続き定義後の変更も反映されて A3>==> 1 A5>==> (#t 0 1) となります。 厳密にはエラーなんですね。 489さん、491さん、ありがとうございました。
493 名前:デフォルトの名無しさん mailto:sage [2005/06/30(木) 05:47:08 ] かっちょえー lemonodor.com/archives/001177.html
494 名前:デフォルトの名無しさん mailto:sage [2005/07/02(土) 08:50:26 ] >>486 日本人もたくさん参加してたのかな?
495 名前:デフォルトの名無しさん mailto:sage [2005/07/03(日) 21:51:02 ] すいません 入れ子のリストの中身を調べて 最も大きい値を返す関数の定義という問題なのですが、 例えば(al-max'((1 3)((9)4)))を与えた時9を返すような 定義を教えて頂きたいのですが。 どのようにすれば良いのでしょうか? 入れ子を考えなければ (defun max1(x)(cond((null (cdr x))(car x))((<= (max1(cdr x))(car x))(car x))(t(max1(cdr x))))) このようになるんですけど。入れ子だと良く分かりません。
496 名前:デフォルトの名無しさん mailto:sage [2005/07/03(日) 22:13:31 ] >>495 scheme だけど。 ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#lambda fold-tree っぽいものは標準であってもいいような気がするんだけどなあ。
497 名前:495 mailto:sage [2005/07/03(日) 22:32:44 ] >>496 ありがとうございます。 サイト見ましたが高級関数を定義とか ユーティリティ関数とかさっぱり分かりません。 具体的にはどうすればいいですかね?
498 名前:デフォルトの名無しさん mailto:sage [2005/07/03(日) 22:45:38 ] (defun al-max (lst) (cond ((numberp lst) lst) ((null (cdr lst)) (al-max (car lst))) (t (max (al-max (car lst)) (al-max (cdr lst))))))
499 名前:495 mailto:sage [2005/07/03(日) 22:48:47 ] >>498 ありがとうございます! 感謝です。
500 名前:デフォルトの名無しさん mailto:sage [2005/07/03(日) 23:01:11 ] (defun al-max (x) (if (listp x) (apply #'max (mapcar #'al-max x)) x))
501 名前:495 mailto:sage [2005/07/03(日) 23:05:49 ] すいませんmax使わないで作ることって事出来ますかね?
502 名前:デフォルトの名無しさん mailto:sage [2005/07/03(日) 23:08:35 ] max
503 名前:デフォルトの名無しさん mailto:sage [2005/07/03(日) 23:09:26 ] max を使いたくないなら、自分で max を書けばいいじゃない。
504 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 00:03:01 ] >>503 そうですね、ありがとうございました。
505 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 00:55:21 ] こっそりGauche 0.8.5が来てた。
506 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 06:08:07 ] (al-max '()) の時はエラーですね。
507 名前:デフォルトの名無しさん [2005/07/04(月) 22:26:42 ] cmuclはまだwindowsでは動かんのか?
508 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 22:59:59 ] 何の為に?
509 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 00:24:57 ] >>508 何のためにって・・・Lispがネイティブに落ちるなら色々使えるじゃん。 いつまでもウニ系しか使えないからLispはマイナーなんだよ
510 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 00:59:05 ] テツ&銀行・リスプを使えって、外国のおにいちゃんがゆってた
511 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 01:05:16 ] 鉄銀行もWindows版はまだじゃなかったっけか
512 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 04:50:41 ] なんでお前の話はすぐループするのか?一ヶ月前の有意義な話を、単に煽りの材料に転用しただけ。 お前の頭のねじれ具合は笑えるな。すげーおもしれえ。ちょーうけた。さいこー。
513 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 04:54:27 ] KCLは20年前からネイティブコードで走ってるけど、何か?
514 名前:デフォルトの名無しさん [2005/07/05(火) 17:23:06 ] 長くなってすみません。 Schemeの手続きとそのスコープについて教えてください。 たとえば [ソースコード]------------------------------------------------------------ .1: (define a_proc .2: (lambda (n k) .3: (if (null? n) .4: ; true-clause .5: (begin .6: (newline) .7: (write 'true-clause) (newline) .8: (write 'n=) (write n) (newline) .9: (write 'k=) (write k) (newline) 10: (k '())) 11: ; false-clause 12: (begin 13: (newline) 14: (write 'false-clause) (newline) 15: (write 'n=) (write n) (newline) 16: (write 'k=) (write k) (newline) 17: (a_proc (cdr n) 18: (lambda (u) 19: (write 'n=) (write n) (newline) 20: (write 'k=) (write k) (newline) 21: (write 'u=) (write u) (newline) 22: (k (append n u)))))))) 23: (a_proc '(a) (lambda (x) x)) というコードを処理系に読ませると、
515 名前:デフォルトの名無しさん [2005/07/05(火) 17:24:47 ] >>514 の続き [出力結果]---------------------------------------------------------------- .1> false-clause .2> n=(a) .3> k=#<closure (x) x> ..> .4> true-clause .5> n=() .6> k=#<closure (u) ..> (write (quote sub-clause)) (newline) \ ..> (write (quote k=)) (write k) (newline) \ ..> (write (quote n=)) (write n) (newline) \ ..> (write (quote u=)) (write u) (newline) \ ..> (k (append n u))> ..> .7> n=(a) .8> k=#<closure (x) x> .9> u=() 10> (a) のような結果が得られます。
516 名前:デフォルトの名無しさん [2005/07/05(火) 17:26:14 ] >>514 の続き(ここまで) ソースコードは末尾再帰になっているので、 a_procのスコープは呼び出しにかかわらず単一であると考えると、そのスコープ内で 2>〜3>で表示されている最初の束縛関係が、一度5>〜6>のように変更されています。 ところが、18:〜22:で内部手続きを作成すると、そこでは、 変更されたの束縛関係(5>〜6>)ではなく最初の束縛関係(7>〜8>)に戻っています。 R5RS 4.1.4 Procedures には The environment in effect when the lambda expression was evaluated is REMEMBERED as part of the procedure. とあります。 この「REMEMBER」という語は「そのScopeへの参照を記憶する」ことを意味すると 理解していたのですが、上の実験結果を見る限り 「そのScopeを元に作成した複製を保持する」と解釈すべきなのでしょうか? 全く思い違いをしているかもしれません。ご指摘ください。
517 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 18:23:24 ] まあ、一般論だが「考えると」いう条件つきで考えると、前提が間違っている せいで予想と違ってしまうようだ。
518 名前:デフォルトの名無しさん [2005/07/05(火) 19:25:05 ] >>517 間違えている前提を指摘してください。 お願いします。
519 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 19:54:14 ] 自分で書いた文章の読解もできないの?
520 名前:デフォルトの名無しさん [2005/07/05(火) 19:58:53 ] 「a_procが末尾再帰になってない」ということでしょうか。 それとも「a_procのスコープは単一ではない」ということでしょうか。
521 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 20:16:38 ] dynamic scope と lexical scope との違いを理解しましょう
522 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 21:52:01 ] >>520 末尾再帰とスコープを関連づけているのはなぜですか
523 名前:本田 [2005/07/05(火) 22:54:51 ] >>513 :デフォルトの名無しさん :2005/07/05(火) 04:54:27 > KCLは20年前からネイティブコードで走ってるけど、何か? KCLのコンパイラはC言語にコンパイルするはず。
524 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 22:58:46 ] C 言語は ASM にコンパイルされるし、ASM は機械語に変換される。 C にしない処理系でも IL に変換されたりするし、C にコンパイルしていても 最終的にネイティブコードになる事には変わりない。
525 名前:デフォルトの名無しさん [2005/07/05(火) 23:34:23 ] >>522 疑問に思ったのがこのコードを実行してみてだったので、 そのまま質問してしまいました。 末尾再帰は直接関係ありません。 手続きを定義するときにその手続きは定義時の環境を「覚えて」いて、 手続きを呼び出したときにはその環境内で手続きが評価される、と 理解しています。 514の質問の意図は、作られた手続きが保持しているものが (1)手続き作成時の環境そのもの(シンボルテーブルなど環境内の要素を含む) なのか、 (2)手続き作成時の環境への参照またはポインタ でよいのか、についての答えをいただきたいということでした。 (2)でよいと思っていたのですが、もしそうだとすると、>>514 の例では 手続き18:の環境は手続き2:と共有されるために、束縛関係が書き換えらてしまい、 実際の結果の説明ができません。 ということは、手続き定義時には、そのときの環境が複製され、 定義された手続き固有の(他の手続きなどからアクセスできない) 環境となって保持される、ということでよいのでしょうか。
526 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 23:42:52 ] 根本的に変な固定概念に取り憑かれているようだな。憑き落とししなきゃ。w
527 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 00:20:41 ] >>525 参照とかポインタとか複製とか実装の観点から考えないほうがいいですよ 文字通り「字面上の」スコープに縛られるんです ; それをどう実装するかは別の話
528 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 02:35:31 ] >>523 それが何か?
529 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 02:37:20 ] >>525 >>521 を勉強汁
530 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 02:43:08 ] SICPに載ってる環境モデルでええやん
531 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 03:33:24 ] 必要以上に深く考え過ぎ。しかも間違った方向に。
532 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 04:58:04 ] 學而不思則罔、思而不學則殆 ってやつだな。あやうくてしかたない。
533 名前:デフォルトの名無しさん [2005/07/06(水) 09:02:31 ] >>530 >SICPに載ってる環境モデルでええやん 知りたかったのはまさにこれです。 ありがとうございました。
534 名前:デフォルトの名無しさん [2005/07/06(水) 17:37:37 ] SICPが名著だと言われるゆえんを実感しました。
535 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 18:22:40 ] 油煙
536 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 18:25:04 ] SICPって何ですか?
537 名前:536 mailto:sage [2005/07/06(水) 18:26:01 ] って >>6 に書いてあったですね スマン
538 名前:デフォルトの名無しさん [2005/07/07(木) 20:09:49 ] いや、普通わからんて Structure And Interpretation Of Computer Programs すとらくちゃーあんどいんたーぷりてーしょんおぶこんぴゅーたぷろぐらむす コンピュータープログラムの構造と解釈 略してSICPという。 え? SAIOCPじゃないの? AとOはどこいったよ? なあ? 普通わかんねーよなあ ところで SICPって何て読むか知ってるか? 俺は知らないが しくぷとか発音すると馬鹿にされそうで 恐い
539 名前:デフォルトの名無しさん mailto:sage [2005/07/07(木) 20:17:20 ] ここは Lisp/Scheme スレだから SICP で十分通じる。 俺の脳内ではシックピーって読んでるよ。
540 名前:デフォルトの名無しさん [2005/07/07(木) 20:19:36 ] お前の脳内の事なんか聞いてない
541 名前:デフォルトの名無しさん [2005/07/07(木) 20:22:23 ] あ、ごめん 間違えて書き込むボタン押しちゃったよ こういうのは本来書き込むべき内容ではなかったが、 名無しだからいいやと思ってしまうな 匿名って恐いな 2chにいるとどんどんクズ人間になっていく気がする おれのこと軽蔑した? 悪かったよごめんな
542 名前:デフォルトの名無しさん mailto:sage [2005/07/07(木) 20:49:05 ] 接続詞は頭文字に含めないことくらい普通は知ってる
543 名前:デフォルトの名無しさん [2005/07/07(木) 20:50:13 ] >>541 ドンマイ、しかし、貢献するべし
544 名前:デフォルトの名無しさん mailto:sage [2005/07/07(木) 20:59:23 ] さて、そろそろ LISP の話 キボンヌ
545 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 13:25:12 ] >>542 前置詞もな あと冠詞 他に何かあったっけ? SICPよりも LISP の方がわかりにくい。 LISt Processor
546 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 14:30:34 ] LITHP (LITHtth Prothethor) John Unger Zussman が冗談で作った架空言語。 1982年Infoworldが出した「あまりよく知られていない言語」という書籍の面白言語リストに掲載され、 後にUsenetに投稿された。この架空言語の本質は、「もしLisperのキーボードに"S"が無かった」という発想である
547 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 14:34:42 ] S式はTH式になるのか? まあ算盤も広い意味では計算機だがな
548 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 23:38:15 ] すいません、質問なのですが、 (p'((1)2 3)) とすると 1 2 3 と表示する、括弧を取り除いて表示するような 関数pはどのように定義すればよいのでしょう?
549 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 23:38:45 ] ↑は(1 2 3)と表示する、の間違いでした。
550 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 23:46:19 ] >>548 (defun p (x) (if (listp x) (mapcan #'p x) (list x)))
551 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 23:54:24 ] >>550 ありがとうございます! mapcanと#の意味がわからないんですけど これはどういうことですか?
552 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 23:58:27 ] >>551 Common Lisp 勉強汁
553 名前:デフォルトの名無しさん mailto:sage [2005/07/08(金) 23:59:42 ] >>551 mapcanはmapcarと同じ動作をした後に各館数の返り血をappendで連結した物を返す関数。 #`はそのシンボルを関数として扱うという意味。
554 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 00:04:19 ] >>552-553 よくわかりました。 本当にありがとうございました。
555 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 00:06:49 ] >>553 重箱の隅ですまんが append ではなく nconc、#` ではなく #' だね。
556 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 02:43:36 ] 素人質問への解答乙。 つか、明らかに荒らしだよなこいつの質問は。
557 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 02:44:24 ] 基本的な関数のみで書いた、初心者向け版。 (defun p (x) (if (null x) '() (if (consp (car x)) (append (p (car x)) (p (cdr x))) (cons (car x) (p (cdr x))))))
558 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 03:01:55 ] Scheme には mapcan が無いとお嘆きの貴兄に、Scheme 版。 (define (p x) (if (list? x) (apply append (map p x)) (list x)))
559 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 03:49:56 ] nconc や append! を使う自信が無くて、つい append を使ってしまう自分。
560 名前:デフォルトの名無しさん [2005/07/09(土) 09:51:51 ] (defun p (x) (cond ((null x) '()) ((consp x) (nconc (p (car x)) (p (cdr x)))) (t (cons x '())))) (p '((x . y) (x)))
561 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 16:49:29 ] >>559 静的関数型言語方面じゃ型推論と同じなノリで、 破壊しても問題ないと推論される場合には破壊的にやっちゃうようなコードを吐かせよう、 みたいなことやってるみたいね。 ttp://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap9.html
562 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 19:21:50 ] >>548 うまいこと宿題やってもらえて良かったね。
563 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 21:46:39 ] 最近に処理系では破壊的な方が速いとは限らない みたいなことがANSI Common Lisp(P. Graham)に書いてあったんだけど、そんなもんなのかね。 どうしたらそうなるのか見当もつかないんだが。
564 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 22:03:44 ] gcがめちゃくちゃ速いから?
565 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 22:15:14 ] Write Barrier のコストとか。
566 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 00:09:20 ] copy on write とか?
567 名前:デフォルトの名無しさん [2005/07/10(日) 00:14:17 ] ttp://www.ai.mit.edu/projects/cl-http/dist/からcl-http-70-190a.tar.gz落として cmuclで動かそうとしたんだけどパッチすらあたらなかった。 うまく動作してる人いない?
568 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 02:21:43 ] >>561 ああっ、それいいなあ。 LISP と関数型言語の差って、何でも自分でいじれるオフロード車と、外装内 装に便利なものが作り込まれたタウンカーの差みたいなものかな。
569 名前:デフォルトの名無しさん [2005/07/11(月) 22:48:53 ] 総称関数モデルがメッセージ駆動モデルよりも強力だといえるのは何故? メリットとかデメリットとか教えて欲しい。
570 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 23:08:22 ] >>569 メッセージ駆動モデルって何?
571 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 00:21:25 ] >>570 メソッドはオブジェクトに属していて、オブジェクトにメッセージを送ることでメソッドが活性化される。 メソッドはデータと一緒に継承される。 SmalltalkとかJavaとかはメッセージ駆動モデルなんだって。
572 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 00:29:57 ] それって総称関数のサブセットじゃないか
573 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 02:54:29 ] Lisp 関係の古典がオンラインで読めるようになったので一応アドレス貼っておきますね。 John McCarthy, Paul W. Abrahams, Daniel J. Edwards, Timothy P. Hart and Michael I. Levin. LISP 1.5 Programmer’s Manual. The M.I.T. Press, 1962, second edition. community.computerhistory.org/scc/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf Berkeley and Bobrow, editors. The Programming Language LISP: Its Operation and Applications. Information International, Inc., March 1964 and The MIT Press, April 1966. community.computerhistory.org/scc/projects/LISP/book/III_LispBook_Apr66.pdf
574 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 03:50:45 ] >>571 そういう話は無益だから止めれ Java にメッセージ式は無い Smalltalk のメソッドはクラスに属している(クラスもオブジェクトだけど)
575 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 09:17:12 ] Rubyyyyyyyyyyyyyyyyyyyyyyyy
576 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 17:19:47 ] とりあえず総称関数だとマルチメソッドが考えやすい。レシーバーだけでなく、複数の引数のクラスで処理を分けたいときに便利。 その分、メソッドが特定のクラス(やオブジェクト)に属さないのでオブジェクト指向モデリングとやや相性が悪い。 総称関数の方ができることが多い(いや、究極的にはできることは同じだけどやり易さとして)けど、オブジェクト指向とはちょっと考え方が違う感じ。メッセージモデルの方がオブジェクト指向らしい。 もっと計算理論的な話は別の人に任す。
577 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 21:51:56 ] 複数引数の型を見て処理を割り振る話(メソッド・ディスパッチだっけ?)について。 多くのOO言語では、静的な解決しかできない。 総称関数ベースなら、呼び出された時の型を見て動的に処理を割り振ることができる。 これがメリット?
578 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 22:15:42 ] >>577 マルチディスパッチと動的ディスパッチは一応別の問題だよね。 Smalltalkなんかはシングルの動的ディスパッチじゃないかな。 静的なマルチディスパッチの例としてはC++の関数や演算子ね。
579 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 22:20:22 ] えぇ〜とLispのは、具体的なメソッド選択を明示的に書く仕組みだったと思います。(実使用体験0、80年代のbit記事受け売り) ってな話だと、>>578 とは違うんじゃないかなぁ〜。
580 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 22:39:20 ] >>577 >多くのOO言語では、静的な解決しかできない。 んな事は無い
581 名前:577 mailto:sage [2005/07/12(火) 22:42:26 ] >>580 そのとおり。 でも、引数を親クラスにキャストしてメソッド呼出したら、、、
582 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 22:53:23 ] 何でキャストの話が出て来るんだよ OO のモデルなんか趣味の世界だから、自分で使って勝手に判断すれば良い
583 名前:577 mailto:sage [2005/07/13(水) 00:00:29 ] なんだぁ?ヴァカか。
584 名前:デフォルトの名無しさん mailto:sage [2005/07/13(水) 01:03:28 ] では、そろそろ LISP の話に戻りましょうか
585 名前:デフォルトの名無しさん mailto:sage [2005/07/13(水) 02:14:15 ] まとめると 総称関数だといくつかのクラスにまたがった複数引数をとるメソッドがかける ってことか
586 名前:デフォルトの名無しさん mailto:sage [2005/07/14(木) 15:03:45 ] SICPの5.4 The Explicit-Control Evaluatorで、 > Our Scheme evaluator register machine includes a stack and > seven registers: exp, env, val, continue, proc, argl, and unev. とあるのですが、unevという名前の意味や由来は何なのでしょうか? 他のものは一目瞭然なのですが、unevだけ全く見当がつきません。
587 名前:デフォルトの名無しさん mailto:sage [2005/07/14(木) 15:09:51 ] >>586 unevaluated (未評価)かな?
588 名前:586 mailto:sage [2005/07/14(木) 19:58:40 ] >>587 なるほど! 確かに「後で評価する式を格納しておく」という使い方をされてますから、 それで正解だと思います。ありがとうございました。 ああすっきりした! 今日は気持ちよく眠れる!
589 名前:デフォルトの名無しさん [2005/07/22(金) 14:37:51 ] xn(n ∈ N)は,次のように再帰的に定義することができる. xn = xm×xm (n = 2m,m >= 1) = x×xm×xm (n = 2m+1,m >= 0) = 1 (n = 0) これを利用して,xnを計算する2引数関数pow2を定義せよ.なお,再帰呼び出しの回数をできるだけ減らすようにすること. これ教えてもらえませんでしょうか… 解答例をお願いします。。。
590 名前:589 [2005/07/22(金) 14:41:15 ] あぁ、書き忘れ。schemeです。
591 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 15:03:50 ] 夏休みの宿題くらい自分でやれ
592 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 15:27:50 ] 「できるだけ」ってのがひっかかるな。
593 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 15:39:49 ] どうしてもループに直せないおバカ救済用じゃね?
594 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 15:55:59 ] Lispもschemeもうぜえええええええええ
595 名前:589 [2005/07/22(金) 16:02:10 ] 出来ないからこうして書いてるんです( ´,_ゝ`)
596 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 16:14:52 ] 出来ないなら教官に質問しにいくとかすれば? 出来ないことを色々考えて出来るようになるのが学生の仕事だろ? ロクに考えもせずに答教えろとか言う奴は単位なぞ落としてしまえ。
597 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 16:36:44 ] 最近の小学校はScheme教えてるのか。すごいな。
598 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 18:16:05 ] ※しょうがくせいのみんなへ ・なつやすみのしゅくだいは、じぶんでやりましょう。
599 名前:?デフォルトの名無しさん mailto:sage [2005/07/22(金) 22:03:21 ] Schemeの問題で >再帰呼び出しの回数をできるだけ減らすようにすること ってのはどんなんだろうね? 再帰をなるべく末尾再帰にしろってんならいいんだけど。
600 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 23:29:41 ] x は関数または演算子なんだよね?x×(xm×xm)って、演算子と整数の 積なの?意味がわからない。
601 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 23:43:50 ] 頭悪いのを披露するためだけにわざわざ横から出てきてごくろうさん。
602 名前:600 mailto:sage [2005/07/22(金) 23:45:57 ] あ、問題を読み間違えていた。
603 名前:ビッケ ◆Jyl0Z1ahKc mailto:sage [2005/07/22(金) 23:52:54 ] xnなどと書かれているのはベキ乗 x^n のことでしょう。 「再帰呼び出しの回数」については、設問中のベキ乗の定義を見ると 再帰呼び出しのネスティングの深さのことを言ってるのかも知れませんね。 その授業(?)でそういうことを扱った直後の演習問題とか。 「できるだけ」なんていわれても困るけど、設問中の定義に従って ネスティングの深さがO(log n)となる定義を書けばOKということなのかも。
604 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:02:33 ] ちゃんと自分の頭で噛み砕いて質問すれば親切な香具師は答えてくれる かもしれんが、ここまで露骨に「宿題やって」だと誰も答えてくれんわな。
605 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:12:28 ] これ、ループに直せるの?定義が再帰的だから、どうしてもループには出来ないや。 末尾再帰も無理っぽい。 結局、let (let*) で途中経過をまとめるぐらいしかできないよ。こまった。
606 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:19:22 ] これ定義どおり実装するなら幼稚園児向けの問題で面白くもなんともないじゃん。 おまいら小学生ならもっと頭を使おうぜ。w
607 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:19:34 ] (define (pow2 x n) (let loop ((x x) (n n) (r 1)) (if (= n 0) r (loop (* x x) (quotient n 2) (if (even? n) r (* r x))))))
608 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:33:24 ] >>607 きれいだけど、定義から離れすぎてない? 漏れの頭では、>>589 の定義からは、これを自明には導き出せない…。
609 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:47:05 ] >>607 が >>589 の定義と同値かどうかは興味深い問題だね。 "1" が "×" の単位元でない場合とか "×" が可換でない 場合とかを考えるとちゃんとした証明が必要かも。
610 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 01:58:59 ] (define (pow2 x n) (apply * (vector->list (make-vector n x))))
611 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 02:10:26 ] >>608 >>589 をそのまま実装すると (define (pow2 x n) (if (= n 0) 1 (let ((x1 (pow2 x (quotient n 2)))) (* x1 x1 (if (even? n) 1 x))))) x^n * x^n = (x * x)^n だから (define (pow2 x n) (if (= n 0) 1 (* (pow2 (* x x) (quotient n 2)) (if (even? n) 1 x)))) 末尾再帰に変換して >>607
612 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 02:30:33 ] >>611 ありがとう。おかげで疑問点がはっきりしてきました。 x^n * x^n = (x * x)^n って、使っていいの? 我々は pow2 が累乗を返す関数だと知っているから、この変形は自然に見えるけど、 この問題で使っていいのは、あくまで pow2(x, 2n) = pow2(x, n) * pow2(x, n) pow2(x, 2n + 1) = x * pow2(x, n) * pow2(x, n) pow2(x, 0) = 1 の3式だけではないんだろうか?
613 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 02:53:57 ] なるほど、確かに pow2(x * x, n) = pow2(x, n) * pow2(x, n) は自明ではないな。
614 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 03:24:59 ] (define pow2 expt)
615 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 03:43:39 ] >>612-613 pow2(x, 0) * pow2(x, 0) = pow2(x * x, 0) = 1 pow2(x, n) * pow2(x, n) = pow2(x * x, n) とすると 定義より pow2(x, n + 1) = x * pow2(x, n) (これも証明する?) なので pow2(x, n + 1) * pow2(x, n + 1) = x * pow2(x, n) * x * pow2(x, n) = (x * x) * (pow2(x, n) * pow2(x, n)) = (x * x) * pow2(x * x, n) = pow2(x * x, n + 1) 以上から数学的帰納法により pow2(x, n) * pow2(x, n) = pow2(x * x, n)
616 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 05:11:48 ] >>615 数学的帰納法を使ったら pow2 の一般項 =x^n だって証明できてしまうと思われ。 そもそも関数の再帰的定義とは数学的帰納法を機械にやらせることなのに、 それを人間がやってしまったら本末転倒ではないかと。
617 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 06:39:58 ] ん? 元々 x^n を求める pow2(x, n) を定義せよって話でしょ。 x^2n = x^n * x^n x^(2n+1) = x * x^n * x^n x^0 = 1 となる性質を使えって条件があるだけで。
618 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 10:34:49 ] 求める関数を pow2(x,n), s(x,n)=log_x pow2(x,n) とおくと、pow2 漸化式は次のようになる。 s(0,x)=0 s(2n,x)=2*s(n,x) s(2n+1,x)=2*s(n,x)+1 ここまで見ると何となく s(n,x)=n になりそうな事が見えて来るが、 帰納法を使わず直観的に考えてみる。 s(n,x)の",x"を以後省略することとし、 nの2進表記を b_n...b_1b_0 とすると s(b_n...b_1b_0) =2*s(b_n...b_1)+b_0 =4*s(b_n...b_2)+2*b_1+b_0 ... =2^n*b_n+...+2*b_1+b_0 すなわち s(n)=n となる。 よって pow2(x,n)=x^n である。 故に>>614
619 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 19:52:58 ] でもってexptを高速化する手法の一つが今回の問題だったんでないかい?
620 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 20:17:31 ] ヒント:exptは浮動小数でも(略)
621 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 21:58:13 ] R5RS には (expt EXACT INTEGER) => EXACT とは書いてないから (define (expt x n) (exp (* (log x) n))) な実装もアリ。 だから処理系に依存せずに EXACT ^ INTEGER => EXACT が欲しければ 自前で書くしかない。 Common Lisp だと (expt RATIONAL INTEGER) => RATIONAL が保証 されてるのに……
622 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 08:43:33 ] >>621 ふが〜 おれ (expt 2 128) とかがEXACT INTEGERで正確に得られることを期待してコード書いてたけど、これ処理系依存になっちまうのか....いたいぜ。
623 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 08:53:40 ] >>620 意味不明。(略)が(おれは無知です)の意味ならどうでもいいけど。
624 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 09:04:10 ] expt は "Finally, the procedures listed below will always return an exact integer result provided all their arguments are exact integers and the mathematically expected result is representable as an exact integer within the implementation:" の中にある。
625 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 10:30:53 ] >>624 THX!
626 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 17:31:11 ] エキスパートシステムで、たとえば「stop」と入力した場合、 強制終了させるにはどうしたらいいんですか?
627 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 17:32:57 ] 「stop」と入力されたときに強制終了すれば良いと思う。
628 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 17:37:21 ] >>627 強制終了の仕方を教えてください
629 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 18:03:19 ] >>628 期待した答えが返って来ないときは、質問のしかたが 間違ってる可能性が高いよ。 開発者なら、どういう言語のどういう処理系を使っていて、 どういう風に大域脱出したいのかを説明しないと。 けど、その前に近くにいる人に聞きなさい。それができない なら電源をいきなり切ってボスに辞表を叩きつければ、仕事を 強制終了できるよ。
630 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 20:12:54 ] 人生を強s(ry
631 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 20:15:08 ] 人生を強すぎる精神力で乗り切る。
632 名前:デフォルトの名無しさん [2005/07/26(火) 23:14:30 ] >>623 exptは浮動小数でも動くから、pow2がexptを高速化するという命題は 常に成り立たないということだよカス。
633 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 01:54:37 ] ところでpow2って掛け算の回数最小になるんだろうか? 証明できるor反例ある?
634 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 02:15:48 ] 3つ以上の項を一度に乗算する命令でも想定しない限りは自明だろう。 それくらい瞬間的にわからないというのはちょっとヤバイのでは。 pow2(x, n)=x^nについて考える。末端リーフがn個の二分木を考えてみろ。 二分木で高さが最小になるのはなるべく均等な木のときであることはわかるだろう。 その二分木の高さイコール乗算の回数だ。
635 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 02:42:10 ] ごめん、大嘘でした。 >>634 はnが奇数のときは2を掛けるから偶数のときで乗算の数が違う ということを見落としてた。 (^ x 9) = (* x (let ((y (^ x 4))) (* y y))) => 6回 (^ x 4) = (let ((y (^ x 2))) (* y y))) => 4回 (^ x 2) = (let ((y (^ x 1))) (* y y))) => 3回 (^ x 1) = (* x (let ((y (^ x 0))) (* y y))) = x ;; ちょっと省略 => 2回 (^ x 7) = (* x (let ((y (^ x 3))) (* y y))) => 6回 (^ x 3) = (* x (let ((y (^ x 1))) (* y y))) => 4回 (^ x 1) = x => 2回
636 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 04:38:27 ] >>633 乗算回数最小はこれでどうだろう? 最速かどうかは知らない。 (define (pow2 x n) (define (pow2-sub l m r) (if (= m 0) r (let loop ((l l)) (if (> (caar l) m) (loop (cdr l)) (pow2-sub (cdr l) (- m (caar l)) (* (cdar l) r)))))) (if (= n 0) 1 (let loop ((m 1) (two^prevm 1) (two^m 2) (r x) (l (list (cons 1 x)))) (if (<= two^m n) (let ((rr (* r r))) (loop (+ m 1) two^m (+ two^m two^m) rr (cons (cons two^m rr) l))) (pow2-sub l (- n two^prevm) r)))))
637 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 04:45:26 ] 回数はこんな感じ。左から指数n、r=3^n、(expt 3 n)と比較しての検証、乗算の回数。 n=0 r=1 [OK] *-count=0 n=1 r=3 [OK] *-count=0 n=2 r=9 [OK] *-count=1 n=3 r=27 [OK] *-count=2 n=4 r=81 [OK] *-count=2 n=5 r=243 [OK] *-count=3 n=6 r=729 [OK] *-count=3 n=7 r=2187 [OK] *-count=4 n=8 r=6561 [OK] *-count=3 n=9 r=19683 [OK] *-count=4 n=10 r=59049 [OK] *-count=4 n=11 r=177147 [OK] *-count=5 n=12 r=531441 [OK] *-count=4 n=13 r=1594323 [OK] *-count=5 n=14 r=4782969 [OK] *-count=5 n=15 r=14348907 [OK] *-count=6 n=16 r=43046721 [OK] *-count=4 n=17 r=129140163 [OK] *-count=5 n=18 r=387420489 [OK] *-count=5 n=19 r=1162261467 [OK] *-count=6 n=20 r=3486784401 [OK] *-count=5
638 名前:デフォルトの名無しさん [2005/07/27(水) 13:21:00 ] いきなり横レスですみません、超初心者です。こことSICPのスレは とても勉強になるので感謝してます。上のアイデアというか原理は たとえば 3^20 = (3^4)^5 = ((3^2)^2)^(2*2+1) で5回って意味でしょうか? ……うぅぅ凄すぎて式が追えないorz
639 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 20:58:21 ] 順番が前後するが 3^20=3^16*3^4 ... 1回 3^16=3^(2^4)=(((3^2)^2)^2)^2 ... 4回 3^4は3^16を求める途中で得られているので0回 合計5回
640 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 23:36:31 ] s/順番が前後するが/話が前後するが/
641 名前:デフォルトの名無しさん mailto:sage [2005/07/28(木) 00:25:58 ] あほ
642 名前:デフォルトの名無しさん mailto:sage [2005/07/28(木) 22:57:26 ] >>632 最初からそう書けよ。 相手する価値もないヤシだってすぐわかるからさ。
643 名前:638 [2005/07/29(金) 04:53:54 ] >>639 レスありがとうございます。やっと SICP の1.2.4節に辿り着きました mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.4 後半の改善策が >>589 と同じ例題で、 ;nが偶数なら b^n = (b^(n/2))^2 ;nが奇数なら b^n = b*b^(n-1) 解答も >>607 と似てました。これを使った乗算回数は、たとえば 3^20 = (3^10)^2 = ((3^5)^2)^2 = ((3*3^4)^2)^2 = ((3*((3^2)^2))^2)^2 で理屈上は>>636 と同じ5回(でも実は末尾で余計に1掛けたりとかで、少し多そう)。 オーダーとしてはどちらも log2(n) で、>>634 の話が実は正しいような気がしました Orders of Growth を理解するための頭の体操とはいえ、疲れた… まだ木構造リストの演算をきちんと勉強してないので、勘違いしてたらすみません
644 名前:デフォルトの名無しさん [2005/07/29(金) 23:03:59 ] age
645 名前:デフォルトの名無しさん [2005/08/08(月) 17:23:07 ] a b c d dd e f g h i j k というインデント付きのテキストから (a b (c (d (dd) e) f g (h (i)) j) k) というリストを得たいのですが、 どうやったらうまく書けるかいまいちよくわかりません。 再帰を使えばよさそうというのはわかるんですが。 スタックみたいなバッファが必要でしょうか? ちなみにテキストデータの仕様は 半角2文字インデントで1階層を表現して、 ddみたいな数階層上のインデントがあっても直前の階層の1つ上とみなす。 a, b, c ・・・はシンボルです。
646 名前:デフォルトの名無しさん [2005/08/08(月) 17:35:29 ] 入力の話を簡単にするために、 ((a 0) (b 0) (c 2) (d 4) (dd 12) (e 4) (f 2) (g 2) (h 4) (i 6) (j 2) (k 0)) という(シンボル インデント文字数)という組のリストから (a b (c (d (dd) e) f g (h (i)) j) k) という形に直すにはどうしたらいい? ということでお願いします。 逆の変換は簡単にできそうなんですが・・・。
647 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 18:28:54 ] どっかの宿題?
648 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 18:34:19 ] いいえ、思いつきです。。 ちなみに25過ぎのおっさんですよ。。
649 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 18:46:54 ] つーか久しぶりにSchemeやってんだけど 頭固くなってるというか、頭悪くなってる。 仮にeまでだとして、 スタックで持ちまわって ((a)) ↓ ((b a)) ;; 同一インデントはそのままスタック先頭にcons ↓ ((c) (b a)) ↓ ((d) (c) (b a)) ↓ ((dd) (d) (c) (b a)) ↓ ((d (dd) e) (c) (b a)) ((c (d (dd) e)) (b a)) ((a b (c (d (dd) e)))) => (a b (c (d (dd) e))) みたいな感じで並べ替えればいいのはなんとなくわかるんだけどね。 肝心のコード思いつかない。
650 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 20:39:31 ] 汚く、token がchar の、indent(space)-num conscious な gauche 版ならできた。 (define (port->sp/char/nls iport) (reverse (fold (lambda (x y) (cond ((eq? x #\newline) (cons '() y)) ((null? y) `((,x))) (else (cons `(,@(car y) ,x) (cdr y))))) '() (port->list read-char iport)))) (define (proc arg) (let lp ((rest arg) (temp '()) (result '())) (if (null? rest) (reverse (if (null? temp) result `(,(proc temp) ,@result))) (let ((node (car rest))) (case (length node) ((0) (if (null? temp) (lp (cdr rest) '() result) (lp (cdr rest) '() `(,(proc (reverse temp)) ,@result)))) ((1) (if (null? temp) (lp (cdr rest) '() `(,(car node) ,@result)) (lp (cdr rest) '() `(,(car node) ,(proc (reverse (cons (cdr node) temp))) ,@result)))) (else (lp (cdr rest) `(,(cdr node) ,@temp) result)))))))
651 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 20:40:04 ] (proc (port->sp/char/nls (open-input-string "a b c d dd e f g h i j k"))) => (#\a #\b (#\c (#\d (((((#\d))))) #\e) #\f #\g (#\h (#\i)) #\j) #\k)
652 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 21:04:45 ] むっ! Pythonのトランスレータを書こうとしているな。
653 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 21:07:47 ] > ((dd) (d) (c) (b a)) > ↓ > ((d (dd) e) (c) (b a)) ここがよく分からない.eを新たにプッシュするときに,どうしてdはeと同じ リストに含めて,ddは1つネストしたリストに入っているの? もっと言えば, (c)や(a b)はd,ddと全く別の扱いを受ける必然性もないように見える. 要するに,リストのネストの深さを保存してないよ,ってこと.
654 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 21:59:58 ] a b c d dd ee e f g h i j k とかなってたらeeはどうするのか? ということを考えると >ddみたいな数階層上のインデントがあっても直前の階層の1つ上とみなす。 はよろしくないんじゃないかな。それとも構文エラー?
655 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 22:16:21 ] >>653 インデントの情報も付加して説明すると、 (((a) 0)) ;; インデント0の組 ↓ (((b a) 0)) ;; 同一インデントはそのままスタック先頭にcons ↓ (((c) 2) ((b a) 0)) ;; インデント2>0なので新規にスタック追加 ↓ (((d) 4) ((c) 2) ((b a) 0)) ;; インデント4>2なので新規にスタック追加 ↓ (((dd) 12) ((d) 4) ((c) 2) ((b a) 0)) ;; インデント12>4なので新規にスタック追加 ここで(e 4)がくると(d 4)までスタックを撒き戻すという意味です。 撒き戻すついでにreverseして整える。 ↓ (((d (dd) e) 4) ((c) 2) ((b a) 0)) さらにeが終端なので連鎖して撒き戻し&reverseが発生する (((c (d (dd) e)) 2) ((b a) 0)) ↓ (((a b (c (d (dd) e))) 0)) => (a b (c (d (dd) e))) それで結果がこうなればいいんじゃないか、ということです。 でも 2 -> 12 -> 4とかのパターンだと 12を4とみなすとか例外作らないとだめかなあ。 >>650 早速ありがとうございます。 コード研究してみます。
656 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 22:18:33 ] >>654 上にも書いたけど、それさっき気づきました。 やっぱ インデント構造はそのまま保持して、 後から遊びを修正するようにした方が利口かもしれない。
657 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 22:37:15 ] あー、>>654 の場合は構文エラーというのも悪くないですね。 「ぶら下がる親があいまい」とかで。 様式的に654の様なケースはありえなさそうだし。
658 名前:デフォルトの名無しさん [2005/08/10(水) 22:19:54 ] >>650 氏のコードを自分の想定した入力形式に書き換えてみました。 (define (proc arg) (let loop ((rest arg) (temp '()) (result '())) (if (null? rest) (reverse (if (null? temp) result `(,(proc (reverse temp)) ,@result))) (let ((node (car rest))) (if (< (car node) 2) (loop (cdr rest) '() (if (null? temp) `(,(cadr node) ,@result) `(,(cadr node) ,(proc (reverse temp)) ,@result))) (loop (cdr rest) `(,(cons (- (car node) 2) (cdr node)) ,@temp) result)))))) (proc '((0 a) (0 b) (2 c) (4 d) (12 dd) (4 e) (2 f) (2 g) (4 h) (6 i) (2 j) (0 k) (2 m))) =>(a b (c (d ((((dd)))) e) f g (h (i)) j) k (m)) (< (car node) 2)の箇所はインデント幅が奇数だったら小さい側へ切捨てる処置です。
659 名前:デフォルトの名無しさん [2005/08/10(水) 22:28:19 ] それと入力を作って、 (define (read-indent-text) (define (space-count str) (let ((len (string-length str))) (let loop ((i 0)) (if (and (< i len) (char=? (string-ref str i) #\space)) (loop (+ i 1)) i)))) (let loop ((str (read-line)) (r '())) (if (eof-object? str) (reverse r) (let ((pos (space-count str))) (loop (read-line) (cons (list pos (substring str pos)) r)))))) ----ind.txt---- root1 abc def gef aaa bbb ccc root2 aaa ----ind.txt---- (proc (with-input-from-file "ind.txt" (read-indent-text))) =>("root1" ("abc" "def" ("gef") "aaa" ("bbb") "ccc") "root2" ("aaa")) こんな感じになりました。
660 名前:デフォルトの名無しさん [2005/08/10(水) 22:48:55 ] ついでに逆変換も作りました。(これは1分でできた。) (define (ind-pp s . indent) (define (spaces n) (if (zero? n) #t (begin (write-char #\space) (spaces (- n 1))))) (set! indent (if (pair? indent) (car indent) 0)) (let loop ((x s)) (if (pair? x) (if (pair? (car x)) (begin (indent-pp (car x) (+ indent 2)) (loop (cdr x))) (begin (spaces indent) (display (car x)) (newline) (loop (cdr x)))) #t))) (ind-pp '("root1" ("abc" "def" ("gef") "aaa" ("bbb") "ccc") "root2" ("aaa"))) root1 abc def gef aaa bbb ccc root2 aaa =>#t 結構手間掛かりましたね。。
661 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 23:16:41 ] fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy のscheme-modeをgaucheのgoshをインタプリタとして使ってみたいのですが、 そういう使い方してる人います? できれば教えて下さい。 またこれ以外でも、xyzzyで使えるscheme-modeがあれば紹介してください。
662 名前:デフォルトの名無しさん [2005/08/10(水) 23:37:10 ] リストに入れた関数を一つの引数に次々に適用するにはどうするのがよいのでしょうか? 状況としてはユーザからの入力値をチェックすることを考えています。 例えばチェック用関数 func_a, func_b, func_c, func_d と入力値 x, y, z があり x については func_a と func_b, y については func_a と func_c, z については func_a と func_d, によるチェックを行いたいわけなんです。 そこで x の場合 (func_a, func_b) と x を引数にとってリスト ((func_a x) (func_b x)) を 返すようにしたいのですが map のような便利な関数はないのでしょうか? あるいはリストに入れた関数を一つの引数に次々に適用するよりも 適切な方法はありませんでしょうか?
663 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 00:26:44 ] (define (hoge func-list x) (map (lambda (f) (f x)) func-list)) (hoge (list (lambda (x) (+ x x)) (lambda (x) (* x x))) 10) => (20 100)
664 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 01:08:58 ] お約束キタ━━━━━━(゚∀゚)━━━━━━!!!
665 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 01:30:32 ] おおぅ、こんなところに誤爆してたのか orz
666 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 23:41:25 ] >>661 どっかでgoshの-iオプションを使うとか聞いたことがあるようなないような。
667 名前:デフォルトの名無しさん mailto:sage [2005/08/12(金) 08:36:46 ] >>645 亀だけど Gauche で書いてみた. 入力は ((シンボル . インデント数) ...) みたいな感じ. (use srfi-1) (define (iexpr->list xs) (define (f xs level rs) (if (null? xs) (values xs (reverse! rs)) (receive (sym l) (car+cdr (car xs)) (cond ((= l level) (f (cdr xs) l (cons sym rs))) ((< l level) (values xs (reverse! rs))) (else (receive (rest res) (f xs l '()) (f rest level (cons res rs)))))))) (values-ref (f xs 0 '()) 1))
668 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 23:19:44 ] >>667 からvalues関係を取っ払ってみた。 そんだけ。 (define (iexpr->list xs) (define (f xs level rs) (if (null? xs) (cons xs (reverse! rs)) (let ((sym (caar xs)) (l (cdar xs))) (cond ((= l level) (f (cdr xs) l (cons sym rs))) ((< l level) (cons xs (reverse! rs))) (else (let ((x (f xs l '()))) (f (car x) level (cons (cdr x) rs)))))))) (cdr (f xs 0 '()))) >(iexpr->list '((a . 0)(b . 1)(c . 4)(d . 5)(d . 2)(e . 3)(f . 0))) =>(a (b (c (d)) (d (e))) f) なかなか面白いですな。 これ使って何かに繋がらないかな。 すぐ思いつくのはGUIコントロールの階層表現ぐらいだけど。
669 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 22:40:48 ] Schemeのコンパイラなどで使うというCPSについてわかりやすく 解説してるページはありますか? コンパイラとかの中間言語としてのCPSとか、CPSへ/からの変換が 知りたいといいますか。英語でもいいです。 継続とは何ぞやとか、 普通の場合に戻ってから実行する処理をクロージャとして渡せば 一般の言語で継続渡し形式で書ける、という程度の継続渡しの 理解はしてるつもりです。
670 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 23:13:14 ] >>669 とりあえずSICP嫁。英語ならWebで読める。
671 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 23:37:09 ] SICPは読みかけの途中で止まってます。どのへんに書いてありますか?
672 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 23:44:38 ] あとは、東大のコンパイラ演習のレジュメとか ttp://www.is.s.u-tokyo.ac.jp/~vu/97/jugyo/processor/compilerresume/
673 名前:デフォルトの名無しさん [2005/08/22(月) 00:11:36 ] Scheme用のRSS解析ライブラリってないの? perlのXML::RSSみたいなの.
674 名前:デフォルトの名無しさん mailto:sage [2005/08/22(月) 00:38:14 ] SXMLとSXPATHでは足りない?
675 名前:643 [2005/08/22(月) 00:47:55 ] よりらくちんにやりたいのです.
676 名前:デフォルトの名無しさん mailto:sage [2005/08/22(月) 02:56:42 ] >>673 LISPはクローズドな開発が多いから ここで「〜ない?」系の質問しても答えはほとんど「無い」が返ってくると思っていい。 どうしても必要なら自分で書け。 そしてコミュニティに還元しろ。
677 名前:643 mailto:sage [2005/08/22(月) 09:31:13 ] >>676 なるほど! じゃあ,がんばって書くよ.
678 名前:デフォルトの名無しさん mailto:sage [2005/08/22(月) 10:58:41 ] LISPだと簡単に書けちゃうから、逆にあまり再利用を考えずに自分専用のを 作って使い捨てしちゃうってことはあるね。 >>677 がんがれ
679 名前:デフォルトの名無しさん [2005/08/30(火) 13:54:52 ] Lisp に少し興味を感じています。 あまりにも他の言語と異質な感じをうけるため、心理的な抵抗感も実はあります。 Scheme は Lisp の派生あるいは方言である、と入門サイトに記述されています。 両言語の特性の違いについて、実際にプログラムを組んでいる方の感覚とご理解から 意見を伺いたいです。Lispが優れている言語ならば、それをもとにしたSchemeを 学習する方が良いのだろうか、と悩んでいます。 経済的な理由からLinuxマシンを新規に構成するのではなく、現在使用中の Windowsマシンで Lisp/Scheme を学びたいと思っています。
680 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 19:51:41 ] >>679 CommonLispならcoLinux(ただしXP/2000限定)を入れてcmucl、 Windows単体で動かしたいならclisp使うとか。 Schemeなら日本語リソースではgauche、 とにかく速いのがいいならbiglooかな。
681 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 20:01:43 ] お勉強目的なら xyzzy でいいんじゃね? エディタとしてもよく出来てるし。
682 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 20:07:21 ] >>681 xyzzyはかなり方言だし、ちゃんとしたclispあたりのほうが良いと思う。 Scheme系ならgaucheかな。
683 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 21:34:10 ] >>680 >>681 >>682 皆様のおかげで、5つの実装・環境について特徴を知ることができました。 奥深いのですね。ありがとうございます。 調べたところ、エディタ xyzzy には熱心な愛好者が多そうですね。 Lispの言語としての魅力と関係があるように印象を受けました。 お勧めのgaucheを少し検索しました。 Kahuaというウェブアプリケーション作成の仕組みがあるとか・・ 時間をつくってお勧めを参考に Lisp/Scheme を勉強してみます。
684 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 21:52:14 ] >>683 あんまし色々言うと混乱させてしまうかもしれないけれど、 とりあえず動かしたいということだったら IDE もついてくる PLT Scheme が楽かも。 xyzzy がとっつきやすいのと同じ理由で。 一応日本語方面も外国ものとしてはそれなりだし。 でも、教科書とにらめっこして勉強するんじゃなく、 実際自分で使う小物スクリプトを色々書きながら勉強するというスタンスだったら gauche が一番向いてるのかな。 そもそもスクリプティングに使いやすいものを、という開発方針だった気がするし。 何にせよ、Scheme は善かれ悪しかれ処理系ごとの個性が強いので 色々な処理系を試してみて、一旦これ、と決めたら、 それの使い方を詳しくつっこんでみるのがいいと思う。
685 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 22:35:37 ] 結局、Schemeはスマートだけどライブラリが不足している現状があり、 それが処理系ごとの違いに繋がってるんだと思う。 Gaucheくらい充実してればSchemeも楽しい。
686 名前:デフォルトの名無しさん [2005/08/30(火) 23:14:12 ] 日本語を扱いに長けているcommon lispの処理系には何がありますか? schemeだったらgaucheで決まりなんだけど、common lispは良さそうなのが 見当たりません。
687 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 23:20:45 ] >>686 最近のclispはSJIS/JIS/EUC/Unicode自由自在だよ。 clisp.cons.org/impnotes/encoding.html
688 名前:デフォルトの名無しさん [2005/08/31(水) 00:12:43 ] Petite Chez Scheme というのを ChezEdit-NT というエディタで動作させるのも楽しそう。
689 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 13:15:57 ] スレ違いならすんませんが、Scheme勉強しようと思って、 OSX TigerにGauche 0.8.5インストールしたところリンクが通らず、 Finkでdlcompat入れろつーことらしいから(10.2だけど)、 Fink入れてみたんだけどdlcompatとかなさそうで、 ほんじゃってんで、ports入れてみて、 dlcompat落としてみたら、コンパイルできんって感じでげす...orz どげにしたらインストでけるんでがしょ?
690 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 13:35:34 ] しかるべき場所でちゃんとした言葉遣いで相談したほうが良いと思います。
691 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 14:06:18 ] port install gauche
692 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 21:30:54 ] gaucheの特徴 ・define-macroがある ・マニュアルが日本語(ライブラリも) ・ライブラリが豊富 ・Cで簡単に拡張できる。
693 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 04:52:45 ] >>686 SBCL は最近、日本語通る様になった
694 名前:686 mailto:sage [2005/09/03(土) 01:42:43 ] >>687 >>693 おまいら、ありがとうございます。 >>950 は次スレのテンプレに日本語使える処理系情報を追加しておくように。
695 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 05:56:43 ] gaucheでhttpクライアントを作ろうとしています。 このとき http-get 関数に :Accept-Encoding "gzip, compress" を 指定して圧縮されて受け取ったデータを展開するにはどうすればよいでしょうか? javaみたいにgzipのストリームがあれば便利なんですが、ストリームどころか 素のgzipのユーティリティも見当たらないようです。 知ってる方お知恵をお貸し下さい、おながいします。
696 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 16:34:33 ] とりあえず何とかしたいなら、プロセスポートを 使ってgzipを呼ぶようにすれば? rfc.mimeも使うよね。
697 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 23:19:40 ] ttp://www.rubyist.net/~matz/20050830.html#p01 Paul Grahamが(言わなきゃいいのに)本音を漏らしちゃった話。 言語デザイナーとしての限界とか、無理して作るなとか、さんざんなこと言われてる。
698 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 23:57:02 ] >>697 個人的にはPaulの意見は理解できる。つーか、Matz僻みすぎ。
699 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 00:00:15 ] やっぱLISPは完成度が高すぎるんだな。 Paul一人ごときが進化できる代物ではないと。 Guyぐらいの天才でもないと。
700 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 02:06:14 ] たしかに完成度は高いのかもしれんが、 抽象度の高いものは、漏れのような頭の悪い奴らにとっては使いこなすのが難しいわけで。 そういう意味で、Perl, Python, Rubyのような言語ってのは、脳味噌が一部不自由でもLispの パワーの片鱗に触れられるって点で意味はあると思うんだけどな。 で、より毛深くなりたくなったら、Lisp/Schemeの世界に足を踏み入れればよいのだし。 結局のところ動的言語使いはLispに始まりLispに帰るのか。
701 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 02:15:22 ] 比較的簡単な問題をちょいちょいっと手続き型で書いていく時は、LispよりPythonの方が便利だと思う。 公式ライブラリが豊富なのもこの長所を延ばしてる。 Perlはawkの改良として、歴史的意味があった。 Rubyは...えーっと...
702 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 04:10:30 ] arc は Vaperware への道をまっしぐら感が強いよなあ。 >>695 wiliki の方でも訊いてみてはどうでしょ。 >>696 みたいな感じの答えになりそうな気はするけれど、 具体的なコードも出してくれるかも知れんし。
703 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 04:53:54 ] Arc も、もう少し志を低くして (asdf-install:install 'arc) で使える便利ライブラリ、くらいにするといいんだよ。
704 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 07:30:26 ] Haskell ,Clean 等は効率的で、LISP, SCHEME は万能である。 万能とは、科学者にとって悲しむべき特性である。
705 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 11:24:03 ] とはいえLispも今までいろいろ進化してきたしな。 これで完成だとか言ってると危ないかも。
706 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 11:25:21 ] そういえば、LISPでも関数を特別視してるけど、 それをなくしたら新しい文化ができるかも。 つまり、関数呼び出しは全てfancall, applyを使う。
707 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 12:16:58 ] funcall も apply も関数ですが ていうか scheme では既に特別視してないし
708 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 13:01:47 ] じゃあ、定理証明系見たいなノリでmacroで作ったやつをmapできたりさせよう。
709 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 13:09:09 ] 他の言語なら適当な文法考えるだけでなにか 新しいものを追加した気分になれるがlispだと そんなのマクロで書けるじゃんでほとんど終わる ので圧倒的に不利なきがする
710 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 13:15:42 ] 個人的には理論的純粋さよりも実用性だな。ライブラリがあればいい。 ANSI Common Lisp + ネットワーク + 国際化 + XML + ... みたいなノリで CLtL3 を作って標準化してほしい。
711 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 18:55:28 ] LISPは記号処理は得意でも文字列操作はそれほどでもない中途半端さがない?
712 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 19:29:12 ] >>711 EmacsLispはいかがですか?(反則ぎみ) つか、欲しかったら時分でマクロなり関数なり定義してけばOK。 ソースある処理系だったら実装言語で拡張しちゃえば最強。
713 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 19:53:44 ] 一度SchemeやCommon Lisp使っちゃうと、elispでごりごり書くなんて事実上ありえん。 それならPerl使った方がマシ。
714 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 22:23:55 ] Common Lisp だとリーダマクロなんて最後の武器があるしなあ。 #/regexp/ みたいなものくらいなら片手間で実装できるし。 まあ regexp 自体は既存のライブラリ使うとしてだけど。 xml を直接埋め込むようなライブラリとかもあったよね。 あとはファーストクラスの動的マクロとかの黒魔術に手を染めるしかないかもなあ。 Graham は確かオプションで切り替えられるような機能を arc でサポートする予定だったと思ったけれど。 洒落だったら後置記法の Sexpr とか思いつくんだけどなあ。
715 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 22:36:29 ] >>714 >後置記法 括弧つきFORTHだな。w
716 名前:デフォルトの名無しさん mailto:sage [2005/09/05(月) 07:20:19 ] >>713 emacs の開発者やコード寄贈者には Scheme や Common Lisp ハッカーが ごろごろいるけど。
717 名前:デフォルトの名無しさん mailto:sage [2005/09/05(月) 23:59:51 ] (>>713 emacsは絶対けなしちゃ駄目!!(><)) ↓以下別の話題
718 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 01:47:11 ] 個人的にここがお気に入り pc8.2ch.net/test/read.cgi/tech/1114223450/
719 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 04:50:31 ] 荒れるからやめろ。 ↓以下Lispの話題
720 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 11:46:48 ] LISPって夢があっていいけど ライブラリを充実させてほしい。 どんなしょぼLISPでも使えるネットワーク系ライブラリとかよ。
721 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 14:16:24 ] Generaがナツカシス。 ああいう開発環境をいまの技術で作れば、めちゃ快適なんだろうなと夢想。
722 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 18:33:08 ] >>720 ほんとそのとおりだよ。LISPerにはライブラリ共有の概念がないのかね。
723 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 19:30:23 ] www.cliki.net/networking
724 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 21:32:59 ] 偉そうなこと言うやつはいるけど。 それ以外の日本語のコンテンツの少なさは凄いよな。
725 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 21:40:16 ] ↑偉そうなこと言うやつ
726 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 22:06:11 ] >>724 探せばそれなりにはあるよ。大学なり個人なり。 Java とかに比べれば、そりゃ少ないけど。 ↓はテンプレに入れても良いかも。 チュートリアル ttp://www.h7.dion.ne.jp/~matsu/feature/common-lisp/index.html ティップス ttp://www.geocities.co.jp/SiliconValley-Cupertino/2478/root-sect-2.html
727 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 22:31:27 ] 偉そうなこと言う奴は、確かに充実してる(多い)な
728 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 23:37:41 ] なんだ、宿題教えてもらえなかったのか
729 名前:デフォルトの名無しさん mailto:sage [2005/09/07(水) 22:26:23 ] 初心者用のコンテンツのみ充実してるな。
730 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 18:36:51 ] しかし、初心者自体は足りてないと
731 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 12:21:47 ] さっきうっかり chez のサイト踏んだら chez scheme が version 7 に上がってたんで一応貼っておきますね。 リリースノートを眺めた限りではあんまり派手な変更はなさそうですけれど。 多言語方面に対応しないのはお客さんから要望が出ないからなんだろうなあ。 www.scheme.com/csv7.0/
732 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 03:15:04 ] >>731 値段が判りませぬ。幾らなんでしょうかご存じでしょうか。サイト探してみたんですけど 見当たらなかったように思います。
733 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 04:00:26 ] >>732 フリーで機能限定版(コンパイラが無い)の Petite Chez があります。 Chez 自体の値段は私も知りませんが ACL といい勝負だという噂は聞いたことがあります。 基本的に個人相手に商売してるんじゃなさそうな気がします。
734 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [2005/09/13(火) 16:55:02 ] "On Lisp" のHTML版を置いておきますね. っ [ user.ecc.u-tokyo.ac.jp/~t50473/onlispjhtml/ ] まだTeXのマクロが残りまくりですが...
735 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 20:45:38 ] >>734 乙カレー! これで emacs-w3m で『On Lisp』が読めるよ。
736 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:01:01 ] >>733 ACLって1ライセンスいくらでしたっけ。 今ちょっとfranzのページ見てきたら載ってないのなー
737 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:02:28 ] >>736 時価とかじゃね?
738 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:08:48 ] www.franz.com/products/packages/ によれば $599〜
739 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:45:29 ] そんなに高くないのな ・・で、日本語マニュアルは付いてくるのかい?
740 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:46:51 ] >>734 すげ つーかここまでお疲れ様でした。
741 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:02:55 ] サポートいらないから、ソースネクストから1,980円で発売してほしい。
742 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:09:30 ] 同意
743 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:19:45 ] microsoftの製品より安くね?
744 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:39:37 ] 開発ツールじゃMSの製品に他のメーカは内容も値段も全く勝負にならん。
745 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:44:46 ] >>743 あっちは単言語で安いパッケージがある。
746 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:46:08 ] Microsoft Visual Common Lisp .NET 待望
747 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:59:21 ] Pythonですら.NETになったというのにおまいらときたら……
748 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 00:04:23 ] つ DotLisp sourceforge.net/projects/dotlisp/
749 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 00:24:29 ] On Lispの日本語版って出版されんの? Franzの11月セミナーのとこにそれっぽいようなことが書いてあった気がするんだが。
750 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 00:47:14 ] Microsoft で CLR の主任設計者やってる Patrick Dussud は元々 Lisp 屋だし 今年の ILC でも講演してたよ。 international-lisp-conference.org/2005/speakers.html#patrick_dussud
751 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 06:20:08 ] >>749 > さらに、今年末出版予定の、邦訳版 On Lisp (原書著者Paul Graham)の翻訳者である野田開氏もお迎えし、 > 書籍On Lispについてや翻訳の体験談をお話し頂きます。 これか。 jp.franz.com/base/aclhome_base.html
752 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 06:45:41 ] そういえば On Lisp といったら原書の方も、 再版するとか改訂するとかする暇がないとか色々噂は聞くけれど、 実際のところどうなってるんでしょう。
753 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [2005/09/14(水) 10:59:31 ] >>749 出版社の方が,原書を出した米国の出版社と交渉に当たって下さっているところです. >>752 改訂版を出そうとしている(米の)出版社がGraham氏の原稿を待っているとのこと. # 私もできれば改訂版に追従したいんですが... Graham氏は完璧主義の方で,その上お忙しいので,しばらくかかりそう,とか.
754 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 15:04:06 ] Schemeもあるでよ〜 Common Larceny requires the Common Language Infrastructure. It is known to work with the Microsoft .NET Framework implementation. www.ccs.neu.edu/home/jrm/download.html
755 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 16:57:06 ] Larceny か 音沙汰無いなと思ってたらこんなところで
756 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 19:35:50 ] 処理系依存の質問ですがここでいいですか? FreeBSD4.11でportsからインストールしたCMUCL19a traceの結果がレベル0しか出力されない (defun fac (n) (if (> n 1) (* n (fac (1- n))) 1)) (trace fac) (fac 3) 処理系の出力 0: (FAC 3) 0: FAC returned 6 6 教えてエロい人
757 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 21:29:51 ] SBCL 使えば? 日本語も使えるし。
758 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 02:19:00 ] 計算過程をずっとsingle-floatの範囲内で収めたいのですが、ACL7は積み残しが 発生する場所では気を利かせてdouble-floatで計算してくれるみたいです。 C/C++のように強い型付けをされた言語の真似をさせるにはどうしたらよいですか。 foreign-function使ってfloat同士の加算だけの関数を呼び出すのは我ながら バカらしい解決方法だと思うのですが、もっとまともな方法ありますか?
759 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 02:28:31 ] >>758 例えば (defun p (x y) (declare (single-float x y)) (the single-float (+ x y))) みたいな書き方すれば多くのコンパイラは良きになしてくれるよ。
760 名前:758 mailto:sage [2005/09/15(木) 02:39:10 ] >>759 declareとtheを使った書き方は試しているのですが、まだ期待した結果を 得られるには至ってません。記述方法の問題かも知れないのでも少しいじってみます。 ありがとうございました。
761 名前:デフォルトの名無しさん [2005/09/15(木) 06:26:15 ] .NET + Common Lisp については、こんなのもあるらしい。 weitz.de/rdnzl/ RDNZL - A .NET layer for Common Lisp
762 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 20:55:47 ] 積極的にsingle使いたい理由でもあるの? 最適化のつもりなら多分逆効果だよ
763 名前:758 mailto:sage [2005/09/15(木) 22:46:38 ] >>762 僕への質問と理解してよければ、ハードウェアのシミュレータを書こうとしてるからです。 演算器がsingleしか持ってないので途中でdoubleに行っちゃったりして実機上の計算と結果が 異なってくるとイヤかなぁ、と。 マクロとかバンバン使って勝手に俺言語でっち上げて、パイプラインの状態とか視覚的に 見れるようなところまで持って行けたら素敵なんだけども。こんなことLispでやろうとするのって おかしいですか? >>753 出版されたら買わせていただきますわ。期待して待ってます。
764 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 23:08:26 ] C でも float foo(float x, float y) { return (x + x) / y; } を foo(MAXFLOAT, 2) と呼び出した場合、途中 double で計算して オーバーフローしない処理系があるし、それも規格合致だよ。 正確にエミュレートしたいのなら自前でビット演算するしかない。
765 名前:758 mailto:sage [2005/09/15(木) 23:47:07 ] >>763 ご忠告ありがとうございます。究極的にはそうなるんでしょうね。 SystemCとかってどうなってんのかな。暇なとき見てみよっと。
766 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 23:48:59 ] >>765 SystemCは厳格にやるクラスと高速なクラス(これは=float/doubleだけど)が両方 用意されているよ。
767 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 07:20:05 ] >>764 float の演算が double に変換されてから行われるのは K&R の時代の話じゃないの? ……と思ったけどオーバーフローが絡むとアレか。未定義だか処理系定義だかか。
768 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 09:53:09 ] ダカカ。
769 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 16:07:10 ] 中村正三郎氏によるProactical Common Lispの書評(?) iiyu.asablo.jp/blog/2005/09/16/76723 サイン本、いいなー。w
770 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 16:08:13 ] >>769 typo 誤:Proactical 正:Practical
771 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 23:11:58 ] 今日のセミナー人少なかった・・・個人的にはすごく興味深い内容だったんで もっと多くの人が知ってくれればいいのにと思ったよ。 撮影していたビデオを配信する予定がないこともないらしいのでちょっと期待。 Prologって使ったことないんだけど、適用する分野を間違えなければ便利そうね。
772 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 10:16:18 ] gosh> (display 2) 2#<undef> gosh> ((car '(display display)) 2) *** ERROR: invalid application: (display 2) why? please.
773 名前:デフォルトの名無しさん [2005/09/17(土) 10:53:05 ] lispboxっての入れてみたんだけど、 デフォルトのclisp2.34が起動時にエラーが起こるので、 エラーの起こらないclisp2.35を使ってみたいです。 しかし、clispフォルダの中身をいれかえて、 lispbox-register.elを入れてやるだけでは動かないようです。 どうやったら動くか知ってる人いませんか? ちなみに、2.34のエラーは以下の通りです。上2行のWARNINGは2.35でもでるようです。 WARNING: locale: no encoding CP932, using UTF-8 WARNING: *TERMINAL-ENCODING*: no encoding CP932, using UTF-8 invalid byte sequence #xEE #x2E #x74 in CHARSET:UTF-8 conversion よろしくお願いします。
774 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:14:52 ] >>772 display っていうシンボルを 2 に apply しようとしてる. シンボルは関数でないから当然エラー. やりたいことやるには ((car `(,display ,display)) 2)
775 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:25:13 ] おまえ初心者っぽい奴にいきなりunquoteでかいてんじゃねーよ 素直にlistで書けよ
776 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:27:14 ] '(display display) == (list 'display 'display) `(,display ,display) == (list display display)
777 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:27:16 ] ↑すまん、ちょっとあたまに血が上りすぎた 俺が言いたいのはquoteとリストの区別が付いてない初心者だから 順序立てて教えないと理解しないだろってことだよ
778 名前:772 mailto:sage [2005/09/17(土) 11:49:38 ] なるほど! 自分は gosh> ('display 2) *** ERROR: invalid application: (display 2) こんなことをしているのと同じだったんですね。 774さんのようにunquoteで書くか、以下のようにして 書くかしてちゃんと関数として評価されるようにしなければ ならなかったと。 gosh> ((car (list display display)) 2) 2#<undef> おかげで unquote についても覚えることができました。 >>774-777 さん。どうもありがとうございます。 gosh> display #<subr display> gosh> `(,display) (#<subr display>)
779 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:57:35 ] LISPとSchemeの両方を使うが 頻繁に使わないって人はよく間違うよね。
780 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 15:04:42 ] 間違わねーよ 間違う奴は全く理解してないってことだろ
781 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 21:58:51 ] >>769 その文章がWebに掲載された日の午前中に 私がamazonで購入したときには残り3冊だったのに、 その10分くらい後にはもう在庫なしになっていた。 洋書売り上げランキングも、最初見たとき5000位台だったのが、 一時的に50位くらいまで上がってるのを見た。 影響力すごすぎ。
782 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 00:18:02 ] そんなに影響力あるのかあの薄らハゲ。詳しく知らないけど何者? リンク先のblog見るかぎりじゃ結構バカそうなんだが。バカを演じてるだけなのかな。
783 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 00:39:59 ] >>782 マイクロソフトの天敵みたいな人。 ちなみに元法務大臣とは別人だぞ。w ja.wikipedia.org/wiki/%E4%B8%AD%E6%9D%91%E6%AD%A3%E4%B8%89%E9%83%8E
784 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 01:34:41 ] マイクロソフトの天敵だと思っているのは本人だけだろ。
785 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 09:25:35 ] >>780 (defun (hoge huga) ...)とか間違ってやるだろ?
786 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 10:20:03 ] どこの馬鹿がやるんだろう・・・。
787 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 14:58:41 ] >>785 defunとdefineの違いがなければ間違うかもしれんが、どちらかの単語を打ち込んだ 時点で自動的に脳内モードが切り替わるのでその手の間違いは少ない。
788 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 01:03:27 ] scheme でうっかり #' を書いてることはあるなあ。 あとは #t を t とか #f や '() を nil とか。 まあ書いた瞬間に気付いてへこむわけですが。
789 名前:デフォルトの名無しさん [2005/09/19(月) 14:01:50 ] というか関数と変数で名前空間を分けることのメリットって何よ? #:とかfuncallとかめんどくさすぎる
790 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:11:08 ] 変数として使っても、呼び出しフォームで関数が取り出せるというだけかな。 CommonLisp的思考をしない限りはメリットはない。 おれもSchemeみたくスロット1つにしてしまっても良いと思う。 ところで、()をわざわざ'()とquote付けて書いてるのが多数なのは 宗教上の理由でしょうか。 ()は評価しても()だよね? ()は#tとか#fと同じ様な扱いのはずだと思うけど。 Schemeはここだけ不思議。
791 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:14:00 ] >>790 Schemeでは () は評価できない(エラー)だと思う。
792 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:16:18 ] へーエラーになるのか。 なんでだろうね。 Gaucheでも入れてみようかな。
793 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:21:50 ] >>792 評価できる形式ではないから。 Common Lispの場合は()はnilというsymbolであってspecial変数としてnilという 値を持っているから評価できるだけ。
794 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:37:10 ] エラーなんだっけ? R5RSでは未定義だったような。うるおぼえ。
795 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:41:17 ] >>794 ああ。正確には未定義だったかも。
796 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:09:52 ] やってみた。gaucheだと両方とも同じように評価される。 gosh> () () gosh> '() () R5RSをみて見たけどようわからん。見当違いなトコ見てるかも。 4.1.3 Procedure calls > Note: In many dialects of Lisp, the empty combination, > (), is a legitimate expression. In Scheme, combinations > must have at least one subexpression, so () is not a > syntactically valid expression. 4.1.2 Literal expressions > '() ===> () 識者の登場キボン
797 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:13:36 ] 思いっきり書いてるやん > so () is not a > syntactically valid expression.
798 名前:796 mailto:sage [2005/09/19(月) 15:15:09 ] orz...thx.
799 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:18:04 ] 未定義ならgoshでは()=>()ってだけじゃないの。 ちなみに Petite Chez Scheme Version 6.9c Copyright (c) 1985-2003 Cadence Research Systems > () () > '() () これもgoshと同じか。
800 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:19:49 ] Guileね guile> () ERROR: missing or extra expression ABORT: (misc-error) guile> '() () guile>
801 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:22:41 ] Guileはちゃんと(?)エラーになるな guile> () ERROR: missing or extra expression ABORT: (misc-error) guile> '() () guile>
802 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:23:12 ] あら見事にかぶった。
803 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:24:22 ] >>800 ,801 おおぅ。ちゃんとエラーになる処理系もあるんだな。 やっぱquoteせにゃならんか。
804 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 16:05:09 ] Guileってもはや独自言語仕様に向かってなかったっけ? Guileでエラーになったからと言え、これをSchemeの仕様と言ってしまっていいものか。 つーか未定義か。
805 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 20:40:25 ] まぁグィラーは特殊だから。
806 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 21:35:30 ] Guile は規格で正しいとされてないことは積極的にエラーにし、 Gaush や PLT Scheme は規格でエラーにしろとされてるものしか エラーにしないような感じ。 以前出た (define (foo) (define x 10) (define y x) y) が どう扱われるかもそうだったよね。
807 名前:デフォルトの名無しさん [2005/09/20(火) 00:21:52 ] 今、現在Schemeを勉強しているのですが 絵を簡易的なアニメーションさせることは Schemeを使って可能でしょうか? また、Schemeからリンクさせることも含めて 可能な手段をわかる人おられますか? かなり求むです。
808 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 01:10:18 ] gauche-glとかオススメ
809 名前:デフォルトの名無しさん [2005/09/20(火) 11:12:11 ] >>808 かなり感謝です。実際に求めていたものがありました。 しかもSICPにも図形言語として紹介もしていたようですね。 みなさんかなりの達人では?? 私もこれからレベルアップします!!
810 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 20:56:22 ] >>806 参考になるです。
811 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 01:25:04 ] >>773 | WARNING: locale: no encoding CP932, using UTF-8 | WARNING: *TERMINAL-ENCODING*: no encoding CP932, using UTF-8 公式配布の CLISP では CP932/Shift-JIS エンコーディングが使えません. GNU Libiconv をリンクして作成したバイナリを使えば大丈夫です. 私の手元では Windows 2000/XP + Emacs22 CVS + Slime CVS + GNU CLISP 2.35 で↓のように日本語シンボルが使えています.あとはパス名に日本語が使えない 問題が解決できればバイナリを公開してもいいですが. ; SLIME 2005-07-29 CL-USER> (length "あいう") 3 CL-USER> (defun 2倍 (引数) (* 引数 2)) 2倍 CL-USER> (2倍 2/3) 4/3
812 名前:デフォルトの名無しさん [2005/09/21(水) 05:16:45 ] 昔パソコン用のMuLispで書いたシステムの移植を考えております。 問題は、auto-quoteとでもいいますか、アトムを評価するとこのシステムは、 アトムの名前を返すようなシステムになっておりました。 これと同じ仕様になっているLispあるいはSchemeの処理系あるいは、 これを簡単に実現できるような(つまりMuLisp互換システム)システムを ご存知の方教えていただけませんでしょうか。
813 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 09:51:22 ] 既存の処理系の上でアトムの名前を返すevalをつくればいいような気がするけど・・・。
814 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 13:34:06 ] evalするかわりにatom->nameみたいなの用意すりゃいいじゃん ちょっと意味ワカラナス
815 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 17:33:23 ] >>812 MuLispの仕様ってどこかに公開されてるの?
816 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 02:40:00 ] シンボルを評価して自分自身が返って来るとしたら、変数はどうするんだろう。 よく判らないけれど、自己評価するシンボルが欲しいとかなら、 Common Lisp で keyword に置き換えておくのが楽じゃないかと思います。
817 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 02:43:24 ] >>816 よくわからんが束縛されてない自由変数のデフォルト値って感じなのかな。 keywordにするのは賛成。
818 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 02:57:26 ] 動的束縛で、foo ≡ (lambda () a) として (foo) => a、(let ((a 10)) (foo)) => 10 となることを期待するコードがあちこちにあったりすると厄介かも。
819 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 03:00:03 ] MuLispって時代的にはCommon Lisp以前だから、動的スコープなんだろうな。
820 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 04:43:43 ] ...ってことは単純に移植できなくないか?
821 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 06:48:06 ] んー、未束縛の場合は自分自身を返す、ってんだったら、 handler-case 使って unbound-variable で捕まえるっていう手もあるかも。 スコープは……とりあえずどっかのパッケージに閉じ込めといて、 do-symbols 使って (declaim (special <... そのパッケージのシンボル全部 ...>)) とかに展開するマクロを書いてロード後に呼んでみるとかで意外と何とかならんかなあ。
822 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 08:34:14 ] 昔の Lisp ならそれほど大きな言語仕様じゃないだろうから、Common Lisp に 変換するマクロ書いた方が結局早いんじゃないかな。 (atom x) は (atom (if (boundp 'x) x 'x)) とか、動的束縛なら (let ((var val)) ...) は (let ((var val)) (declare (special var)) ...) とか変換してくだけだよね。
823 名前:デフォルトの名無しさん [2005/09/23(金) 14:18:00 ] 僕には洋書は無理ですた 誰か買いません? 「EXPLORING COMPUTER WCIENCE WITH SCHEME」 ユーズドにしてはかなり綺麗な方だと思う¥5,000でお願い www.amazon.co.jp/exec/obidos/ASIN/0387948953/qid%3D1127452213/250-5942737-7464260
824 名前:823 mailto:sage [2005/09/23(金) 14:19:34 ] ×: COMPUTER WCIENCE ○: COMPUTER SCIENCE
825 名前:デフォルトの名無しさん mailto:sage [2005/09/23(金) 23:42:10 ] 新品の半額なら考える
826 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 00:11:42 ] ほぼ半額に近いね
827 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 00:48:41 ] >>823 買いたくなるようなことを書いて
828 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 15:17:06 ] >>827 書けるくらい理解したのなら、売らないだろうに、イヂワルなやつだな。
829 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 19:04:31 ] 世の中、CDを聴いてから(売るんじゃなくて)返品する奴もいるという話だぞ。
830 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 21:26:13 ] >>829 ソニンのことか
831 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 00:22:08 ] Schemeに静的型対応させた言語が最強だと思うんですが ありませんか? なければ作りますが。
832 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 01:16:43 ] carやcdrの戻り値はどうするの? 関数型言語みたいにリストの中に単一の型しか入れられないんでは Lisp系としては不便この上ないし、かといって型チェックが入るんでは 何も変わらんか、型が固定されるだけ不便になる。
833 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 01:24:50 ] 型変換すればよいのでは。
834 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 10:11:14 ] あっちゃこっちゃで型変換しまくりの静的型対応言語ってのもなぁ。
835 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 10:30:38 ] 基本は型無しで、効率重視の部分では型宣言もできますくらいで いいんじゃないの?
836 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 10:41:18 ] そんな物があったとして、静的型付けな Scheme と SML との間に何を見出すか によって意見が割れそうだね。
837 名前:デフォルトの名無しさん [2005/09/25(日) 13:33:28 ] 経路探索のプログラムの組み方を教えてもらえないですか? 答えでもいいです、よろしくお願いします。
838 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 13:37:52 ] pc8.2ch.net/test/read.cgi/tech/1106587515/150
839 名前:デフォルトの名無しさん mailto:sage [2005/09/27(火) 23:48:07 ] いままで気が付かなかったけれど、 fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy ここの scheme-mode で run-scheme に近いことができるようになってる。 Petite Chez Scheme 7.0で使ってみたところ、問題なく動いた。相当に便利。 まだ荒削りなので、今後に期待。
840 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 19:46:16 ] すみませんが、MzScheme で日本語を使うには、どうしたら良いでしょうか? DrScheme や MrEd では問題なく日本語が使えますが、コマンドプロンプトで 動いているMzScheme だと、与えられる文字コードがWindows_31Jになってしま うせいか、日本語を入力してもすべて化けてしまうのです。 コマンドプロンプトからUTF-8を与えることができればいいのかと思うのです が、そこからが分かりません…。
841 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 21:05:14 ] Emacs で (add-to-list 'process-coding-system-alist '("mzscheme" . utf-8)) しておいて M-x run-scheme とか。
842 名前:840 mailto:sage [2005/09/28(水) 21:36:05 ] >>841 申し忘れましたが、私のシステムは Windows(2000, 98)なのです。 できたら>>938 の xyzzy の scheme-mode を使いたいと思っています。
843 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 22:31:29 ] あまり関係ないけど、xyzzyスレ Part11 に載っていたコード。 xyzzyの sheme-mode はインデントの機能がちょっと貧弱だけど これを.xyzzy に書くと、lisp-modeと似た感じになる。 ; scheme-mode で lis-mode 風のインデントを行う。 (define-key *scheme-mode-map* #\C-m 'lisp-newline-and-indent) (define-key *scheme-mode-map* #\C-i 'lisp-indent-line) (setf (get 'define 'lisp-indent-hook) 'defun)
844 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 23:59:02 ] wikipediaのラムダ計算のページ ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97 例で (λx.(λy.(x+y))3)5 → (λy.(3+y))5 とか λx.(λy.(x+y))3 → λy.(3+y) とあるんですが、これって正しいんでしょうか?
845 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 00:24:27 ] ただしい だがなぜこんなところに聞くのだ。 まだHaskellスレとかの方がよくないか。
846 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 01:10:42 ] xyzzy の Scheme Mode は素晴らしい。これは Scheme のスクラッチ・バッファ そのものだ。Ctrl+JでS式がSchemeインタプリタに評価されて、結果が次の行 に表示される。自分はずっとこういうのが欲しかった。 今まで Windows98 で動く Scheme 実行環境にはろくなものが無かった。 ChezEdit … NTでしか動かない。 DrScheme … 自分のマシンには重すぎてインストールすらできなかった。 Chez Scheme 付属の PWL … 重すぎて、ただ起動しただけでCPUパワーを使い きってしまう。 だから結局、素の PetiteChezScheme をコマンドラインから起動し、エディタ の内容をコピペするしかなかった。 この xyzzy のScheme Mode は、便利で、操作が軽快で、そしてCPUパワーをほ とんど食わない。自分のような貧乏人には理想のScheme環境だと思う。 matsuoka さん、ありがとう!
847 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 01:11:56 ] >>844 ラムダ計算の仕方を全く知らないならちゃんと勉強しろよ。 中途半端に聞いたって仕方がないだろ。
848 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 01:12:43 ] >>842 make-process に :incode *encoding-utf8* :outcode *encoding-utf8* を付け足す感じでどうでしょ。試してないけど。 詳細はリファレンス参照。 ttp://hie.s64.xrea.com/xyzzy/reference/html/ref-make-process.html 上手くいかなかったら win 板の xyzzy スレで訊いた方がいいかも。
849 名前:842 mailto:sage [2005/09/29(木) 10:51:10 ] >>848 ありがとうございます。残念ながら、うまく行きませんでした。 試しに :OUTCODE *encoding-sjis* も試してみましたが、結果は同様でした。 xyzzy スレに行ってみます。
850 名前:デフォルトの名無しさん [2005/09/29(木) 14:19:17 ] >>844 S式で書けば λx.(λy.(x+y))3 = ((lambda (x) (lambda (y) (+ x y))) 3) (λx.(λy.(x+y))3)5 = (((lambda (x) (lambda (y) (+ x y))) 3) 5) これならわかる?
851 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 15:30:54 ] さらば slime48
852 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 19:03:44 ] >>844 1つ目の方違わね? (λx.(λy.(x+y))3)5 → (λx.(x+3))5 じゃね?
853 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 19:23:02 ] 違う >>844 で合ってる >これって正しいんでしょうか? # 強いて言えばラムダ計算に中置き演算子がでてくるのが不思議
854 名前:デフォルトの名無しさん [2005/09/29(木) 19:31:05 ] xyzzyのscheme-modeってgosh使えないの?
855 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 20:04:59 ] >>854 試してみたけど、Gauche は動かないねえ。 fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy に > pscheme を直接呼ぶと結果が帰って来ない(pscheme の STDOUT の扱いの問題) > Petite Chez Scheme と MzScheme? は全然動く(STDIN/OUT がいけるのは大丈夫) とあるから、Gauche の STDOUT に問題があるのだろうか? 対処法はわかんない。
856 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 20:40:52 ] gosh -i とか?
857 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 20:51:01 ] >>853 ラムダ計算自体はべつに前置記法を要求してるわけじゃないんでは?
858 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 21:29:42 ] >>856 うまく行かない。 > xyzzyenv: "C:\Program Files\Gauche\bin\gosh.exe -i ": 指定されたファイ > ルが見つかりません。 というエラーが出る。
859 名前:858 mailto:sage [2005/09/29(木) 21:33:02 ] 念のため、.xyzzy のその行を貼る。 (map-slash-to-backslash "C:/Program Files/Gauche/bin/gosh.exe -i ") こう書くと、前述のエラー。
860 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 21:34:55 ] -iまでをパス名と認識してるみたいだが
861 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 11:02:14 ] Gauche も動いた。こちらを参照。 xyzzy Part13 pc8.2ch.net/test/read.cgi/win/1127783135/l20 ここの27以降。 そしてこちらは、Emacs のscheme-mode風に、評価の結果が run-scheme バッ ファに表示されるようにする改造。 d.hatena.ne.jp/guttyon/20050929
862 名前:デフォルトの名無しさん [2005/09/30(金) 12:19:13 ] defunとdefmacroってどう違うんですか? (defmacro f0 (arg) (f1 arg)) という構文があって、 (defun f0 (arg) (f1 arg)) と置き換えると、使用されている場所でエラーが出ます。 使用されている場所で、f0 〜をf1 〜に置き換えても同じエラーが出ます。 等価な置換を教えてください(あれば・・・) mapcarやapplyの中で使われていることは、関係していますか?
863 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 13:38:50 ] >>862 マクロと関数の違いを君の言葉で説明しなさい。 それとなぜ置き換えたいと思ったのかもね。 話はそれからだ。
864 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 16:34:26 ] >>862 関数とマクロは、似て見えるかもしれないけど、全く別のもの。 とりあえず↓のマクロの解説を読んでみて。 www.geocities.jp/m_hiroi/rakup/rakup20.html
865 名前:デフォルトの名無しさん [2005/09/30(金) 21:20:46 ] kahuaのインストールができないんですが、ここで聞いてもいいですか?
866 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 22:46:02 ] 漏れは構わんと思うけどkahuaのMLを避けてわざわざ心ない輩に煽られたいのは何でなん?
867 名前:デフォルトの名無しさん [2005/09/30(金) 23:10:10 ] 今年もやるよーん jp.franz.com/base/seminar-2005-11-18.html
868 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 00:45:58 ] Gauche+emacsでslimeのようなシンボル補完ができないものか
869 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 02:31:12 ] 俺はシンボル補完よりもeldocぽいやつ+HyperSpecが便利で、schemeにも欲しい。 シンボル補完は、Gaucheには定義されてる全シンボルをとる方法あるんか?ってのと、 変数と関数の区別がないから不便そうだね、ってのがまず思い付く。 SLIMEといえばswank-scheme48がいつごろかに入ったね。 Emacsのscheme用環境というとquackが思い浮かぶけど使ったことないや。
870 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 20:10:20 ] Bigloo Development Environment ってどうよ。
871 名前:デフォルトの名無しさん [2005/10/02(日) 04:58:12 ] schemeのマクロを解説したサイトとかないですか? 他のLispのマクロの知識もないんですが… R5RS読むしかないんでしょうか。
872 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 08:19:19 ] >>871 あれはけっこう難関。漏れも今悩んでる。 日本語リソースについては期待しないほうがいいと言っておく。
873 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 09:01:28 ] define-syntaxは構文を書くのに向いている。 macroは何でもあり。 コツは概念の理解と慣れること。
874 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 11:49:06 ] R5RSには定義だけで概念は書いてないからねえ
875 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 12:01:19 ] 犬飼さんの入門Schemeにちょっとばっかしマクロの記述あったけど あれじゃダメかいな。
876 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 13:19:35 ] >>871 書籍ならそこそこまともな解説が書いてある場合が多いと思う。
877 名前:871 mailto:sage [2005/10/02(日) 16:22:34 ] ありがとうございます。日本語は期待してはいけないんですね…。 とりあえず、犬飼さんのを読ませていただいて、必要ならば、英語も含めてググってみます。 www4.ocn.ne.jp/~inukai/scheme_primer_j.html okmij.org/ftp/Scheme/macros.html community.schemewiki.org/?scheme-faq-macros ちなみに、(R5RSには明示されていない)概念てどんなのでしょう
878 名前:デフォルトの名無しさん [2005/10/03(月) 12:19:19 ] (define-syntax mac (syntax-rules () ((_ a ... b) '(b a ...)))) Chez Scheme、Dr.Schemeだと動いたけどこれってR5RS的には違法ですよね? Gaucheだとエラー。
879 名前:デフォルトの名無しさん [2005/10/03(月) 21:38:39 ] >>878 R5RSではダメだが、srfi-46で定義されている。
880 名前:デフォルトの名無しさん mailto:sage [2005/10/03(月) 21:55:06 ] >>879 知らなかった。トンクス
881 名前:本田 [2005/10/04(火) 13:21:07 ] >MIT CADR Lisp Machine Source code www.heeltoe.com/retro/mit/mit_cadr_lmss.html >Retrocomputing - MIT CADR Lisp Machines www.heeltoe.com/retro/cadr/index.html
882 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 20:46:51 ] fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy の Scheme モードで、追加機能の要望が募集されているみたい。 真っ先に欲しいのは、実行の中断(ブレーク)です。 うっかり(tarai 14 7 0) とかやると、延々と止まらなくなってしまうから。
883 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 06:43:57 ] >>882 Scheme のプロセス握ってるバッファに切り替えて M-x kill-subprocess でいけません?
884 名前:882 mailto:sage [2005/10/07(金) 09:44:23 ] >>883 確かにそうすれば止まりますが、プロセスを殺したくないんです。単に中断し たいだけなんです。 コマンドプロンプトで MzSchemeを利用している時は、Ctl-C で user break になります。たしか Petite Chez Scheme も同じ。 xyzzy の Schemeモードでもそれを利用したいんです。
885 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 13:44:37 ] 個人的にはxyzzyの話はxyzzyのスレか何かでやってほしい
886 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 15:20:33 ] 募集されてるならそこでやればいい。 wikiのようだしその方が生産的でしょ。
887 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 21:10:39 ] emacs の話も emacs スレかどこかでやってくれ
888 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 21:13:52 ] >>887 その通りだと思うが、なんか唐突だな。w
889 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 23:12:35 ] せっかくだからこの機会に。 整えるときはいっきにやったほうが浸透しやすいじゃない?
890 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 00:01:17 ] Lisper の使うEditorとしては 1 . Emacs 2 . Vi 3 . その他 な印象を受けるけど、Viの話題は出ないんだな。
891 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 01:14:48 ] OpenMCL 1.0 リリース sage
892 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 02:05:18 ] OpenMCL は Mac OS X が x86 に移行した後、どうするんだろうか。 x86 backend を一から作るのかな。
893 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 17:22:43 ] >>890 おれバリバリScheme処理系作ってるけどWin厨なんでWZ使ってるよ? 普通EmacsやViなんて変態エディタ使わないでしょ。 あ、変態の反論とかエディタの話題振られてもこれ以上しないから。
894 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 17:31:04 ] >>893 出た、言いっぱなし厨!w
895 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 19:52:51 ] >>893 Viは確かに普通ではないが、Emacsはいたって普通のエディターだが。 まさか、CUAじゃないから変態とかいってんの?
896 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 20:35:56 ] CUAってなあに?
897 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 22:01:16 ] GUAの反対に決まってるだろ
898 名前:デフォルトの名無しさん [2005/10/10(月) 23:26:47 ] Vz厨だった漏れからは、Wzなど問題外の紛い物だったな。
899 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 03:49:37 ] portable hemlock に guile emacs に、elisp を common lisp / scheme で 置き換えるプロジェクトは尽く上手くいっていないけど、みんな elisp で 満足なのかな。順調なのは xyzzy だけ?
900 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 04:47:03 ] そういうことやる人はたいがいEmacsと重なる文化圏の住人なので ・まあ文句はあるけどelispで結構暮らせる ・Emacs自体も開発が進む ・elisp既にたくさん ・Emacsを再び作るのは結構大変 でモチベーションが続かないんじゃなかろうか。 OSやユーザ層でEmacsと重なりにくい部分を選び、その環境に特化することを 特徴の一つとすることでxyzzyは生き延びているように思える。
901 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 11:56:55 ] xyzzyがwindowsでそれなりに成功ところから推理すると、 二匹目のどぜうはMacにいると見た。
902 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 19:44:40 ] 単にUNIXで失敗してるだけだと思うが
903 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 20:57:42 ] ttp://iiyu.asablo.jp/blog/ SICP第2版の訳について良し悪しで意見が分かれてる。 おまえらの意見は堂よ?
904 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 21:02:48 ] >>903 いわゆる「悪い翻訳」ではない。ちゃんと読めるという意味で良い翻訳だと思う。
905 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 21:24:16 ] とかなんとかいって興味をひいてアフィリエイトで 儲けようという作戦か?
906 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 23:01:44 ] macroさえ使えれば elispでもqsortが次のように書けるからね。 (defmatch qsort ( (x . xs) -> (append (qsort (lcomp y (y <- xs) (< y x))) `(,x) (qsort (lcomp y (y <- xs) (>= y x))))) ( () -> '())) 末尾再帰除去の最適化さえあれば。
907 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 23:20:20 ] Common Lisp が気に入っているのは主に処理スピードなので、CL を土台にした 環境があったら嬉しいなぁ。スピードが必要な部分は C で書くというのも一つの 解であるとは思うけど。
908 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 00:03:16 ] Matz 日記見て思ったんだけど、引数付きブロックは素直に lambda(x, y) { x * y } みたいな構文にすればいいのに うだうだ考えてるのって、彼はよっぽど Lisp が嫌いなのかな。
909 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 00:20:40 ] Succinctness is Power
910 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 00:41:51 ] >>908 プログラムがS式でなくなればLispの利点の8割くらいは失われると思う。
911 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 03:14:21 ] >>910 その8割と残り2割の解説よろしこ。
912 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 01:56:23 ] 木構造が直接書き下せなくなる.前置記法が失なわれる.なにより拡張する自 由がなくなる.そう自由だ.大事なのはそこだ.言語が拡張できなきゃ新しい パラダイムを試す自由がない. S 式をやめれば,そこに残るのは,高階関数,クロージャ,オブジェクト指向, そんなあたりまえの行儀のいい退屈な言語だ.そんなものは 2 割にもみたない. # まぁ,ちかごろは純粋なんちゃら〜ってほうがウケがいいみたいだが.
913 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 02:11:04 ] えーっと、マクロ・ラブってことでいいっすか?
914 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 02:50:57 ] いいです
915 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 12:59:35 ] >>912 純粋なForth?
916 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 15:08:09 ] >>912 あなたが試してみた新しいパラダイムを2,3挙げてみて下さい。
917 名前:fumumu mailto:sage [2005/10/21(金) 20:46:16 ] >>916 生理中ですか?
918 名前:デフォルトの名無しさん [2005/10/21(金) 22:54:18 ] >>917 パラダイムでもないし、2、3と言っているのに1つだし、 全然ダメですねw
919 名前:デフォルトの名無しさん mailto:sage [2005/10/22(土) 10:11:56 ] 純粋なんちゃら でもDynamic型ができて、Dynamicでマクロと同等のことができればいいんじゃまいか。
920 名前:デフォルトの名無しさん mailto:sage [2005/10/22(土) 17:20:44 ] よーおーこそー ここーえー♪
921 名前:デフォルトの名無しさん mailto:sage [2005/10/29(土) 15:27:48 ] >>908 lambdaが新しい予約語になってしまうのが嫌なのでは。
922 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 08:47:21 ] lispのキーワードが嫌ならjavascriptに習ってfunctionにでもすりゃいい。 何でもかんでも演算子にできりゃいいってもんでもないだろうに。
923 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 09:44:34 ] Gauche(0.8.6_pre3) + Kahua(0.3.4) から PostgreSQL に繋ぎたいんですけど、 test.kahua で (use dbi) (dbi-make-driver "pg") すると *** ERROR: Compile Error: Compile Error: define-module can't be used within sandbox module "/usr/local/share/gauche/site/lib/dbd/pg.scm":9:(define-module dbd.pg (use gauche.co ... と言われて使えないです。 Kahua から Gauche のライブラリ使うには working-directory 内の plugins ディレクトリに (allow-module dbi) のように書いたファイルを置かなければ ならないようです。 (use dbi) はその方法でエラーは出なくなったのですが、PostgreSQL のドラ イバは、(allow-module dbd.pg) するだけじゃ駄目みたいで。 分かる方いたら教えて下さい。
924 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 21:02:59 ] >>922 lambdaが新しい予約語になると lambdaという変数名その他を使ってるプログラムが全部動かなくなる。 それが嫌なのでは。
925 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 21:08:07 ] いったい何の話してるの? 見えない。
926 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 21:35:41 ] えーっと、とあるスクリプト言語ではλ式を {|x, y| x * y } と書くんだけど、 Common Lisp の &optional みたいにデフォルト値を書けるよう ({|x : 10, y : 20| ...} みたいな文法だっけ?) 拡張しようとしたところ、 これではデフォルト値の式に "|" 演算子が使えないことが判明。 そこでその言語のデザイナは悩んでいるわけだけど、Lisp みたいに lambda (x, (y (x | #x20))) {...} みたいにすればいいだけだろうって話。
927 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 22:05:19 ] 新しい予約語作ってもビクともしないPerl最高!
928 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 06:12:26 ] 予約語を増やしたくないのならマクロを使えるようにすればいいじゃない
929 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 22:13:55 ] lambdaな壁紙ってどっかにない?
930 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 22:16:23 ] >>929 京都へ行って写真撮ってくれば? wwwfun.kurims.kyoto-u.ac.jp/MtLambda.html
931 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 22:56:24 ] >>930 クソワロタw
932 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 21:35:48 ] 日本語訳 www.kurims.kyoto-u.ac.jp/~cs/lambda.html
933 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 01:17:09 ] pc8.2ch.net/test/read.cgi/tech/1129287390/ ボロクソに言われてるぞ
934 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 01:25:14 ] >>933 non-Lisperに何を言われてもLisperは動揺しない。
935 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 01:37:51 ] >>933 そのスレはもう見るだけ時間の無駄だと思う。ちょっとでもひっかかる言葉が あるとわらわらわらわらわらわらわらわらと厨ばかり涌いてくる。
936 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 03:04:37 ] LISP厨はマジでキモいな あのスレ見てそう思った
937 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 10:03:07 ] 論理性に欠けるスレはリンクしない
938 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 10:16:58 ] Lisp Resource Kit キットの背景の壁紙が巨大なλだったような
939 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 11:56:34 ] >>936 空気読めないのはどうかと思うよなあ ああいう場所にしゃしゃり出て、一方的に「禁止な」はさすがに引いた
940 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 15:12:39 ] はいはい、貴方も空気読みましょうね
941 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 16:11:02 ] >>939 あれってやっぱLisp小僧だったんかな ここには来てないよね?
942 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 19:08:14 ] 自演乙
943 名前:デフォルトの名無しさん mailto:sage [2005/11/07(月) 19:30:21 ] 自分にお返事を書く時は もうちょっとわかりにくくした方がいいのにね。 程度がしれる。
944 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 22:57:53 ] Gauche 0.8.6 でてるのに気がついた
945 名前:デフォルトの名無しさん [2005/11/09(水) 10:20:17 ] Gauche0.8.5使ってるんだけど、0.8.6にどうやってバージョンアップできるの?
946 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 19:58:37 ] >>945 tar xzvf Gauche-0.8.6.tgz cd Gauche-0.8.6 gauche-config --reconfigure | sh; make; make -s check; make install でも0.8.6ではデフォルトの文字コードが変わってるそうだから、 今まで --enable-multibyte=ほにゃら、をつけてなかったら ちゃんと./configureを呼ばないとだめ。 あと拡張パッケージを入れてたら再コンパイル。 gauche-package install -r パッケージ.tgz
947 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 22:03:58 ] >>944-946 昔からかもしんないけどWindowsMeではGaucheがエラーになるんだよなー。 Meで使えないNetApiBufferFree APIを呼んでる部分は適当に無効にしてるんだけど。 Wikiで報告はしてきたけど、河合タソはMeは持ってないみたいだし、 俺はヘタレだからソースを追ってもワケわかんねぇしで修正は期待できんかなぁ? Meユーザーがいたら追試験ヨロ。
948 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 22:08:05 ] Me ねぇ…さすがにもうサポートできる人は少ないだろう.つうか API が無い とかだけではなく NT 系との挙動の違いもあるし修正は無理じゃねぇかなぁ….
949 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 22:48:57 ] >>948 0.8.5はMeでも動いてるんだよ。 BoehmGCのバージョンをアップデートしてるとか書いてあるから、 もしかするとGCの方の問題かもしれんな。 GCだけ古いのでコンパイルできるかちょっとやってみる。
950 名前:デフォルトの名無しさん [2005/11/09(水) 23:57:08 ] >>946 僕は--enable-multibyte=ほにゃら、をつけてなかったので、結論として下記になりますよね? % gzcat Gauche-0.8.6.tgz | tar xf - % cd Gauche-0.8.6 % ./configure % make % make install 結局バージョンアップというより、新規インストールという感じですね。 そしたら、0.8.5は上書きされるのかな? よー分からん。寝よ。
951 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 02:57:20 ] いやいやいや, そうじゃないだろ 付けてたなら 946 付けてないなら --enable-multibyte=eucc-jp しないと同じにならないよ
952 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 02:58:25 ] s/eucc/euc
953 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 03:01:58 ] 今さらサポート打ち切り間近なOSなんか持ち出されてもウザいだけだろうしなあ
954 名前:デフォルトの名無しさん [2005/11/10(木) 12:18:24 ] >>951 そうか。よくわかってなかった。これでいいですよね? % gzcat Gauche-0.8.6.tgz | tar xf - % cd Gauche-0.8.6 % ./configure --enable-multibyte=euc-jp % make % make install
955 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 12:27:33 ] Gaucheって実行ファイル作れますか?
956 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:22:32 ] >>955 今はできないけど、将来的にC言語への変換機能を導入する予定はあるらしい。
957 名前:949 mailto:sage [2005/11/10(木) 19:23:21 ] GCをバージョンアップ前に戻したらMeでも動いたよ。
958 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:28:58 ] >>955 Schemeのプログラムを文字列として埋め込むんでよければ簡単に作れる。 ネイティブコード化という意味なら>>956
959 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:33:32 ] 簡単に作れるなら作ってやれよ
960 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:36:27 ] いいよ
961 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 20:14:05 ] wilikiにそういうのがあったような気がする
962 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 15:28:54 ] Lisp1.5で書かれたプログラムのサンプルとか 構文のマニュアルとかが参照できるサイトを 探していますがググってもなかなか見つかりません。 どなたかご存知ありませんか?
963 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 15:44:58 ] >>962 なぜ今さらLISP 1.5なのかは謎だが、LISP 1.5 Programmer's Manualが基本。 Amazonでも買えるが、ぐぐったらPDF版が↓に落ちてた。 www.mahalito.net/mirrors/community.computerhistory.org/scc/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
964 名前:949 mailto:sage [2005/11/11(金) 18:14:37 ] >>955 gauche-install.in.cを見れ。
965 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 19:02:07 ] >>961 これかな ttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3ascm2exe
966 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 23:12:16 ] >>963 なぜかと言われると、今のLispとどのくらい違うか興味があったからです。 ありがとうございました。
967 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 00:35:36 ] Common Lisp と比べたら似ている所が無いくらい違う。
968 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 01:11:59 ] S 式を継承した言語のユーザーは自分が Lisp を使ってると自覚してるのに、 M 式を継承した言語のユーザーは自分が使ってるのが Lisp だとは思ってないよね。
969 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 01:18:06 ] それで?
970 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 01:27:33 ] M式というと故・中西正和先生を思い出す。APPLE LISPとか。
971 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 08:17:04 ] >>968 縦読みだな!
972 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 14:28:27 ] M式って、John McCarthyがLispの構文を 記述するとき、Lisp自身の構文(S式) と区別できるように考えたメタ記法だから Meta Expressionだという理解でいいかな。 で、M式を「継承」した言語なんてどこにもないと。
973 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 10:22:32 ] John McCarthy 先生が今でも元気だと知って驚いたのは俺だけでしょうか
974 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 20:43:55 ] ILCにも出張ってきて講演してるしね。 あっち系の方々の典型的な歳の取り方してぶよぶよに太ってしまわれたのが残念ではある。 Paul GrahamのサイトとかLisp Tシャツに使われてる先生のカッコイイ姿を想像して行くと その変貌ぶりにさらに驚くと思う。
975 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 20:51:35 ] >>974 出張ってきて、っていうか、今回のILCの開催地は先生の勤務先では?
976 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 21:22:26 ] NYC/2003にも居たよ。
977 名前:デフォルトの名無しさん mailto:sage [2005/11/15(火) 19:03:45 ] すいません質問です Javaに組み込み言語として使えるScheme処理系ってありませんか あったら教えてください Javaのプログラムを呼び出したり、あるいは呼び出されるようなSchemeが ほしいんです
978 名前:デフォルトの名無しさん mailto:sage [2005/11/15(火) 19:27:06 ] >>977 Kawa, SISC, JSchemeあたり? URLはぐぐってくれ。
979 名前:デフォルトの名無しさん mailto:sage [2005/11/16(水) 11:55:29 ] >>977 山ほどあります。お好きなものをどうぞ。 www.robert-tolksdorf.de/vmlanguages.html
980 名前:デフォルトの名無しさん mailto:sage [2005/11/16(水) 12:26:40 ] 981レスを過ぎるとレスなし期間が1日あるだけでdatに落ちるようになるよ
981 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 00:53:02 ] もしかしたらすれ違いなのかもしれませんが, (f)がエラー無く評価できるためのfの条件, ((f) 3)をエラー無く評価できるためのfの条件 を説明せよschemeの課題がでまして,ありいろいろ試したのですがどうしても not applicatableとエラーがでてしまいます どなたかお教えくださいませ
982 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 01:20:01 ] (f): fは引数を必要としない手続き ((f) 3): fは引数を1個以上取る手続きを返す引数を必要としない手続き
983 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 01:29:36 ] >>982 どうもありがとうございます! 一つだけ疑問なのですが,((f) 3)は引数が一つなのにfが引数を1個以上 とる手続きを返しても大丈夫なのでしょうか?
984 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 04:15:49 ] 引数一個以上てのは (lambda (x . y) ...)
985 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 09:56:06 ] にらみ合いが続くかと思いきや、 結構あっさり981超えちゃったなー。 ところで誰か次スレ立ててくれ。 俺はムリ。
986 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 15:27:02 ] スレ建て挑戦してみようかと思ってるけど >>1 に書く過去ログPart9のURLわかる人いる?
987 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 15:39:18 ] >>11 にあるリンク先も死んじゃってる模様
988 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 01:27:54 ] >>986 適当に当たりをつけてみたら発見しました。これだよね? pc8.2ch.net/tech/kako/1069/10695/1069594582.html サーバは過去ログ化作業時に板のあるサーバになる模様。
989 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 07:28:29 ] >>988 そのURLをIEにコピペしてみたけど人大杉で確認することができず 専ブラだと何故か表示することができなかったんだけど もしかして●持ってないと確認できないとかかな?
990 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 09:51:24 ] ごめん、>>988 は嘘、というか勘違い。忘れて。
991 名前:デフォルトの名無しさん [2005/11/18(金) 10:21:56 ] 立てました Common Lisp, Scheme Part 14 pc8.2ch.net/test/read.cgi/tech/1132275726/
992 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 11:12:49 ] >>991 乙です 立てようと思ってテンプレ用意してたけど出遅れちゃいました
993 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 14:14:28 ] DAT落ち阻止のため、暇ネタを提供。 AutoCADではかつてカスタマイズにLISPが使われていたが、今ではVBAも広く使われて いるらしい。そのVBA派によるサイト。 ギコでもわかる AutoCAD VBA acesekkei.com/programming/vba/ いろいろ意見はあるだろうが、LISP退潮の実例の一つとしていろいろ考えてしまった。
994 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 16:00:56 ] >>993 どんな言語であれ、言語人口やメンテ要員の確保とか考えると この流れはある意味仕方ないかと。 例えばCLOSにも言える事だけどLISPでオブジェクト内のいりくんだ構造を 操作する場合エディタの支援があってもしんどいでしょ。 (目的操作 (参照 (参照 オブジェクト プロパティ名a) プロパティ名b)) と書かせるより演算子で オブジェクト.プロパティa,プロパティb,目的操作() と書けた方が直感的でわかりやすい。 こういうわずらわしさをLISPで適当なフロントエンドを作成して でっちあげるような解決方法もあるんだろうけど、そこまでするなら 既に一般に広まってる適当な言語を採用した方が良いと判断したんでは。 VBA自体が特に優れているというわけではないので念のため。 VBAの採用はOfficeやActiveXなどゲイツ周りの影響でしょう。
995 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 16:48:10 ] そういえば過去ログ倉庫やまとめサイトってないのかな 誰かWilikiとかで作らない?
996 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 17:31:54 ] >>995 そういう Wiliki は flatline氏がだいぶ以前から提供しているのだが、 www.komaba.utmc.or.jp/~flatline/wiliki.cgi 作業者がいなくて、盛り上がってないのだ。 時間があったら自分もやりたいんだけど。
997 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 22:55:06 ] >>994 アクセッサが不恰好になるのは、S式を使う限り、なかなか解決しがたい問題 ですね。オブジェクト指向が不可欠になった現在、これは大きなデメリットだ よなあ。 Gauche:スロットアクセス practical-scheme.net/wiliki/wiliki.cgi?Gauche%3a%a5%b9%a5%ed%a5%c3%a5%c8%a5%a2%a5%af%a5%bb%a5%b9
998 名前:デフォルトの名無しさん mailto:sage [2005/11/19(土) 11:06:32 ] 997のリンク先とかは with-slots で (with-slots (hoge fuge hage) object (lambda () hoge)) を (lambda (obj) (ref obj 'hoge)) が限度じゃないか?または、 (define-method* obj ( (hoge fuga hage) <XX>) hoge) とか define-method の文字の長さの方が気になるし。 または、マクロ言語(OOとする) (let ((x 1) ;(y (lambda () |hoge|)) ;コンパイル不可? ) (OO obj (display |hage|) ; (display (y)) )) とか。 データ構造と関数構造を分離しないと新たに面倒な問題が発生するし。
999 名前:デフォルトの名無しさん mailto:sage [2005/11/19(土) 14:13:35 ]
1000 名前:デフォルトの名無しさん mailto:sage [2005/11/19(土) 14:14:08 ] 次スレ Common Lisp, Scheme Part 14 pc8.2ch.net/test/read.cgi/tech/1132275726/
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。