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 あたり
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とか代名詞が出てくるんだから、どういう文脈の文章かを 説明しろよな。まあ内容から何の話か見当つくけどさ。