- 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あたり
- 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秒
|

|