04/02/28 17:37
>>232
そういうコードが安心して使えるかどうかっていうと駄目だろ。
CommonLispはコンパイラの最適化って点でインプリメンタの気まぐれなわけだし。
コーティングスタイルにまでは及ばない。
240:デフォルトの名無しさん
04/02/28 17:39
>>238
CPS(232みたいなk=continuationを渡していくやつ)はよく使うよ。
241:デフォルトの名無しさん
04/02/28 17:40
♪defineの次に、letで囲めばぁー
242:デフォルトの名無しさん
04/02/28 17:41
春はまだ先だぞ
243:デフォルトの名無しさん
04/02/28 17:44
最適化部分は処理系依存なだけで。 C とかだって最適化は規格で決まってなくても
プログラマは処理系のマニュアル見て安心して使うだろう?末尾再帰の最適化が完全
に良い事づくめなら Scheme みたいに規格で決めちゃってもいいかもしれんけど,デ
バッグがやりにくくなるからなぁ……
でも普通は処理系が対応してりゃ安心して使えるだろう。大抵のコンパイラは末尾再
帰の最適化機能を備えているわけだ。以前 c.l.l でも出ていたがやっぱ最適化オプ
ションに「末尾再帰の最適化」を設けるべきだろうなぁ。規格以外は一切使わないと
いうポリシーもありだと思うけどね。
244:sage
04/02/28 17:45
(見逃してやれよー)
245:デフォルトの名無しさん
04/02/28 17:55
>>243
デバッグがやりにくくなる?
どんなデバッグしてるのさ
ログ出すだけじゃないの?
246:デフォルトの名無しさん
04/02/28 18:40
アセンブラ出力しておっかけてるんだろ
247:デフォルトの名無しさん
04/02/28 18:56
xyzzy で tail recursion が遅いのは大変残念な思いがします.
248:デフォルトの名無しさん
04/02/28 18:56
関数トレースしたり、エラーがでたらバックトレースみたり、
スタックフレームのぞくだけだけど…。ひょっとして「ログ出す」
ってのが普通なの?漏れ Lisp の正規の教育受けてないので
常識には自身がないんだよね。
249:デフォルトの名無しさん
04/02/28 18:58
s/自身/自信/
どうやら国語も勉強しなおしたほうがいいようだ。吊ってくるわ。
250:デフォルトの名無しさん
04/02/28 19:06
所詮はエディタだし。
251:デフォルトの名無しさん
04/02/28 19:08
Lispの正規の教育受けてる人なんてほとんどいないだろ。
Java/C/C++でさえ書籍orWebの情報だけでやっていく人がたくさんいるし。
252:デフォルトの名無しさん
04/02/28 20:55
正規の教育ってなんだ?(w
253:デフォルトの名無しさん
04/02/28 21:14
>>245 のデバッグ手法を教えてください。漏れも最適化したらデバッグ用
情報が減るのは当たり前だと思ってたんだけど。Scheme では関数呼び出し
情報とかはあんまりデバッグに使わないんですか?
254:デフォルトの名無しさん
04/02/28 22:17
schemeも、トレース実行すると末尾再帰の呼び出しが
普通の再帰みたくツリー上に出るんじゃない?
デバッグでなんか大きな違いってあるの?
255:デフォルトの名無しさん
04/02/29 01:09
>>253
ログ出しについての説明か?
ループの中で変化する変数を表示するだけですが。
256:デフォルトの名無しさん
04/02/29 13:11
>>254
え、何という処理系ですか?デバッグ周りって処理系依存ですよね。
トレース実行って特定の関数だけとか全体とか指定できるんですか?
>>255
それだけじゃキツイなぁ。再帰がふか~い所でエラーな時とか。
やっぱエラーになってデバッガが立ち上がったところから手繰って
いけたほうが便利だと思いますが。私の使ってる処理系は debug レベル
を 2 以上にすると末尾再帰の最適化が行われなくなるのでエラーに
なった時点からフレームをたどっていけますが…。
257:デフォルトの名無しさん
04/02/29 13:50
traceなら処理系というかマクロでできるよ
258:デフォルトの名無しさん
04/02/29 15:53
デバッグがらみの話題で、処理の流れを目で追うことができるソースレベルデバッガが
売り物の処理系でも付いていないというのは、要望が少ないからなのかな? たしかに
バックトレースの表示などの伝統的なやり方でもデバッグできるけどね。あと、要所
要所に(format t "my-var = ~S~%" my-var)を挿入とか。俺はPerlでもこのやり方で
デバッグするね。Data::Dumperという便利なものもあるし。
俺はEmacs Lispではソースレベルデバッガであるedebugをもっぱら使ってdebugはほとんど
使ったことがない。
259:デフォルトの名無しさん
04/02/29 16:39
stepじゃ駄目なの?
260:デフォルトの名無しさん
04/02/29 16:53
>>259 いや、stepでもたぶん同じことができると思うけど、エディタでコード全体を
見渡しながらデバッグできると気持がいいんだよね。ついでに、監視したい式なんかを
複数登録しておいて常時、その値を表示させておくとか。ブレーク時に画面上で変数の
上にマウスポインタを置くだけで、値が表示されるとか。
つまり、昔かたぎの人からみれば、俺は現在のIDEに毒されているヘタレということか。プ
261:デフォルトの名無しさん
04/02/29 17:53
slimeに期待かな。
現時点でもエラー箇所の表示とか凝ったことできるし。
262:デフォルトの名無しさん
04/02/29 18:10
名前がスライムっぽくて嫌
263:デフォルトの名無しさん
04/02/29 19:34
メタルスライムがあらわれた
メタルスライムAは逃げ出した
264:デフォルトの名無しさん
04/02/29 20:05
バックトレースってデバッグでは便利だと思うんだけど Scheme の人は
要らないのかな?拾ってきたプログラムがエラー吐いてとまったときと
かバックトレースが空だとちょっと悲しいんだけど。
>>257
なんか安心して使える trace の実装とかあります?処理系によっては
付いてるみたいだけど。付いてないのも結構あるので困るんですが。
265:デフォルトの名無しさん
04/02/29 22:05
>>264
そういうのはどう転んでも処理系依存だしなあ。
いつでも外せるassertみたいなの埋め込むぐらいしか。
昔さわったminischemeのトレースはトレース対象を出力用の
フック関数で挟む方式だった。後付けマクロ。
関数突入・脱出でトレース出力するので、
トレース対象関数は自然と末尾再帰が外れて山形の出力になる。
ただし内部関数、名無し関数には使えない。
266:デフォルトの名無しさん
04/03/01 12:48
foo,bar,baz,mumble,glorp
これって何に由来してんだぁ?
267:デフォルトの名無しさん
04/03/01 13:21
>>266
foo と bar は RFC で定義されているよ
268:デフォルトの名無しさん
04/03/01 14:02
RFCは冗談も混ざっているからなぁ。
269:デフォルトの名無しさん
04/03/01 23:33
MLの有名な本より写経
A Lisp hacker says: 'Since the integers are a subset of the
real numbers,the distinction between them is wholly artificial
--foisted on us by hardware designers.ML should simply provide numbers,
as Lisp does, and automaticaly use integers or reals as appropriate.'
Do you agree? What considerations are there?
MLerはいろいろ言うだろうが、Lisperはどう答える?
270:デフォルトの名無しさん
04/03/02 00:00
なにを勿体つけてるんだ? ML for the working programmer の ex2.2
って言えばいいじゃん。翻訳もせずに丸投げなあたり宿題か何か?
まぁ実際 ML にまでそうしろと言う Lisper は少ないと思うよ。
NetNews でも ML の数値周りが気に食わないと噛み付いてた Lisper
は居たけど ML に Lisp 式の数値にしろ!とまで言うやつぁ少ないだろ。
理由はなんで ML がそうしてるかを考えればわかるだろ。
271:デフォルトの名無しさん
04/03/02 00:08
まあ、そう熱くならんでも。
型無しのありがたみって何だろうな、というネタフリなんよ。
272:デフォルトの名無しさん
04/03/02 00:36
本からのコピペ程度でいちいち age るのがウザイんだよ。
ML スレでやれば?型無しのありがたみは無いってことでいいからさ。
デバッグ方法が聞けてウマーと思ってたのに、そんなつまらんネタ振るな。
だいたいここは Lisp 総合スレなんだ、型有りの Lisper 連中からすりゃ
ハァ?って話題だろーが。全部の LISP 型無しという狭い見識をなんとか
してから出直してきてくれ。
273:デフォルトの名無しさん
04/03/02 00:37
dat 落ちした前スレを html 化してもらいました。
LISP Scheme Part9
URLリンク(ruku.qp.tc)
274:デフォルトの名無しさん
04/03/02 12:24
強い型付けのないSchemeのような言語には
良いところもあるよなぁ、ということを言いたかった
だけなんだがなぁ...
275:デフォルトの名無しさん
04/03/02 12:49
まぁ、あんまり気にすんなや。
276:デフォルトの名無しさん
04/03/02 19:09
健全なマクロ VS 不健全なマクロ
1 :デフォルトの名無しさん :04/03/02 19:14
(ちょっと入れ子でスレ立たせてくれや)
健全なマクロって不便だし、不健全なマクロの貸しコートもささくれ立っていてなんかイヤ。
だから、健全なマクロに「不健全」ていうオプション欲しいよな?
お前ら、どう思いますか。
277:デフォルトの名無しさん
04/03/02 19:14
健全なマクロ VS 不健全なマクロ
2 :デフォルトの名無しさん :04/03/02 19:15
2get
278:デフォルトの名無しさん
04/03/02 19:16
「不健全」というと健全なのより悪いイメージがあるからな~。
個人的にはつまらないマクロと楽しいマクロだな。変数キャプチャ
があった方がいろんな意味で楽しい。はまるとデバッグも愉快な事
になるしな。アヒャヒャヒャヒャ。
279:デフォルトの名無しさん
04/03/02 19:20
define-unhygienic-syntax ;-)
280:デフォルトの名無しさん
04/03/02 19:56
defmacro/define-macroの方が簡単だし構造見えるし作りやすい。
gensym命。でもSRFIのhygienicマクロそのまま読めない罠。
まあhygienic作る暇あったら正規表現でも統一しなさいってこった。
281:デフォルトの名無しさん
04/03/02 20:28
>>278
define-boring-macro/define-amusing-macro とか?
まぁ変数キャプチャを防いだところで世間の見る目はかわらんよね。
R... な言語の作者だってマクロはダメポって言ってたけどこれは
変数キャプチャ云々の話じゃないわけだし。
282:デフォルトの名無しさん
04/03/02 22:08
>>281
世間の見る目って?どんな風に見られてるの?
m@zはどうしてマクロはダメポって言ってるの?
283:デフォルトの名無しさん
04/03/02 22:21
>>282
「神聖なる構文を一般利用者が触るなんてとんでもない。そんなの混乱の元だよ!」
ユーザビリティの問題だとかいってたあたりの事だと思われ。確認してないから
不正確かも知れんが探すのマンドクサ(括弧の話だったかも?)
284:デフォルトの名無しさん
04/03/02 22:26
あのひとはユーザビリティって言葉好きだよね
285:デフォルトの名無しさん
04/03/02 22:42
その割にRubyて妙な構文だらけだね
え、LISPには劣るって!?
286:デフォルトの名無しさん
04/03/02 23:02
あぁ!?神聖なる構文?
しゃらくせえ。
おれ様が欲しいのは圧倒的な自由なんだよ!
Schemeは聖域無き言語だぜ!
ユーザビリティーだと?
ヌルイ!ヌルイよそれ!
ちょーヌルイよ!
あーヌルイ。母さーん、火ぃつけてくれ。
ふぅー、ぬるぽ。
287:デフォルトの名無しさん
04/03/02 23:05
C言語みたいな、ちょっと小汚い言語の方が好かれるかもなあ
288:デフォルトの名無しさん
04/03/02 23:58
vimのVIlispってプラグインまともに動かせてる人いる?
設定のコツを教えてくれ。
\esで評価しようとするとvimが固まるんだけど…
289:デフォルトの名無しさん
04/03/03 20:35
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>286
290:デフォルトの名無しさん
04/03/04 14:28
Lispをよく知る前は、Lispは再帰が命と聞いた。
↓
Common Lispを習ったら、再帰はC++と同じくらいしか使わないなと思った。
↓
Schemeを習ったら、「やっぱりLispは再帰が命?」と思った。
291:デフォルトの名無しさん
04/03/04 14:39
CPS (continuation passing style)ってSchemerの人達が発明したコーディングスタイルなのかな?
末尾再帰の最適化が保証されていないと、いやがる人がいそうな書き方だよね。
実際は、メモリを結構積んでいるマシンが増えたから、再帰が多少深くなったって、困る場面ってそうそう
ないような気もするけど。
292:デフォルトの名無しさん
04/03/04 16:36
コンパイラ関連でよく出てくるよ>CPS
293:デフォルトの名無しさん
04/03/04 23:34
>>291
CPS ってもう少し汎用的な概念だと思う。
state パターンも原始的な CPS だと言えなくもない。
末尾再帰を使うのはたまたま scheme が末尾再帰を正当化してくれているから。
294:デフォルトの名無しさん
04/03/05 13:44
URLリンク(www.lispworks.com)
> System Class STANDARD-CLASS
> Class Precedence List: standard-class, class, standard-object, t
(subtypep 'standard-class 'standard-object)
=> NIL T ;; clisp
=> NIL T ;; cmucl
=> T T ;; ecl
=> T T ;; lispworks
なにこの処理系たち…
久しぶりにaclをインストールしたら、
./alisp
dlopen(/tmp/acl62_trial/libacli623t.so, mode) error: /tmp/acl62_trial/libacli623t.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
と言って立ち上がらない…
295:デフォルトの名無しさん
04/03/05 15:28
CVS 鯖のトラブルで遅れれてるけど CMUCL 19a は↓だよ.がんがれ Martin !
(Martin は週末に時間があったらがんがるそうです)
CLOS based on Gerd's PCL 2003/06/18 09:23:09
* (subtypep 'standard-class 'standard-object)
T
T
296:294
04/03/05 15:47
clisp 2.28 (released 2002-03-03)
cmucl CLOS 18e (based on PCL September 16 92 PCL (f))
ecl 0.9c
lispworks Version 4.3.6
でした。
そういえば、cmuclはCLOSをだれか(Martinていう人?)が速くなるように書き直し
ているという話を聞きました。
clispとか報告したほうがいいのかな…。fixも一緒じゃないとなんとなく気が引ける
んだよね。一般的にconformance bugって重箱の隅をつつきだしたら結構あるし。
297:デフォルトの名無しさん
04/03/05 15:54
あれっ、clisp 2.28って古すぎですね。今は2.32か。
298:デフォルトの名無しさん
04/03/05 16:01
GNU CLISP 2.32 (2003-12-29)
[1]> (subtypep 'standard-class 'standard-object)
NIL ;
T
299:デフォルトの名無しさん
04/03/05 16:06
いや今 CMUCL はメインの CVS 鯖がダウンしてて Martin タソが準備してるってだけ。
はやくなおらないなか~。PCL をいじってたのは Gerd Moellmann です。だから Gred's PCL。
19a からこっちになる予定。
300:デフォルトの名無しさん
04/03/05 16:31
今、cl-ppcreをDebianシステムにインストールしたんだけど、
apt-get install cl-ppcre
で、clisp、cmucl、sbcl-mtなどインストールされているコンパイラ用にちゃんと
コンパイルしてインストールくれるんだね。
しばらくDebianにさわってなかったけど、なんだか、とんでもなく便利になってきている気がする。
debパッケージになっているライブラリも多いし。Debian使っているLisperが多いのかな。
たしかcmuclの開発者もdebianの人が多かったよね。
あと、Redhat(Fedora?)だとメモリチェッカか何かの影響でcmuclが動かない(かった)という話も
きいたことがあるね。今でもそうなのかな?
301:デフォルトの名無しさん
04/03/05 17:16
>>299
同意。
早く復活しないとSBCLに(ry
302:デフォルトの名無しさん
04/03/05 17:23
たしかに、現状でSBCLの方が開発に勢いがあると言ってた人がいたな。
303:デフォルトの名無しさん
04/03/05 18:56
CMUCL派生なのに、ベンチマーク結果が大きく違うのは何でだろ。
URLリンク(www.cons.org)
304:デフォルトの名無しさん
04/03/06 13:30
>>303 俺にはだいたい同じような結果に見えます。sbcl vs cmucl
305:デフォルトの名無しさん
04/03/06 19:38
block compile って何ですか?
306:デフォルトの名無しさん
04/03/07 11:53
>>305 どんな文脈で、でてきた言葉ですか?
307:デフォルトの名無しさん
04/03/07 17:59
たぶんcmuclじゃないかな。
fURLリンク(ftp.averillpark.net)
を熟読。
308:デフォルトの名無しさん
04/03/08 20:32
Gaucheはmingw用でいいからWindows向けのmakefile書いて欲しいなあ。
cygwin入れてconfigure環境作るのマンドクサ
309:デフォルトの名無しさん
04/03/08 21:04
>>309
確かに。漏れもGaucheのためにcygwin入れたよ。
310:305
04/03/08 22:55
>>306-307
レス遅くなりまして済みません。SBCL と CMUCL の比較で、SBCL はまだ block compile
が出来ないよみたいな記述があったので、お聞きしました。
>>307
どうもありがとうございます。読ませて頂きます。
311:デフォルトの名無しさん
04/03/08 23:07
block compileには何のメリットが?
312:189
04/03/12 00:29
以前、>>197-198 でコードを提供していただいた者です。
>>211 の後で、ドットリストも扱えるように改造して、欲しい仕様の物ができました。
それを、いま移植作業を進めているプログラムに同梱したいのですが、著作権表記や
ライセンスなどでご要望がありましたらお知らせください。
(元プログラムがBSDライセンスなので、それと同じで配布できるとありがたいのですが)
313:197
04/03/12 01:37
>>312
好きにしていいよ。
314:デフォルトの名無しさん
04/03/12 16:59
このスレ廃れたな....
315:デフォルトの名無しさん
04/03/12 18:59
わざわざ言うほどでもない
316:デフォルトの名無しさん
04/03/12 19:34
いや、初心者スレの登場でレスが分散して、ここ数日何か寂しいなあと感じたので。
317:デフォルトの名無しさん
04/03/12 19:37
淋しがりやさんなのね
318:デフォルトの名無しさん
04/03/12 19:39
新ネタがくれば ワッシワッシ盛り上がるよ
319:デフォルトの名無しさん
04/03/12 19:44
両方見てれば別に寂しくないじゃん。
ところで >>189 は何を移植してるんだろ。
期待して待つぞ~
320:デフォルトの名無しさん
04/03/12 20:56
↓新ネタ登場!
321:189
04/03/12 22:37
>>319
URLリンク(khdd.net) をご覧ください。
322:デフォルトの名無しさん
04/03/13 14:20
>>321 リンク先みても(12.1.4というアンカー名が見つからない)、いまいち分からないのですが、フォント関連のアプリですか?
323:デフォルトの名無しさん
04/03/13 15:30
URLリンク(khdd.net)
と間違えたんだろ
324:デフォルトの名無しさん
04/03/13 16:06
なるほろ
325:デフォルトの名無しさん
04/03/13 17:15
#+cmu
(loop for i from 128 to 255 do (set-syntax-from-char (code-char i) #\a))
みたいに処理系固有の処理は *features* を使うとイイと思われ。
326:デフォルトの名無しさん
04/03/13 21:52
こういうのを高階関数を使って綺麗に書けませんか?
(lambda (a b) (> (car a) (car b)))
327:デフォルトの名無しさん
04/03/13 22:55
>>326
逆に汚いかも
(lambda (a b) (apply > (map car (list a b))))
328:デフォルトの名無しさん
04/03/13 23:29
(> a b :key #'car)
みたいに書きたいということじゃないの。
329:326
04/03/14 00:03
説明不足ですみません。↓こういう用途で使いたいのです。
(sort '((5 a) (3 b) (4 c))
(lambda (a b) (> (car a) (car b))))
map,cut,apply,compose等を使って相当考えたんですが
lambdaを使わないで表現できません・・・
綺麗or簡潔にするのは無理な気がしました。
でも汚い例ですら考えつかなかったので悔しいです。
330:
04/03/14 01:35
(define (cons x y)
(lambda(m)(m x y)))
(define (car z)
(z (lambda (p q) p)))
としたとき、(car (cons x y)) が x を生じることを
証明せよ、とSICPに言われたんですけど、よくわからんのです。
頭がこんがらがって。
mzscheme というのを使ってるのですが、動きを追うための
機能ってないんでしょうかね。
331:デフォルトの名無しさん
04/03/14 01:49
言語レベルを落とせばトレースできたような気がしなくもないが
普通に式変形してけばOKかと
(car (cons x y))
=> (car (lambda (m) (m x y)))
=> ((lambda (m) (m x y)) (lambda (p q) p)))
=> ((lambda (p q) p) x y)
=> x
332:
04/03/14 01:59
>>331
あ~、なるほど。ありがとうございます。
すっきりしました。わたしまだ基本ができてないっすね。
精進します。
333:デフォルトの名無しさん
04/03/14 09:22
>>329
(sort '((5 a) (3 b) (4 c)) #'> :key #'car)
334:326
04/03/14 15:16
>>333
おおっ ありがとうございます。
Schemeは無理ですか?
335:デフォルトの名無しさん
04/03/14 15:27
sort関数自体の仕様による。
どうしても必要なら
(sort '((5 a) (3 b) (4 c)) > car)
という引数を受け付ける様にするとか。
car>という関数でも作るとか。
336:デフォルトの名無しさん
04/03/14 15:36
(lambda a (apply > (map car a)))
337:326
04/03/14 16:04
>>336
こんなことができたのですか。これなら満足です。
皆さんどうもありがとうございました。
338:
04/03/14 23:11
(define (reverse ls)
(if (null? ls)
ls
(append (reverse (cdr ls))(list (car ls)))))
とやると、リストがさかさまになるらしいのですが、動きは
どうなるのでしょう。
最初の引数が(1 2 3)として、
(append (reverse (cdr (1 2 3))(list (car (1 2 3))))
(append (reverse ((2 3))(list (1)))
(append (reverse ( (cdr (2 3)))) (list (car (2 3))))
(append (reverse (3))(list (2)))
となって、あれ?となります。けど実行するとさかさまになっている
なんかわからないです。だれか動き方を教えてください!
339:デフォルトの名無しさん
04/03/14 23:23
>>338
(reverse '(1 2 3))
(append (reverse '(2 3)) '(1))
(append (append (reverse '(3)) '(2)) '(1))
(append (append (append (reverse '()) '(3)) '(2)) '(1))
(append (append (append '() '(3)) '(2)) '(1))
(append (append '(3) '(2)) '(1))
(append '(3 2) '(1))
'(3 2 1)
340:
04/03/14 23:39
>> 339
あ!
append 自体が入れ子になるわけですね!
やっとわかった!ありがとうございました!
341:デフォルトの名無しさん
04/03/15 15:45
だれか、これ知っていますか? ECLと似たアプローチだと思うけど、評判はあまり聞かないな。
WCL 3.0 - Embeddable Common Lisp for Linux
URLリンク(wcl.kontiki.com)
何でもいいから情報キボンヌ
342:デフォルトの名無しさん
04/03/16 01:13
前スレ 422 からの Y combinator は面白い。
関係ないけど、クロージャをオブジェクトと見立てて self や this 相当の機能を実現しようと
するとマクロを使うか引数で渡してあげるしかないのかな。
343:デフォルトの名無しさん
04/03/16 03:32
>>342
letrec とか使えば、とりあえず自分を参照できるけど。
(let* ((foo (let ((val 1))
(define (self sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self)))
self))
(bar (let ((super foo)
(val 2))
(define (self sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self)
((eq? sym 'super) super)
(t (super sym))))
self)))
(list (bar 'val) ((bar 'self) 'val) ((bar 'super) 'val)))
=> (2 2 1)
とか、こういう話?
344:デフォルトの名無しさん
04/03/16 23:00
>>343
そっか、let で括ってあげれば良いんですね。lambda だけでと考えてました。
345:デフォルトの名無しさん
04/03/17 13:34
頼むから、CMUCLのCVS早く復旧してくれよ。
もう二ヶ月以上も経過してるぞ。
346:デフォルトの名無しさん
04/03/17 13:58
ミラーは全部生きてるわけだし普通のユーザーにはそれほど不都合は
無いでしょ。Martin タンだってボランティアなんだしあまりワガママを
言うもの気の毒じゃん。どうしても文句言いたきゃ cmucl-devel で騒ぐ
ほうか良いと思われ。
347:デフォルトの名無しさん
04/03/17 15:59
>Martin タンだってボランティアなんだしあまりワガママを言うもの気の毒じゃん。
なのに
>どうしても文句言いたきゃ cmucl-devel で騒ぐほうか良いと思われ。
ってのは一番ヤバい選択なような。
348:デフォルトの名無しさん
04/03/17 16:53
自分では何もする気がないのにただ「さっさと復旧汁」とか言いたいだけなら
黙ってたほうが賢明かと。別に配布が完全停止ってわけでもなくデベロッパーは
黙々と作業してるわけで。でも建設的な提案(回線とセットアップ済みハードウェア
を提供とか)があるなら言ってみれば。
349:デフォルトの名無しさん
04/03/17 17:28
>自分では何もする気がないのにただ「さっさと復旧汁」とか言いたいだけなら黙ってたほうが賢明かと。
俺はそうは思わない。以上
>でも建設的な提案(回線とセットアップ済みハードウェアを提供とか)があるなら言ってみれば。
なんで建設的な話?
不毛な雑談を認めないのかよ。
建設的な提案があればこんなところではなくcmucl-develへ投稿するところだが。
350:デフォルトの名無しさん
04/03/17 17:38
Lisperはまじめっこが多いから不毛な雑談はできません
351:デフォルトの名無しさん
04/03/17 17:47
ナ ゝ ナ ゝ / 十_" ー;=‐ |! |!
cト cト /^、_ノ | 、.__ つ (.__  ̄ ̄ ̄ ̄ ・ ・
,. -─- 、._ ,. -─v─- 、._ _
,. ‐'´ `‐、 __, ‐'´ ヽ, ‐''´~ `´ ̄`‐、
/ ヽ、_/)ノ ≦ ヽ‐'´ `‐、
/ / ̄~`'''‐- 、.._ ノ ≦ ≦ ヽ
i. /  ̄l 7 1 イ/l/|ヘ ヽヘ ≦ , ,ヘ 、 i
,!ヘ. / ‐- 、._ u |/ l |/ ! ! | ヾ ヾ ヽ_、l イ/l/|/ヽlヘト、 │
. |〃、!ミ: -─ゝ、 __ .l レ二ヽ、 、__∠´_ |/ | ! | | ヾ ヾヘト、 l
!_ヒ; L(.:)_ `ー'"〈:)_,` / riヽ_(:)_i '_(:)_/ ! ‐;-、 、__,._-─‐ヽ. ,.-'、
/`゙i u ´ ヽ ! !{ ,! ` ( } ' (:)〉 ´(.:)`i |//ニ !
_/:::::::! ,,..ゝ! ゙! ヽ ' .゙! 7  ̄ | トy'/
_,,. -‐ヘ::::::::::::::ヽ、 r'´~`''‐、 / !、 ‐=ニ⊃ /! `ヽ" u ;-‐i´
! \::::::::::::::ヽ `ー─ ' / ヽ ‐- / ヽ ` ̄二) /ヽト、
i、 \:::::::::::::::..、 ~" / ヽ.___,./ //ヽ、 ー
352:デフォルトの名無しさん
04/03/17 17:53
別に 348 の見解をそんなに気にする事はないだろう。
不毛な雑談でもオモシロければイイ。同じネタのループはイクナイ。
で CVS の復旧マダーな話は「こんなところ」でも既出なわけだが。
353:デフォルトの名無しさん
04/03/17 18:15
じゃあ、次はCVSのクラッキンg(ry
354:デフォルトの名無しさん
04/03/18 08:43
>>344
展開してみた。
((lambda (foo)
((lambda (bar)
(list (bar 'val) ((bar 'self) 'val) ((bar 'super) 'val)))
((lambda (super val)
((lambda (self) (self self))
(lambda (self0) ((lambda (self1) (lambda (sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self1)
((eq? sym 'super) super)
(#t (super sym)))))
(lambda (sym) ((self0 self0) sym))))))
foo 2)))
((lambda (val)
((lambda (self) (self self))
(lambda (self0) ((lambda (self1) (lambda (sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self1))))
(lambda (sym) ((self0 self0) sym))))))
1))
=> (2 2 1)
; ところで、 closure を object と見立てるって、こういうので合ってるの?
355:デフォルトの名無しさん
04/03/18 11:13
まぁ正直 let 使ったほうが見やすいわけだが。わざわざ展開してあげるとは
>>354 も人が良いねぇ。let や let* は lambda で書けるだろゴルァ!! で
終わりそうなもんだが。まぁ >>344 よ、基本的に
(let ((x 1) (y 2)) (+ x y))
=>
((lambda (x y) (+ x y)) 1 2)
(let* ((x 1) (y 2)) (+ x y))
=>
((lambda (x) ((lambda (y) (+ x y)) 2)) 1)
でも流石に let 使ったほうがわかりやすいので大抵の Lisp にゃ
let や let* が用意されてるわけだ。
356:デフォルトの名無しさん
04/03/18 12:56
むしろ define(= letrec) を展開してることに意味があったり。
357:デフォルトの名無しさん
04/03/19 14:42
The Seasoned Schemerってどうかな。安いから買おうかな。littleは持ってるんだけど。
URLリンク(www.amazon.co.jp)
と思ったら、The Little Mler などというもっと面白そうな本が...
358:デフォルトの名無しさん
04/03/22 14:37
Lispがそんなにすごいなら ---If Lisp Is So Great---
URLリンク(www.shiro.dreamhost.com)
359:デフォルトの名無しさん
04/03/22 18:54
JavaとかC++とか手続き型で一般的なオブジェクトの
メソッド呼び出し形式が書ける様になれば普及すると思うんだけど、
どうかな。
シングルメソッドディスパッチでいいし。
つまりこういうこと
(object.method param) ;; object->method(param)
(object->method param) ;; object->method(param)
(setf object->prop value) ;; object->prop = value
.と->はどっちでもいいけど。.はdot-pairと被るから->かな。
マクロ文字でなんとかなったりする?
でもメソッド呼び出しをネストさせると
((object->method param1)->method param2) ;; object->method(param1)->method(param2)
変な違和感がある。
そもそも->はsuffix演算子だから、本来ならLISP流に書くと
(-> (-> object method param1) method param2)
こうなる。
でもこれじゃ使う人いないだろう。
まいった。
360:デフォルトの名無しさん
04/03/22 23:11
>>358
>(だが、気をつけ給え。その論理の行き着く先はWindowsだ。)
ワロタ
広まるのが悪いみたいな言い方だな(w
361:デフォルトの名無しさん
04/03/23 00:06
>>359
. や -> は繋ぎの役割しかしてないから、括弧と両方あるのは冗長。省こう。
object と getter や method の順序は、lisp だと procedure が前だから、
(setf (prop obj) value) と ((method obj) param)
あと方のは中の括弧はなくてもいいか。そうすると、(method obj param)。
あれ、両方とも今のままだ。
362:デフォルトの名無しさん
04/03/23 00:18
(だが、気をつけ給え。その論理の行き着く先はloopだ。)
363:デフォルトの名無しさん
04/03/23 09:28
loop keywordをリスト中にいきなり出てくるキーワードではなくて、ローカルマクロ
みたいに見えるように定義したら、loop嫌いな人も減ったかな。
(loop (for item in list) (collect item))
364:デフォルトの名無しさん
04/03/23 10:22
> (* 1.05 12)
12.600000000000001
> (* 1.05 12.0)
12.600000000000001
Gaucheでこの誤差をなくす方法を教えてください。
(プログラム初心者板ものですね。申し訳ないです)
365:デフォルトの名無しさん
04/03/23 11:13
そんなもの
(* 105/100 12)
とすれば、、、
12.600000000000001
あれ???
366:デフォルトの名無しさん
04/03/23 11:22
浮動小数点の仕様。
十進数使え。Gaucheにあるかどうかはしらんが。
367:デフォルトの名無しさん
04/03/23 11:24
gaucheはexact rationalないみたいだからね。
formatで桁指定できれば助かるんだが。
368:デフォルトの名無しさん
04/03/23 11:24
clisp なら (* 105/100 12) => 63/5 でウマー!! というは置いといてだ,
#include <stdio.h>
int main(int argc, char *argv[])
{
double f = 1.05*12;
printf("%f\n", f);
printf("%.14f\n", f);
printf("%.15f\n", f);
printf("%.16f\n", f);
return 0;
}
の結果が
12.600000
12.60000000000000
12.600000000000001
12.6000000000000014
になる事について,どう思う?
369:デフォルトの名無しさん
04/03/23 11:38
What Every Computer Scientist Should Know About Floating-Point Arithmetic
URLリンク(docs.sun.com)
日本語訳は腐っていた記憶あり。
他にも浮動小数点数の入門文書あったら紹介してください。
370:デフォルトの名無しさん
04/03/23 12:08
IEEE double precision floating pointで、
1.05の最良近似は丸めが入って (* #x10cccccccccccd (expt 2 -52))。
仮数部を12倍すると #xc999999999999c。
これは54bitになるから、仮数部53bitに収めるにはまた丸めなくちゃ
ならない。ちょうど中間の値に来るときは仮数部が偶数になるように
丸めるから、演算結果はこうなる。
(* #xc99999999999a0 (expt 2 -52))
一方、12.6, 12.600000000000001の最良近似は、桁を揃えればそれぞれ:
(* #xc9999999999998 (expt t -52))
(* #xc99999999999a0 (expt t -52))
だもんで、正確さを言うなら12.600000000000001の方が正確やね。
見にくいことは否定しないが。
371:デフォルトの名無しさん
04/03/23 22:09
>>364
gosh> (* 1.05 1.2 10)
12.6
372:デフォルトの名無しさん
04/03/24 02:59
>>359
(obj 'msg args) という形で Smalltalk のメッセージ式風に記述するとか。
キーワード引数付きのメッセージ式って Lisp 等の関数呼び出し式と同様に
一貫した記述(条件分岐とか、繰り返しとかもメッセージ式風に記述出来る)
が出来て、尚かつ読み易くて イイ! と思うんだけどどうかな?
373:デフォルトの名無しさん
04/03/24 03:27
>>359,372
そんな簡単なことで普及するなら Dylan はとっくの昔にメジャーになっとるがな。
要するに、マクロで書式を自由にできることがウリの LISP で駄目だってことは、
(なにが駄目だかわらかんが)問題は(あるとすれば)書式にあるんじゃないっ
てことなんだよ。(で、なにが駄目で問題なんだ…?藁)
374:デフォルトの名無しさん
04/03/24 05:55
他の言語で満足してるからじゃないの?
375:デフォルトの名無しさん
04/03/24 07:24
足りないこと
・(すでに)C/C++言語並みに広まっていること
・C/C++のようにどこでも動くこと(最近のPCでも、組み込み機器でも)
376:デフォルトの名無しさん
04/03/24 09:17
それは言語が普及する原因ではなく、結果ですよ
377:デフォルトの名無しさん
04/03/24 09:51
>>373
お前、括弧の使い方が下手だな。
その文章、激しく読みにくいぞ。
378:デフォルトの名無しさん
04/03/24 10:49
>>376
分からないかな。
"普及すれば普及する"というロジックが。
最初の出発点は些細なことでしょ。(Lispは重すぎたとか)
379:デフォルトの名無しさん
04/03/24 11:13
>>378 言いたいことは、分かるよ。原因と結果が循環するということね。
ただそれは、ある言語が普及しだして、一応、人気が軌道にのってからの話しでしょ。
>最初の出発点は些細なことでしょ。
最初の一撃ってけっこう大切なことでしょ。それが些細なことであっても。
380:デフォルトの名無しさん
04/03/24 11:17
しかし、今となってはLispが重いとか言っている年寄りは、そろそろ引退してくれる頃だよね。
381:デフォルトの名無しさん
04/03/24 13:07
(だが、気をつけ給え。その論理の行き着く先はIf Lisp Is So Greatだ。)
382:デフォルトの名無しさん
04/03/24 22:57
>>380
いいから、携帯でLisp動かしてみろ。GBAでもいいよ。
PCとかワークステーション以外は、始める前から年寄り引退確定か
383:デフォルトの名無しさん
04/03/24 23:07
多分動かすだけなら難しくはないな
>382 は自分でLisp処理系を作ったことがないのか?
384:デフォルトの名無しさん
04/03/25 00:42
動かすだけなら難しくないと思う。
>382 はILC2003で絶賛された湯浅センセのXSでも勉強すれ。
hxxp://www.xslisp.com/
385:デフォルトの名無しさん
04/03/25 06:45
・動かすだけなら難しくない
・処理系作れ
馬鹿の一つ覚えですか?
Cだったらすでにコンパイラがあったりするわけですよ。
お前らは、新しい環境が着たらそのたびに、コンパイラ作ってるのかと小一時間・・・
もう、Lisperとやりあうのは疲れた
386:デフォルトの名無しさん
04/03/25 07:43
「新しい環境」が来たらそのたびに、 C だって移植作業してるんじゃないかな。
「新しい環境」を作った人達が一緒に開発するかもしれないけど。
「すでに」あるかどうかは、その環境と言語がどれだけ普及してるかって話でしかないと思う。
387:デフォルトの名無しさん
04/03/25 08:58
>>382
> いいから、携帯でLisp動かしてみろ。GBAでもいいよ。
たしか、LispMeという処理系がPalm PilotというPDAで動いていたな。
携帯とかGBAとかでも、開発環境が入手しやすければ、だれかが動かしても
おかしくないね。LispといってもCommon Lispのようにライブラリ的な機能が
豊富にそろっている言語から、Schemeみたいに山椒は小粒で…みたいなものまで
色々あるんだよ。
>>385
>Cだったらすでにコンパイラがあったりするわけですよ。
たしかに最初から使えれば便利だね。Cでそのままプログラミングするか、
Lispのようなもう少し抽象化が行われた言語を実装してから作業するか、
そのコストの見積りだろうね。
>お前らは、新しい環境が着たらそのたびに、コンパイラ作ってるのかと小一時間・・・
だれかが作業をやってくれていなければ、自分でやるか、人にやってもらうしかないでしょう。
それは、Cでも変わらないよ。ただCとLispの守備範囲はあまり、かぶらないと思うけど。
388:デフォルトの名無しさん
04/03/25 09:17
最近は組み込み用途にも、C++やJavaを使う事があるらしいね。ここらへんならLispとかぶるかね。
389:デフォルトの名無しさん
04/03/25 10:21
>>385
ならバックエンドにはすでにある C コンパイラを利用するような
拡張をするという手もあるよ.C のソースを出力すりゃいいわけで
仲良くやってけるじゃん.なんで勝手に対決姿勢になってんの?
390:デフォルトの名無しさん
04/03/29 11:23
390 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 23:04
そういやKCLはオブジェクト言語がCだったような。
391:デフォルトの名無しさん
04/03/29 11:25
391 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 23:54
ターゲット用の専用言語(GC 無しとかね)を作るのも楽だな.S 式ベースで構文考
える手間が少ないし.C のソース出力でもアセンブラ出力でもバイナリ出力でも気合
いと時間に応じて自由に選べるし.
392:デフォルトの名無しさん
04/03/30 23:28
392 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26(木) 23:54
あれ?誰もいない・・・
393:デフォルトの名無しさん
04/03/31 13:39
393 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26(木) 23:59
ジリリリリリリリリーン
394:デフォルトの名無しさん
04/03/31 22:48
結局Schemeに戻ってきてしまった.
395:デフォルトの名無しさん
04/04/01 05:12
slime のマニュアル。既出じゃなかったような気がするので一応。
URLリンク(www.bluetail.com)
396:デフォルトの名無しさん
04/04/01 05:18
slime のマニュアル。既出じゃなかった気がするので一応。
URLリンク(www.bluetail.com)
397:デフォルトの名無しさん
04/04/02 11:25
slime のマニュアル。既出じゃない気がするので一応。
URLリンク(www.bluetail.com)
398:デフォルトの名無しさん
04/04/03 19:22
slime のマニュアル。既出でない気がするので一応。
URLリンク(www.bluetail.com)
399:デフォルトの名無しさん
04/04/03 21:15
(gc)
400:デフォルトの名無しさん
04/04/04 03:16
荒らし?
401:デフォルトの名無しさん
04/04/04 13:04
('A`)
402:デフォルトの名無しさん
04/04/04 22:56
「警察だ。ドンドンドン。開けろ。荒しの容疑で逮捕する。開けなさい。」
「ふぁ~(眠)け、けいさつ~?」
「そうだ。警察だ。早く開けなさい。」
「け、けいさつ~?ここは、けいさつじゃないよ~。」
「ふざけるな。私は警察だぞ。いつまで寝たふりしてるんだ。早く開けろ。」
「ふぁ~(眠)ね、ねた~?ね、ねたなんて、ふってないよ~」
「ネタ振りじゃないよ!寝たふりだよ!このやろう!無駄な抵抗は止めろ!」
「ね、ねたふり~?こ、ここは、ネタスレじゃないよ~。」
「ここはネタスレじゃないよ!ここをネタスレ化している荒らしはお前だろ!いいから開けろ!」
「あらし~?」
「そうだ。容疑を認めるならさっさとここを開けなさい!」
「こ、ここは、ゲームセンターじゃないよ~」
「俺はアラシじゃないよ!!お前が荒らしなんだよ!なんだよっゲームセンターって!!!炎のコマかよ!・・・」
「・・・」
「・・・」
(;´∀`)
403:デフォルトの名無しさん
04/04/04 23:18
(;´∀`)
nil
404:デフォルトの名無しさん
04/04/05 23:01
>>403
うれピー!!!
(;`∀`) 韮韮韮韮韮韮韮韮韮
韮韮韮韮韮韮韮韮韮
韮韮韮韮韮韮韮韮韮
韮韮韮韮韮韮韮韮韮
405:デフォルトの名無しさん
04/04/05 23:28
春爛漫
406:デフォルトの名無しさん
04/04/06 00:34
>>405
>>春爛漫
1/2 なんちゃって!
407:デフォルトの名無しさん
04/04/06 12:20
Kahua使ってる人いる?
感想聞かせて
408:デフォルトの名無しさん
04/04/06 13:19
cmucl19a期待age
409:デフォルトの名無しさん
04/04/06 13:28
cmuclの新しいCLOSで以下の式を評価すると何が返りますか?
(class-name (class-of (class-of #'make-instance)))
ちなみに、cmucl18eだとstandard-class、clisp 2.33だとbuilt-in-class
ですが、MOP的には、funcallable-standard-classが正しい気がします。
410:デフォルトの名無しさん
04/04/08 23:09
初心やスレからやってきました。
LISP初心者です。
ここのスレの皆様方に教えっていただきたいことがあるのですが、
WINDOWS版のCL-HTTPを落としたいのですが、MITのHPのダウンロード
できそうなリンクがほとんどエラーになるのですが、CL-HTTPを
ダウンロードするにはどうすればいいんでしょうか?
よろしくお願いします。
411:デフォルトの名無しさん
04/04/08 23:41
ハァ
412:デフォルトの名無しさん
04/04/09 18:44
〃〃∩ _, ,_
⊂⌒( `Д´) < WINDOWS版のCL-HTTPを落としたいよ~!
`ヽ_つ ⊂ノ
ジタバタ
413:デフォルトの名無しさん
04/04/09 20:23
>>409
[gcl 2.5.3]
Error: The function CLASS-NAME is undefined.
[ecl 0.9c]
STANDARD-CLASS
[sbcl 0.8.6]
SB-PCL:FUNCALLABLE-STANDARD-CLASS
414:デフォルトの名無しさん
04/04/10 08:40
やさしいLisp入門
URLリンク(www.cutt.co.jp)
こんなもん出てるようだけど、どうなん?
415:デフォルトの名無しさん
04/04/10 09:06
4200円! たっか~。
どうみても入門書でたいして面白そうな例題もないこの内容で、この値段。うーむ。
416:デフォルトの名無しさん
04/04/10 09:10
CLOSどころかマクロのマの字もないな。
417:デフォルトの名無しさん
04/04/10 15:34
ネタじゃないんだよね?
他のやさしいシリーズの倍近い値段は置いておくとして
(ページ数も倍の480だし)、
よりによってCommonも何もついてないLISPとは、
いったいどういうことなのか。
読んでみないことには何とも言えないけど、
最終章にコンパイラとローダとリンカがあるということは、
やっぱりCommonLISPなのか。
日本のLISP業界にとって歴史的事件となるのかどうか。
418:デフォルトの名無しさん
04/04/10 17:32
>>409
>(class-name (class-of (class-of #'make-instance)))
LispWorksPersonalEditionで試してみると
FUNCALLABLE-STANDARD-CLASS
だね
419:デフォルトの名無しさん
04/04/10 19:49
The Evolution of Language
URLリンク(homepages.inf.ed.ac.uk)
420:デフォルトの名無しさん
04/04/10 20:37
>>417
> よりによってCommonも何もついてないLISPとは、
> いったいどういうことなのか。
書店で立ち読みしたところ第一章にCommon Lispと明記してあったのだが。
何を見当違いのことで騒いでいるのかね。
421:デフォルトの名無しさん
04/04/10 20:47
>>420
内容はどうだったの?
422:デフォルトの名無しさん
04/04/10 23:52
>>409
手元ではこんなんですが.
CMU Common Lisp pre19a 20040410, running on lavie
With core: /home/lambda/local/lib/cmucl/lib/lisp.core
Dumped on: Sat, 2004-04-10 11:20:09+09:00 on lavie
See <URLリンク(www.cons.org) for support information.
Loaded subsystems:
Python 1.1, target Intel x86
CLOS based on Gerd's PCL 2004/01/09 04:34:17
* (class-name (class-of (class-of #'make-instance)))
PCL:FUNCALLABLE-STANDARD-CLASS
*
423:409
04/04/11 16:59
情報を頂いたみなさん、ありがとうございました。
FUNCALLABLE-STANDARD-CLASSの方が、MOP的に「正しい」とまでは言えないかもしれないけど、
「そのほうが自然」とは言えるかな?
clispの開発者の人が1、2年前にMLで、「FUNCALLABLE-STANDARD-CLASSをサポートしないの?」と
尋ねられて、「自分で書いても同じような事を手軽にできるし、ANSI規格でもないから、今のところ
作業予定はないよ」と言っていました。
424:デフォルトの名無しさん
04/04/15 22:32
>>423
ACL がでてないみたいなので一応書いておく。
CL-USER(1): (class-name (class-of (class-of #'make-instance)))
ACLMOP:FUNCALLABLE-STANDARD-CLASS
ACL 6.2 にて。
425:デフォルトの名無しさん
04/04/17 19:19
scheme age
426:デフォルトの名無しさん
04/04/18 12:35
xyzzyでLispをやり始めたんですが
(- 1)
はなぜ-1になるのでしょうか?
引数が一つの時は引数に-を付けて返す、というのが関数として定義されてるから
という理解でいいのでしょうか?
427:デフォルトの名無しさん
04/04/18 12:40
>引数が一つの時は引数に-を付けて返す、というのが関数として定義されてるから
>という理解でいいのでしょうか?
いいです。
Function `-'
URLリンク(www.lispworks.com)
> If only one number is supplied, the negation of that number is returned.
428:デフォルトの名無しさん
04/04/18 12:54
>>427
関数定義されてるから、という理解でよかったみたいですね。
どうもでした。
429:デフォルトの名無しさん
04/04/18 13:01
(*)
は1
(+)
は0
430:デフォルトの名無しさん
04/04/18 13:10
>>428
-を付けて返すと、the negation of that number is returned は全然違うぞ
431:デフォルトの名無しさん
04/04/18 13:13
428さんじゃないけど、具体的に結果が違ってくる例みたいなものを教えていただけますか?
432:428
04/04/18 13:21
>>430
その数の否定を返す→正負反転して返す、という理解ではどうしてダメなんでしょうか?
433:デフォルトの名無しさん
04/04/18 17:29
negateは正負反転の意味で普通に使われてるし、
the negation of taht number は正負反転した数のこと。
negative numberというぐらいだから、負は正の「反対」だと
自然に思っているのだろうね。
434:デフォルトの名無しさん
04/04/18 19:07
>>432
「-を付けて返す」と「正負反転して返す」は全然違うぞ
435:デフォルトの名無しさん
04/04/18 19:40
だから馬鹿みたいに違う違うって言わずに431が言ってるみたいに例をもってくるとか
何が、どう違うかいいなよ。
436:デフォルトの名無しさん
04/04/19 00:26
つまり430=434がこれから始めたい事とは、
「-を付けて返す」という言い回しに対しての、
無益な重箱の隅を突く日本語講釈ですか?
(最近、関数型関連スレはこの手の変な人が増えて悲しいですね。)
ところで、
(- -1)
この式は何が返ると思いますか?
437:デフォルトの名無しさん
04/04/19 07:02
-を90度回転させてから前につけて +1
438:デフォルトの名無しさん
04/04/19 08:20
予想1:絶対値の符号反転したもの。 (- -1) => -1
予想2:文字通り (- -1) => "--1"
439:デフォルトの名無しさん
04/04/19 08:43
>(- -1)
>この式は何が返ると思いますか?
>予想2:文字通り (- -1) => "--1"
字面レベルでの議論だとは気がつきませんでした。
複素数の場合かなとも想像していました。
440:デフォルトの名無しさん
04/04/19 11:43
(- -1) => (^_^)
('A`) => (-_-)
(゚д゚) => (゚∀゚)
(* ゚▽゚) => ゚▽゚
441:デフォルトの名無しさん
04/04/19 21:25
バッククォートって、list や cons で書いたのと等価じゃないんですか?
なんだか処理系によって値が違うんですが。
(defun bq (x) `(,x nil))
(defun ls (x) (list x nil))
(let ((l nil) (m nil))
(push (bq 1) l) (push (bq 2) l) (push (bq 3) l)
(rplaca (cdar l) t) (print l)
(push (ls 1) m) (push (ls 2) m) (push (ls 3) m)
(rplaca (cdar m) t) (print m))
を評価すると、clisp では
((3 T) (2 NIL) (1 NIL))
((3 T) (2 NIL) (1 NIL))
となるんですが、CMUCLでは
((3 T) (2 T) (1 T))
((3 T) (2 NIL) (1 NIL))
と異なる結果になるんです。言語仕様上どっちが正しいんでしょうか?
442:デフォルトの名無しさん
04/04/20 03:50
>>441
このへんかな
Once again, it is emphasized that an implementation is free
to interpret a backquoted form as any form that, when evaluated,
will produce a result that is equal to the result implied by
the above definition. In particular, no guarantees are made
as to whether the constructed copy of the template will or
will not share list structure with the template itself.
cltl2
22.1.3. Macro Characters
443:デフォルトの名無しさん
04/04/20 08:05
Common Lisp Hyperspec 2.4.6 Backquote
URLリンク(www.lispworks.com)
によると、`(,x nil) = (append (list x) (list 'nil)) = (list x nil)
となり、さらに、side-effectについて、
>An implementation is free to interpret a backquoted form F1 as any form F2 that,
>when evaluated, will produce a result that is the same under equal as the result
>implied by the above definition, provided that the side-effect behavior of
>the substitute form F2 is also consistent with the description given above.
になるから、cmuclは間違いの気がする。
... share list structure ... のくだりは、backquoted formからreaderが作るform自体が
templateと相似構造なformである必要はないと言っているのであって、template自体を構成する
consを共有して使いまわしていいと言っているわけではないと思う。
444:デフォルトの名無しさん
04/04/20 10:33
バッククォートの解釈は、結果が(equalの意味で)等しければ実装は自由。
`(,x nil) は次の何れにも解釈できる。
(append (list x) (list 'nil) 'nil)
(append (list x) (list 'nil))
(append (list x) '(nil))
(cons x '(nil))
(cons x (list 'nil))
... etc
したがって、規格ではどちらも正しい。
side-effectはこの場合関係ない。
445:443
04/04/20 11:32
>>444 了解。規格の例をもっと読むべきでした。
最初は、俺もquoteの一種だから変更するべきじゃないと、
正しく解釈していたんですが規格を誤読して解釈を変えてしまいました。
書き直さなきゃならないコードがあるな。ありがとう。
この場合、cmuclは以下のような事をやって、consしないようにしていると
いうわけね。
(let ((list (list nil nil)))
(defun bq (x)
(setf (car list) x)
list))
446:デフォルトの名無しさん
04/04/20 12:24
>この場合、cmuclは以下のような事をやって、consしないようにしていると
>いうわけね。
例が間違っていました。忘れてください。
447:441
04/04/20 12:56
トップレベルのリストも全て cons とは限らないというわけですね。
(defun bq1 (x) `(,x 1 2))
(defun bq2 (x) `(,x 1 2 ,x))
(let ((l nil) (m nil))
(push (bq1 0) l) (push (bq1 0) l)
(rplaca (cdar l) 3) (print l)
(push (bq2 0) m) (push (bq2 0) m)
(rplaca (cdar m) 3) (print m))
を CMUCL で評価したら
((0 3 2) (0 3 2))
((0 3 2 0) (0 1 2 0))
となりました。リストの末尾に定数リストが来ていると使い回されるようです。
448:デフォルトの名無しさん
04/04/20 14:03
>リストの末尾に定数リストが来ていると使い回されるようです。
そうみたいですね。それで、その分、consする回数が減ってリソースの節約になり、
それは規格で許された動作であると。
449:デフォルトの名無しさん
04/04/20 14:09
一応貼っておく。Emacs Common Lisp。
URLリンク(www.lisp.se)
450:デフォルトの名無しさん
04/04/22 14:04
外国でxyzzyのこと知っている人は、どれくらいいるのだろう?
451:デフォルトの名無しさん
04/04/22 15:34
とりあえずぐぐってみてはどうか。
452:デフォルトの名無しさん
04/04/22 18:08
Windows マインスウィーパーの隠しコマンドが
xyzzy なんだけどなんか関連ってあんの?
453:デフォルトの名無しさん
04/04/22 19:14
とりあえずぐぐってみてはどうか。
454:デフォルトの名無しさん
04/04/23 07:34
foo bar
455:デフォルトの名無しさん
04/04/23 07:41
>>452 魔法の呪文として「xyzzy」を使うことがあるみたい。出典知っている人いる?
>>451 >とりあえずぐぐってみてはどうか。
googleで調べてみたけど、結果を絞りきれなかった。Emacs系エディタリストには記載が
あったけど、情報は名前だけ。Common Lispのサブセットを搭載しているという情報はなし。
456:デフォルトの名無しさん
04/04/23 16:55
ADVENT(初期のコンピュータゲーム)の魔法が出典。
Jargon Fileの
URLリンク(www.catb.org)
を参照。
457:デフォルトの名無しさん
04/04/26 16:31
すんません、cmucl19のソースを入手するにはどうしたらいいんですか?
cmucl web siteの指示どおりanonymous cvsで入手しようとすると、
/home/anoncvs/CVS-cmucl: no such repository
と言われて失敗します。
458:デフォルトの名無しさん
04/04/27 01:05
>>457
hxxp://common-lisp.net
459:デフォルトの名無しさん
04/04/27 11:08
>>458
ありがとう、入手できました。
linuxのfirefoxでcommon-lisp.netを表示すると、トップページの横一列になった項目に
打ち消し線がかかっているように見えるので、ずっと、改装中なのかと思っていたよ。
たぶん、単なる下線の表示がおかしくなっているのね。
460:デフォルトの名無しさん
04/04/27 13:41
stklosとstkはwindows98でも使えますか?
461:デフォルトの名無しさん
04/04/27 16:36
>>460 STk は動くはず。stklos は Windows はダメなはず。
462:マグデジニウム偏角線
04/04/28 18:22
schemeの継続についての質問です。
処理系はgaucheを使っています。
(begin (call/cc (lambda (x) (set! cont1 x)))(display "山崎13\n"))
でcont1に代入される継続と、
(call/cc (lambda (x) (set! cont2 x)))(display "山崎13\n")
でcont2に代入される継続が違うのは何故ですか?
cont2には、
「(display "山崎13\n")を評価する」
と云う継続が代入されるのではないかと思ったのですが、なぜそうではないのでしょうか?
463:デフォルトの名無しさん
04/04/28 18:38
トップレベルまでだから。
464:462
04/04/28 19:40
>>463
そういう解釈で良いのですね、
ありがとうございました。
465:デフォルトの名無しさん
04/05/02 20:44
URLリンク(www.asahi-net.or.jp)
暇に飽かせてANSI CommonLispの解答っぽいものを作ってみました。
誤り、勘違いなどあったら教えて頂けるとありがたいです。
466:デフォルトの名無しさん
04/05/03 09:34
>>465 あんたは、えらいっ!
467:デフォルトの名無しさん
04/05/03 09:37
atom: a
list: (a b c)
tree: (a (b) ((c))))
graph: #1=(a #2=(b . #1#) . #2#)
graphのもっとよい表記法を希望します。
468:デフォルトの名無しさん
04/05/03 18:59
URLリンク(www.geocities.co.jp)
Scheamて。
それにDrShcemaとはなんや?
>私が読んで良かったなー、と思っている本を紹介します。
ほんとに読んだのか?
・・・まあそれはともかく、
紙媒体の参考資料集としては使えるかも。
469:デフォルトの名無しさん
04/05/03 19:31
>C++を使うために絶対読まなければならない本
11冊は多すぎ。一冊読めば使えるだろ。しかもC++を使う⇒=Windowsユーザと勘違いしてるし、
他の項目も同様。
470:デフォルトの名無しさん
04/05/03 20:37
誰?
471:デフォルトの名無しさん
04/05/03 21:17
俺だよ俺!
472:デフォルトの名無しさん
04/05/04 14:40
schemeで循環参照を印字する方法って規定されてるのでしょうか。
(define x (cons 'x 'x))
(set-car! x x)
(set-cdr! x x)
x
==> ???
473:デフォルトの名無しさん
04/05/04 17:29
srfi-38のwrite/ss (write-with-shared-strcture)
URLリンク(srfi.schemers.org)
x => #0=(#0# . #0#)
474:デフォルトの名無しさん
04/05/05 20:50
schemeの局所関数について質問です.
(define (f x)
(define (g x) (* x x))
(g (* x x)))
とした場合gはfの定義時に定義されるのでしょうか,
それとも実行時でしょうか.
もし実行時だとすると次の式と等価なのでしょうか.
(define (f x)
(let ((g (lambda (x) (* x x))))
(g (* x x))))
475:デフォルトの名無しさん
04/05/05 22:58
letではなくletrecだろ?
(define (f x)
(letrec ((g (lambda (x) (* x x))))
(g (* x x))))
476:デフォルトの名無しさん
04/05/05 23:39
>>475
let でいい
477:デフォルトの名無しさん
04/05/06 00:24
>>476
この場合は、だろ
478:デフォルトの名無しさん
04/05/06 00:48
>475 に賛成.
; (define (f x)
; (let ((g (lambda (x) (* x x))))
; (g (* x x))))
は
(define f
(lambda (x)
((lambda (g) (g (* x x)))
(lambda (x) (* x x)))))
と等価だからこのgは定義されてるとはいえない.
例えば,
(define (f x)
(define (g x) (if (= x 0) 0 (+ x (g (- x 1)))))
(g (* x x)))
か
(define (f x)
(let ((g (lambda (x) (if (= x 0) 0 (+ x (g (- x 1)))))))
(g (* x x))))
かのどちらをとるかで
(let ((g (lambda (x) x)))
(f 3))
を評価した結果が違う.
479:デフォルトの名無しさん
04/05/06 00:58
>>476は当然この場合の話をしているのだと思うが。
そんなことより、質問の答えが知りたい。
480:デフォルトの名無しさん
04/05/06 01:20
答えは等価。でも質問の前提の実行時とか定義時という
考え方がおかしい。定義は実行されない。
481:479 != 474
04/05/06 01:49
>>480
(define (f x) ..
(define (g x) ..
だと、fが定義されるときにgも定義されそうだが、
(define (f x) ..
(let ((g ..
だと、gに値が束縛されるのは実行時ではないか、
ということだと思うが、結局何が違うのかは俺にはよくわからん...
482:デフォルトの名無しさん
04/05/06 02:38
(define (f x)
(define (g x) (+ 1 x))
(set! g (let ((g g)) (lambda (x) (+ 1 (g x)))))
(g x))
こんなんだったら違いがでるんじゃない?
483:デフォルトの名無しさん
04/05/07 14:03
パフォーマンスを意識したプログラミング
Programming as if Performance Mattered
URLリンク(www.dadgum.com)
484:デフォルトの名無しさん
04/05/07 21:10
>>473
ありがとうございます。
SRFIにあったとは気づきませんでした。
英語読まないとだめですね・・・。
485:デフォルトの名無しさん
04/05/08 09:09
>>481
トップレベルのdefineとinternal defineは、字面は同じ
"define"だけど、全然別物だよ。
前者はトップレベルの束縛を定義するもの。後者はレキシカル
変数の束縛を定義するシンタックスシュガーでletrecと同じ。
486:デフォルトの名無しさん
04/05/08 16:01
>>485
それで納得。CommonLispのdefunとは違うんだね。
>>484
Schemeで、REPループがwrite/ssを使うように指示するにはどうすんのかな。
CommonLispなら変数*print-circle*をtrueに設定すればいいのだけれど。
487:474
04/05/08 21:36
みなさん回答ありがとうございました.
局所関数定義(internal define)とletrecが等価だということは,
パフォーマンスが要求される部分では局所関数定義を避けた方がいいということですよね.
(define (f x)
(define (g x) (* x x))
(g (* x x)))
↑は↓こうした方が速い
(define (f x)
(f-g (* x x)))
(define (f-g) (* x x))
488:デフォルトの名無しさん
04/05/08 22:40
>>487
そんなのは処理系依存
多少賢い処理系ならどっちもパフォーマンス的には同じかと
さらに賢く最適化をする処理系なら前者の方が良くなるはず
489:デフォルトの名無しさん
04/05/09 04:08
>>487
Internal defineが毎回コンパイルされると思ってるみたいだが、
そんなペナルティはない。evalじゃないんだから。安心して使え。
490:474
04/05/09 08:03
>>488-489
純粋に言語仕様だけを見れば,gのinternal defineの定義はfの実行時に毎回行われますよね.
でもそれなりの処理系を使っている限り,最適化してくれるので意識する必要はないということかな.
最適化というのは>>487のような変換を処理系が自動でやってくれるということでしょうか.
491:デフォルトの名無しさん
04/05/09 15:05
>>490
> 純粋に言語仕様だけを見れば
どこにそんな仕様が?
> 最適化というのは>>487のような変換を処理系が自動でやってくれるということでしょうか.
違う
後者の場合、f のコンパイル時には f-g は再定義される可能性があるため特定できないが、
前者の場合、f のコンパイル時には g が再定義される可能性は無いため (g (* x x) をインライン展開できる。
492:デフォルトの名無しさん
04/05/09 15:51
>>490
> 純粋に言語仕様だけを見れば,gのinternal defineの定義はfの実行時に毎回行われますよね.
確かに、インタープリタの場合、あなたの言う通りに遅くなる処理系が
存在する可能性もあるけど、そのレベルの事を心配して、コーディングを変える必要は
ないことが多いのでは。
493:474
04/05/09 22:41
>>491-492
ありがとうございます.
なるほど,インライン展開ですか.考えていませんでした…
中身をある程度知っていないと効率的にしようと思った対策が
逆効果ってことはよくありますよねぇ.
494:デフォルトの名無しさん
04/05/10 01:43
効率なんてのはSchemeをもっと理解してから考えろよ。
外したレスなんでアドバイスに困る。
495:デフォルトの名無しさん
04/05/11 07:43
インライン展開は抜きにしても、
「gのinternal defineの定義はfの実行時に毎回行われますよね」
と書いている時点でclosureというものを激しく誤解している予感。
最も単純な(最適化しない)実装でも、closure g作成のコストは
f実行一回あたりcons一個分。
496:デフォルトの名無しさん
04/05/11 08:28
>>495
closure g作成のイメージは、
(define g (list 'closure '(lambda (x) (* x x)) current-lexical-environment))
みたいな感じでいいのかな。
497:デフォルトの名無しさん
04/05/12 01:30
変数xというのを残してもいいけど、それだと毎回
環境からxを探すコストがかかってしまう。
レキシカルスコープでは毎回同じxが発見される
ことになるんだから、ローカルにバインドされた
識別子はコンパイル時に参照に置き換えられるのが普通。
実行時には、レキシカル変数はもはやシンボルや
identifierではなく、名前のわからない、ただの参照になってる。
498:デフォルトの名無しさん
04/05/13 12:33
guileを検索したら↓がpageRankの上位にあったのだが、、
URLリンク(www.guile.jp)
499:デフォルトの名無しさん
04/05/13 20:53
ガイルがいる
500:デフォルトの名無しさん
04/05/13 20:57
【誰でもできる47氏支援運動!】
【以下の文章を、各種掲示板にコピペして47氏を救おう!】
すみません、貴サイトには直接は関係のない話題ですが、
広くネットに携わるものとして、いや、日本国民として、真剣に考えるべき事案であると考え、あえて宣伝させていただきます。
管理者様、もし、不適切とお感じならば、どうぞ削除なさってください。
先日、著作権違反の幇助との名目で、ファイル交換ソフトwinnyの製作者で、東京大学助手の金子勇氏(通称47氏)が逮捕されました。
しかし、winnyそれ自体は、違法なファイルの流通だけでなく、合法なファイルの流通も可能なものであり、著作権を違反するか否かは、ソフトの作成者ではなく、ソフトの使用者に、その責任がゆだねられるべき問題であります。
さきに、winnyを使用して、著作権違反で逮捕された二人のユーザーは、47氏と何らつながりのない人間であり、「幇助」の理由を付して逮捕するには、あまりにも無理があります。
以上の観点から、私たちは、Winny開発者、47氏に対する不当逮捕に強く抗議します!!
京都府警は、逮捕の理由として、「『著作権法への挑発的態度』が逮捕理由」に挙げたと、報道されています。この報道が真実であるとすれば、これは思想信条の自由の侵害であり、「思想犯」として不当逮捕したものと断ぜざるを得ません!!
これはもはや著作権の問題ではなく人権問題です!!皆様のご協力をお願いいたします。
詳しくは、下記ページをご覧下さい!
Winny開発者 47氏を救う為に
URLリンク(77483.org)
ネットワークの自由防衛同盟
URLリンク(www.netfreedom.tk)
プログラマ仲間の新井氏が設置したblog(47氏支援運動など)
URLリンク(www.moodindigo.org)
また、本運動に賛同される方、お知り合いの掲示板などに、本文章を掲示していただけると幸いです。
501:デフォルトの名無しさん
04/05/14 19:04
Scheme美しすぎ
502:デフォルトの名無しさん
04/05/14 20:34
Scheme かわいいよ Scheme
503:デフォルトの名無しさん
04/05/16 16:33
"on lisp"の翻訳は最近すすんでるの?
504:デフォルトの名無しさん
04/05/19 02:44
ごめんなさい、すすめますた
505:デフォルトの名無しさん
04/05/19 07:41
いや、催促じゃなくて、応援しているよってことね。
506:デフォルトの名無しさん
04/05/19 07:57
普通に読めば催促だわな
507:デフォルトの名無しさん
04/05/19 08:08
そりゃ、考えすぎ。普通に読めば、現状を聞いているだけ。
508:デフォルトの名無しさん
04/05/19 08:12
字面だけをみれば聞いてるだけ
だが、普通に読めば催促にしか読めないだろう。
509:デフォルトの名無しさん
04/05/19 08:22
おっ、雑談か。「普通」ね。
まず、尋ねている人が翻訳版「On Lisp」の読者かどうかさえ、分からないでしょう?
それに、翻訳者に向けて書いたのかさえ分からないし。自分でチェックするのが
面倒だから、誰かに聞いたとか。
あんまり自分の「普通」を信用しすぎないほうがいいよ。
510:デフォルトの名無しさん
04/05/19 08:35
みんなが「普通」に「普通」と言う言葉を使っているから俺も「普通」と言ってみただけだよ
509を発言したのが507だったら笑い話にしかならないけど。
511:デフォルトの名無しさん
04/05/19 08:42
509=507が、
「みんなが「普通」に「普通」と言う言葉を使っているから俺も"揶揄をこめて"「普通」と言ってみただけだよ」
と言ったら?
512:デフォルトの名無しさん
04/05/19 09:11
それならわざわざ「普通」議論を持ち出す意味が無いな。
513:デフォルトの名無しさん
04/05/19 09:19
その程度か、君はもっと出来る人のはずだ。
507のような意見を「普通」と考える人もいる。
また、507は出来るだけ「字面」のみで判断しようとしている点で、
できるだけ広い「普通」をカバーしようとしている。
「ことほどさように"普通"には同じ日本語を使う者の中でも差異がある」と
509は"普通"議論をもちだしたのではないの?
506が「"俺"には催促に聞こえるな」と言っていれば"普通"の意見だろうけどな。
514:デフォルトの名無しさん
04/05/19 09:24
雑談うぜえ。
515:デフォルトの名無しさん
04/05/19 09:27
いくら広い「普通」をカバーしようとしたところで
裏づけが無ければその「普通」は507の中での「普通」でしかないわけで
507自身が509の発言をするのは結局のところ自分の中の「普通」を
棚に上げた都合のいい「普通」感の押し付けでしかないということだ。
516:デフォルトの名無しさん
04/05/19 11:28
lisp> (eq '俺:普通 'みんな:普通)
nil
lisp> (in-package :俺)
#<The 俺 package>
lisp> (use-package :みんな)
Error: Using package `みんな' results in name conflicts for these symbols: 普通
[condition type: package-error]
517:デフォルトの名無しさん
04/05/19 13:14
普通の奴らの上を行けよ、おまいら。
518:デフォルトの名無しさん
04/05/19 13:32
これからは、「CommonLisp」を「普通のLisp」と呼ぶことを推奨します。
519:デフォルトの名無しさん
04/05/19 17:47
URLリンク(jp.franz.com)
520:デフォルトの名無しさん
04/05/19 18:09
>>519
けっこう、おもしろそうだ。つーか、まとまった資料を読みたく思う。
521:デフォルトの名無しさん
04/05/19 19:17
行きたかったけど、平日か・・・
誰か実況たのむ
522:189=312
04/05/19 20:19
ようやく和田研フォントキットの Common Lisp への移植ができました。
URLリンク(cvs.sourceforge.jp)
>>191 さんに助けていただかなければ絶対あきらめていました。ありがとう
ございます。
>>519 のセミナーに行かれる方がいらっしゃいましたら、>>189 が感謝して
いたと和田先生にお伝えいただければ望外の喜びです。
523:デフォルトの名無しさん
04/05/20 07:42
>>519
>ACL7.0の新しい正規表現ライブラリ 講演者: 川合史朗
Shiroさんはgaucheの開発をしながら、こんなライブラリを書いているのか。すごいね。
Edi WeitzさんのCL-PPCREとの比較レビューを読みたいな。
ACL Trial Editionはまだ6.2か。
524:デフォルトの名無しさん
04/05/20 21:29
>>523
あと Kahua もやってるでしょ
525:デフォルトの名無しさん
04/05/21 09:31
Common Lisp から RDB を利用した∈ですが,何か良い
フリーのライブラリってありますか?
ACLだとあるみたいですが,フリーはなかなか見つからない・・・
526:デフォルトの名無しさん
04/05/21 11:04
CLSQL, Uncommon SQLとかかな。
527:525
04/05/21 12:35
>>526
ふたつもあるんですね.
とりあえず Uncommon SQL のほうから試してみようと思います
ありがとうございました
528:デフォルトの名無しさん
04/05/21 13:55
shiroは有名だか、折れ的には新山を応援したい所だ。なんつーかアホの新山の
ページ見ていると同じ人種だなっていうか、哲学とか高度な話題をさりげなく
振ってしまう高学歴lisperの中でもヒトキワ庶民派って言うか、アホな記事を
読んでいたりすると、(例えばメリケンは飯の味はわからねぇと文句タレる新山)
Oh,Pretty!なんて感じたり。ヒヒヒッ。
同じ穴のムジナっていうかにほいがするんだよね。っーつわけで新山センセもがんばって
メリケンのように弾けまくっってください。
529:デフォルトの名無しさん
04/05/21 15:28
シソヤマは自意識つよすぎで恐いよ。
530:デフォルトの名無しさん
04/05/21 17:54
lisperじゃなくてpythonerだと思うけどな。
最新のアホ GtkYes URLリンク(www.unixuser.org) の
無意味さにはワラタ (ダイアログ全てにビシバシ [Yes] を押してくれる
ランチャーのような単なる実用プログラムを彼が作るはずがない)。
531:デフォルトの名無しさん
04/05/22 15:15
ブサイクフィルターとか美人フィルターというネタもあるが、アレは新山じゃ
なかったか。
新山ネタをフりつつ真面目な話をして恐縮なのでありますが、Symbolicsのマシン
を知って思ったのです。lispでレンダリング(行列計算や座標計算)までやって
いるのだろうか?と。例えばcのmallocのようなヒープの確保をするような場面
ってあるじゃないですか。ピットマップを操作する場合などですが、その場合
lispではどのように処理しているのだろう?と疑問に思ったのです。
GIMPのスクリプトもscheme系らしいですが、Cやfortranならば配列とかmalloc
である程度のメモリーを確保してそのメモリーへの各種操作という形になります
よね。lispだとリスト処理や記号処理のイメージが強くてどうしてもSymbolicsの
ようなCGのビットマップ操作や座標変換、行列の計算のイメージが全く頭に浮かばない
のですが、詳しい人この辺りの話しりませんか?
532:デフォルトの名無しさん
04/05/22 15:59
組み込みでそういう操作を入れればいい。
533:デフォルトの名無しさん
04/05/22 16:07
Symbolicsは知らないけど、Common Lispには配列型やベクタ型が用意されていて、
bit-vector型なんてのもあるから、ビットマップ操作は普通にできる気がします。
行列型はないけど、多次元配列は使えるので、行列の操作関数群もだれかがすでに
書いて公開している気がします。
534:デフォルトの名無しさん
04/05/22 18:48
Symbolicsは使ったことないけど。
optimizeでspeed最高、safety最低にしてちゃんと型宣言すれば、
simple-vectorやbit-vectorのアクセスはCで配列使った場合と
変わらないよ。そのかわり配列の境界チェックや型のチェックは
プログラマの責任になるけどね。
535:デフォルトの名無しさん
04/05/23 10:52
現在でも、Lisperに渡したら、ハマるような代物かなSymbolicsは?
そのくらい、プログラム開発システムとして完成度が高い?
それともWindowsとVisual Studioなんかと比べたら見劣りする?
経験者の人、いねーかな。
536:デフォルトの名無しさん
04/05/23 14:39
ILC2003に居合わせた人達が言うには商業的に失敗しただけで現存するどの処理系も
あのレベルに到達できていないらしい。本当かどうかは知らんけど。
アレをオープンソース(システム?)として公開しようとかいう動きもどっかにあったような。
537:デフォルトの名無しさん
04/05/23 19:37
配列でつか。いやてっきりコンスセルを2Mbyteほど確保してハイリツとしたりするかと
思ってしまいました。何らかのツリー型データベースも一旦ファイルからリストへロードして
などするのかと。
もう一つ聞きたい事があるのですが、Lisperの人たちは手続き型プログラミング
で言うところのフローチャートのような図は書いたりしないのですか?
オブジェクト指向となるとUMLなどありますし、Lispだとどんな図を日常的に
書いているんでしょう?リストか?、再帰のツリーかな?
Symbolicsの画面キャプチャにはそれっぽい図も見かけたりしますが。(class継承の
ずのようなもの)
>ILC2003に居合わせた人達が言うには商業的に失敗しただけで現存するどの処理系も
>あのレベルに到達できていないらしい。本当かどうかは知らんけど。
という事は、現物を触った人はここには誰も以内と?
昔の第五世代コンピュータプロジェクト辺りでLispマシンを研究していたと
言うような話を聞いた事があるんですが、サイ(psy)のあれは推論マシンだしたか?
538:デフォルトの名無しさん
04/05/23 20:19
よくわからんが
URLリンク(www.pfu.co.jp)
このキーボードは使いやすそう
539:デフォルトの名無しさん
04/05/23 20:26
>>538
使った人によればAの隣のRUBOUTは一度慣れると病みつき
だそうです。
オレの代の頃にはハードがいかれてたんでほとんど置物と
化していて残念だった記憶が。いじり倒してみたかった...
540:デフォルトの名無しさん
04/05/23 20:39
UNIXの仕事だけではないのでファンクションとWindowsキーはないと困る
541:デフォルトの名無しさん
04/05/24 05:49
>>537
もしかして、Lisperはリストしか使わないとか思ってた?
自分でコード書くときに図を書くことってほとんどないな。
コードが大きくなりそうな時に全体の構成をコメント中にメモったりはするけど。
他人のコードを読む時には、Allegro Composerだと関数の呼び出し関係や
クラス階層をグラフ表示してくれるんでたまに使うかな。
542:デフォルトの名無しさん
04/05/24 21:41
>>531 それは hirax.net の人かと。
URLリンク(shibuya.pm.org)
で最近講演してますね。
543:デフォルトの名無しさん
04/05/24 22:57
cygwin-1.5.5 に scm-5d9 インストールしたのですが、
バックスペースでプロンプト文字 "<" を超えて
行頭までカーソル移動してしまいます。
動作は問題ないのですが何かと不便で困っています。
何かお気づきの点がありましたらお願いします。
544:デフォルトの名無しさん
04/05/25 01:26
>>543
stty の設定か何かで、改行コードが CR+LF (Carriage Return + Line Feed) に
なってるからでは?
勘違いだったらスマソ。
545:537
04/05/25 18:15
チンボリクスの神がコノスレに降臨しますやうに(・∀・)ニヤニヤ
546:デフォルトの名無しさん
04/05/25 22:33
Interlisp-Dがフリーでダウソできるみたい。
URLリンク(www.sra.co.jp)
547:デフォルトの名無しさん
04/05/25 23:14
URLリンク(user.ecc.u-tokyo.ac.jp)
flatline氏の日本語訳『on Lisp』、第20章「継続」の説明がすばらしい。
いろいろ読んだけど、これほどすっきりと理解できたことは無かった。
ありがとうございます。
ところで、pdf版の図109(P148)、TeX のタグが残ってしまっているようです。
ご報告まで。
548:543
04/05/25 23:15
>544 氏
今色々キータイプしてみたら Ctrl + BS で
バックスペースが出来て,プロンプト文字 "<" でブロックされました。
何か分かりますでしょうか?
549:デフォルトの名無しさん
04/06/06 10:08
新山氏のサイトに、かなりショッキングな文章が登場。
URLリンク(tabesugi.net)
> 新山は、汎用プログラミング言語としての Lisp (Scheme) はもう信用していない。
> だって、現在のたいていのアプリケーションで大変なのはデータ構造の設計と
> 入出力の扱いで、そういう部分はふつう圧倒的に手続きだらけなんだもん。
…(略)…
> いまでは自然言語処理っつうと、ほとんどが「どーやって大量のデータを収集・
> 変換・学習・適用するか」につきているので、これはおそろしく手続き的な操作で、
> Scheme なんか使ったらほとんど begin と let* だらけになる。
新山氏が以前言っていた
URLリンク(tabesugi.net)
> だいたい新山はもともとストイックな Scheme が好きだったのだが、あまりに
> 実用的でないから Python に「逃げてきた」のである。
って、そういうことだったのね。ライブラリの少なさの問題ではないのね。
ちなみに、COBOL の代わりにこそ Java ではなく LISP を、という主張もされていて、
(最初の引用元を参照)、こちらも非常に興味深い。
550:デフォルトの名無しさん
04/06/06 16:31
beginとlet*使えばいいじゃん。
551:デフォルトの名無しさん
04/06/06 16:37
ってか新山って誰?
552:デフォルトの名無しさん
04/06/06 18:00
>「どーやって大量のデータを収集・変換・学習・適用するか」につきているので
と
> Scheme なんか使ったらほとんど begin と let* だらけになる
に論理の飛躍を感じるのは漏れだけですか?
ブブカもびっくりですよ。
『Schemeはプログラマを映す鏡』だなあと思う今日この頃、おまえら、いかがお過ごしですか。
553:デフォルトの名無しさん
04/06/07 10:14
日記なんだから論理は飛躍しても仕方ないと思うけど...
>> 552
ところで「begin, let*を使うコードだらけになるじゃん」と言う主張は
新山さんが明らかに何か分かってないという証拠になるのかな?
もしそうならどうしてそうなのか教えて欲しいなぁ。
554:デフォルトの名無しさん
04/06/07 13:23
Interlisp-D試した人いないの?
555:デフォルトの名無しさん
04/06/07 19:34
>>554
普通に動いたよ。ドキュメント読む暇が無いんで後回しになってるけど。
556:デフォルトの名無しさん
04/06/07 22:06
>>554
URLリンク(squab.no-ip.com:8080)
557:デフォルトの名無しさん
04/06/07 22:34
>>555-556
レスサンクス。試してみる。
古参Interlisperの話を聞いてみたいな…
558:デフォルトの名無しさん
04/06/07 23:58
>>553
つまるところ、ストイックな Scheme で全てをやろうとすると、
begin や let* の嵐になるということではないか。言いかえれば、gosh などの
現実的(または妥協的)な Scheme 処理系を使ったことがないのかもしれない。
日記は良く読んでないので外してるかもしれんけど、新山氏は普段 Python を
使ってるらしいからね。
# ほら、Python ってライブラリが充実してるじゃん
559:デフォルトの名無しさん
04/06/08 02:40
>>557
おれも聞いてみたい。どうしてもSymbolicsとかの統合環境への夢が捨てがたい。
いま良くあるような保護指向のOSのモデルと、統合環境指向のシステムを
うまく統合させる方法ってないのかねぇ。
560:デフォルトの名無しさん
04/06/08 21:04
>>558
たぶん、「ストイック」の意味が違うと思う。
変数をできるだけ使わず、関数のネストだけで
コーディングするのがストイックなScheme流なんだと
思う。
561:デフォルトの名無しさん
04/06/08 22:25
>>560
それは Scheme 限定というより、Lisp 族の一般的な慣習のような。
ああでも、elisp やってる人達はちょいと違う気もするけど。
まあどうでもいいか。
562:デフォルトの名無しさん
04/06/08 23:56
なぜ人間の脳はオーバーロードしないのか。
563:553
04/06/09 00:21
>>560
に賛成。でも個人的には、関数型プログラミングの作法と手続き型の作法をまぜこぜに使えるのがLISPの強みの1つだとおもうので、新山さんの意見には賛同できないんだけど。
564:デフォルトの名無しさん
04/06/09 00:26
ecl で thread 使えている方いらっしゃいますか?
CVS の CHANGELOG には Linux で pthread サポートしている様に書いてありますけど。
565:デフォルトの名無しさん
04/06/09 14:50
fibonacci 数列について質問です。
これを関数型の記述のまま、計算量を減らすことはできないでしょうか?
まず、定義どおりに関数型で記述してみました。
(define (fib x)
(if (< x 2)
1
(+ (fib (- x 1)) (fib (- x 2)))))
これだと、定義がそのままコードになっていて、とてもわかりやすいのですが、
x の小さな項を何度も計算しなおすので、x が大きくなると計算量が膨れ
上がってしまいます。
Chez Scheme では x=35 ぐらいが限界でした。
手続き型で、小さい項をまず求めて、それをもとに大きな項を求めるように書くと、
計算量がはるかに少なくて済むのですが、わかりづらくなります。
定義がそのままコードになっている、関数型の記述とはだいぶ違います。
(define (fib2 n)
(if (< n 2)
1
(do ((x1 1 (+ x1 x0))
(x0 1 x1)
(m 2 (+ m 1)))
((<= n m) (+ x1 x0)))))
566:デフォルトの名無しさん
04/06/09 14:51
末尾再帰であらわしたコードも見かけましたが、わかりにくさでは似たようなものです。と言うか、これは手続き型のロジックを末尾再帰に無理に書き換えただけだと思います。
(define (fibo num)
(let loop ((num num)
(p2 1)
(p1 1))
(cond ((= num 0) 1)
((= num 1) 1)
((= num 2) (+ p2 p1))
(else (loop (- num 1) (+ p2 p1) p2)))))
もしかして、(よく知らない)遅延評価を使えばよいのかと思い、頭の悪いコードを
書いてみましたが、かえって遅くなるだけでした。
(define (fib3 x)
(if (< x 2)
1
(+ (force (delay (fib3 (- x 1)))) (force (delay (fib3 (- x 2)))))))
遅延評価に関して、Shiro さんのところも見てみたのですが、
URLリンク(www.shiro.dreamhost.com)
これも結局、手続き型と同じ、小さい項をまず計算して、徐々に大きい項を求めていく
やり方でした。定義がそのままコードになるような書き方ではないと思います。
ということで、質問をもう一度まとめますと、
定義がそのままコードになるような書き方で、fibonacci 数列の一般項を求める関数の
計算量を減らすことはできないでしょうか?
以上です。どうかよろしくお願いいたします。
567:デフォルトの名無しさん
04/06/09 15:07
memo関数使ったら?
一度計算した値をとっておくだけで、再帰的な「素直な」定義はそのまま。
568:デフォルトの名無しさん
04/06/09 15:30
>>567
ありがとうございます。memo関数とは、これのことでしょうか?勉強してみます。
URLリンク(www.sampou.org)
それにしても、delay/force は、一度計算したものはキャッシュされるということでしたが、
それは、同一の約束オブジェクトに関する話なのですね。
(define (fib3 x)
(if (< x 2)
1
(+ (force (delay (fib3 (- x 1)))) (force (delay (fib3 (- x 2)))))))
において、
(fib3 1) が何回現れても、それは毎回、別の約束オブジェクトとみなされるから、
再計算するしかないのですね。まだまだ勉強が足りないなあ。
569:(define (´∀`) 'マターリ)
04/06/09 19:52
(define (fib x)
(define fib (let loop ((y 1) (lst '(1 1)))
(if (>= y x) (lambda (x) (list-ref (reverse lst) x))
(loop (+ y 1) (cons (+ (car lst) (cadr lst)) lst)))))
(if (< x 2) 1
(+ (fib (- x 1)) (fib (- x 2)))))
570:デフォルトの名無しさん
04/06/09 20:22
>>566
> 末尾再帰に無理に書き換えた
そうか?俺には自然に見える。
末尾再帰 = ループ という概念に慣れていないだけでは?
571:デフォルトの名無しさん
04/06/09 22:58
URLリンク(www.iijlab.net)
の最後に載ってるfibがO(log n)でなかったかな
572:デフォルトの名無しさん
04/06/10 03:09
>>569
面白いコードをありがとうございます。ただ、fibonacci 数列の定義をこのコードから
読み取るのは難しいと思います。
また、最後の2行は実質的に不要で、コードのわかりやすさに寄与していないのではないでしょうか?
(define (fib x)
(define fib (let loop ((y 1) (lst '(1 1)))
(if (>= y x) (lambda (x) (list-ref (reverse lst) x))
(loop (+ y 1) (cons (+ (car lst) (cadr lst)) lst)))))
(fib x))
と書いても結果は同じです。
>>570
すみません、私の言葉が正確でありませんでした。
手続き型の記述をループに書き換える方法としては、私も自然だと思います。
(実は、>>566 の関数 fibo は、既存のそのままのコードではなく、自分がわかりやすい
ように書き直したものです。)
ただ私は、もとの定義どおりの>>565 の関数 fib の方を末尾再帰にしたかったのです。
手続き型のロジックを元にしたため、定義から大きく違った形になっている、という意味で
「無理に」という言葉を使いました。
>>571
恥ずかしながら、このコードは私には難しいです。
慣れた人になら、このコードも関数型らしい「定義を書くだけでそれがそのままコードになる」
記述に読めるのでしょうか?
573:デフォルトの名無しさん
04/06/10 03:11
訂正。
×自分がわかりやすいように書き直した、
○自分にわかりやすいように、自分なりに書き直した
574:デフォルトの名無しさん
04/06/10 03:37
自分で末尾再帰にする言語を作れ。
575:デフォルトの名無しさん
04/06/10 03:57
>>572
"関数型らしい「定義を書くだけでそれがそのままコードになる」"
ってだれに聞いたのか知らないけど、幻想入り過ぎなのでは。
576:デフォルトの名無しさん
04/06/10 04:21
>>565
計算機プログラムの構造と解釈
問題3.27 メモ化
問題1.19 対数的
577:デフォルトの名無しさん
04/06/10 08:50
>>565
その書き方のまま、高度なキャッシングをするよう最適化するような処理系があったらうれしいな。
仕様としては、R*RSには入らないだろうけどSRFIになら入りそう。
でもこれは夢のような技術っぽい。
578:デフォルトの名無しさん
04/06/10 11:08
Schemeは、どれをDLすればいいんだ?
579:デフォルトの名無しさん
04/06/10 12:07
>>576 ありがとうございます。
URLリンク(mitpress.mit.edu) と
URLリンク(www.geocities.co.jp)
を参考にして、以下のコードを書いてみました。
(define (memoize proc)
(let ((cache '()))
(lambda args
(let ((hit (assoc args cache)))
(if hit (cdr hit)
(let ((result (apply proc args)))
(set! cache (cons (cons args result) cache))
result))))))
(define memo-fib
(memoize (lambda (n)
(if (< n 2)
1
(+ (memo-fib (- n 1))
(memo-fib (- n 2)))))))
大変うまくいきました。コードはほぼ定義どおりで、しかも (memo-fib 10000)でも
即時に演算が終わるようになりました。memoize って素晴らしいです。
数年前、Java で数値計算をしていて、再帰で書いたら同じ問題に遭遇して、仕方なく
ループで書き直したことがあります。あのときに memoize を知っていたらなあ。
URLリンク(mitpress.mit.edu)
は私には難しいので、時間をかけて考えてみます。
ということで皆さま、いろいろありがとうございました。
580:デフォルトの名無しさん
04/06/10 18:05
>>578
URLリンク(www.sci.toyama-u.ac.jp)
ここに処理系のリンク先あり
Windowsなら
DrScheme
あるいは
Petite Chez Scheme + ChezEdit
が簡単
581:デフォルトの名無しさん
04/06/10 20:34
>>580 ありがとう
DrSchemeを入れてみました。
40Mってのには驚きましたよ。
582:デフォルトの名無しさん
04/06/10 23:26
今日のセミナーに参加した人いる?
午前中は完全に雑談だった。せっかく早起きしたのにちょっと鬱。
明日に期待しよう。
583:デフォルトの名無しさん
04/06/11 00:22
>>582
まあそう言うな、生CEO や生和田先生や生Shiroさんが見れただけでもオレは満足だ
もっとちゃんと時間をとって役に立つ話をやって欲しいとは思ったけど
584:デフォルトの名無しさん
04/06/11 07:17
>>582, 583
漏れ行きたくても行けない地方在住者。
レポートキボンヌ!キボンヌ!
585:デフォルトの名無しさん
04/06/11 09:17
URLリンク(www.shiro.dreamhost.com)
586:デフォルトの名無しさん
04/06/11 23:12
CL-USER(2): (require :regexp2)
; Fast loading /opt/franz/acl70b/code/regexp2.fasl
;;; Installing regexp2 patch, version 0
; yacc constructing #<GRAMMAR-CLASS REGEXP> ...
; Finished
T
CL-USER(3):
regexp2キター
587:デフォルトの名無しさん
04/06/12 01:07
これからはJavaよりもLispだと確信しました。
しかしACLの値段は高いのお…
588:デフォルトの名無しさん
04/06/12 01:07
現在プログラム板にはHSP関連スレに凶悪な荒らしどもが住みついています。
・HSPに関係の無い話題でスレッドを上げまくる
・HSPオフィシャルサイトの住人を名指しで誹謗中傷する
・重複スレを乱立させる
などの荒らし行為を行っています。
みんなで団結してム板のゴミどもを追い出しませんか?
【HSP関連スレ】
【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】
スレリンク(tech板)
HSP>>>>>>>>>>>>>C=糞w
スレリンク(tech板)
今日もどこかでHSP初心者が質問ですP19
スレリンク(tech板)
HSPについて
スレリンク(tech板)
589:デフォルトの名無しさん
04/06/12 08:47
scmutilsについて教えてくだされ。
Structure and Interpretation of Classical Mechanics
を読み進むのにScmutilsを使いたいのだが、MITScheme
は苦手だ。他の処理系に移植されていないだろうか?
Chez Scheme にあるとうれしいのだが。
590:デフォルトの名無しさん
04/06/12 09:45
>>589
私もぜんぜん知らないのだけど、Google で検索すると、
ChezEdit-NT の作者である 笹川さんが出てくる。
URLリンク(www.sampou.org)
その結果は
URLリンク(chabo.kingdom.biglobe.ne.jp)
> SICMのためのScmutilsを動かしたいんだけど、MIT-Schemeはどうも苦手だなぁ。
> かといって移植するのは大変な労力だ。どうしたもんだろう。
どうも移植はされていないっぽい。
Gauche 方面では、
Scheme:ライブラリ -> scmutils
URLリンク(www.shiro.dreamhost.com)
> MIT Scheme べったり。Gauche に移植しようとして途中で挫折。-- skimu
こちらもだめっぽい。
あきらめて Debian GNU/Linux と MIT-Scheme に行くしかなさそう。
591:589
04/06/12 10:40
>>590
ありがとう。
MIT-Schemeでなんとかやってみるよ。
592:デフォルトの名無しさん
04/06/12 15:20
CPS(継続渡し)が今までどうしても理解できなかったのだけど、
このページの例を見て、目がさめるようによく分かりました。
URLリンク(www.namikilab.tuat.ac.jp)
なあんだ、まず最初に巨大にネストした無名関数をこしらえて、
それを一気に実行するだけじゃないか。
それだったら、普通にスタックが積まれる再帰とコストが等しくて当然。
しかし、Petite Chez Scheme は CPS の方が二倍ほど速いのですね。
自分の手元で試してみても同様でした。不思議ですね。
593:デフォルトの名無しさん
04/06/12 16:09
すまねぇ、誰か助けてくれ。
こないだAllegroCommonLispのウワサを聞きつけトライヤル版を試してみたくて
ダウンロードしたんだが、さっきFranz.comのSalesManagerのクレイグから
いきなしメール来て、ACLを何処で知ったか、とかいって幾つか質問が
書かれたハードオファーなメールが来たんだよ。英語だし意味ワカンネエし、
毎日にチャンネルしかやってない俺にとって非常に恥ずかしいっていうか、
何で俺のようなアホにメールよこすんだよ!っていうか、「読んでくれて
ありがとう。私はあなたからすぐに便りをもらうことを期待します」とか
クレイグ書いてるし、そういう訳で困っています。
普段アホの新山とかblog読んでアヒャヒャと喜んでいるアホなのですが、天才新山名誉
教授でもなんでも良いのでだれか知恵を貸して下さい。
知名みにlispは初心者で、本当はAllegroCommonLispよりもGaucheを使って
半日ほどハアハアしてたりDを使っていました。
594:デフォルトの名無しさん
04/06/12 22:35
>>593
相手は単に商売なんだから、ほっといたらいいんではないかー?
595:デフォルトの名無しさん
04/06/13 08:51
どれシニョリーナ
「ウミネコ」の魔術をといてやるよ
596:デフォルトの名無しさん
04/06/13 17:13
>>593
トライアル版落とすとそのメール来るよね。
前に落としたときは日本の法人から営業担当者のメールが来ますたよ。
そんな高いもん個人で買えないからご遠慮メール出しちゃったら、担当が変わりましたメールが忘れた頃に(w
そこまで売りたいなら値段下げれ!とか思た(藁