[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 09/01 00:11 / Filesize : 268 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

CommonLisp Scheme Part13



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

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秒くらい?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<268KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef