【入門】CommonLisp【 ..
[2ch|▼Menu]
310:デフォルトの名無しさん
05/02/06 17:36:15
CLISPでMOPがサポートされtらしいのですが、
どうやって使うものなんでしょうか?

311:デフォルトの名無しさん
05/02/06 18:48:22
MOPってMeta Object Protocolのこと?
もしそうなら使い方がわからない時点で貴方には必要のないものだと思うのですが。
AMOPは読破・理解されましたか?

312:デフォルトの名無しさん
05/02/06 21:10:14
>>310 MOPはオブジェクトシステム(CLOS)をカスタマイズするときに使います。
CLOSを実装するのに必要となる、ある程度の動作が規定された一連のジェネリック関数が存在し、
それらのメソッドを独自に定義することにより、カスタマイズを行います。
たとえば、永続化をサポートしたオブジェクトをシステムに組み込むなんて
ときに使うこともあれば、CLOSに標準化される前の古いオブジェクトシステムを
エミュレートしたりするときに使うこともあるでしょう。

MOPの仕様は公開されているので読んでみてはいかが?
URLリンク(www.lisp.org)

313:デフォルトの名無しさん
05/02/07 20:28:56
dylanという言語は素晴らしい。
Lispより素晴らしい。
何よりIDEが素晴らしい。

と、言語マニアな友人が言っていた。
マジかぁ?

314:デフォルトの名無しさん
05/02/07 23:04:49
>>313
>dylanという言語は素晴らしい

dylanって何?

315:デフォルトの名無しさん
05/02/07 23:44:28
まあマカの言う事だし

316:デフォルトの名無しさん
05/02/07 23:58:42
ぬるぽぅ?

317:デフォルトの名無しさん
05/02/08 21:35:26
>>314

dylan
スレリンク(tech板)

318:デフォルトの名無しさん
05/02/13 16:57:45
append という関数について質問なのですが、
(append '(1 2) '(3 4)) => (1 2 3 4)
仕様では前半の '(1 2) は新しいセルを作って内容を
コピーするらしいのですが、なんで前半の最後を後半の
最初に繋げるだけじゃ駄目なんですか?


319:デフォルトの名無しさん
05/02/13 17:37:26
CL-USER> (setf x (list 1 2))
(1 2)
CL-USER> x
(1 2)
CL-USER> (append x (list 3 4))
(1 2 3 4)
CL-USER> x
(1 2)
CL-USER> (nconc x (list 3 4))
(1 2 3 4)
CL-USER> x
(1 2 3 4)
CL-USER>

320:デフォルトの名無しさん
05/02/13 18:26:58
319を見て318はダメな理由が思いつくかしらね、と。

321:デフォルトの名無しさん
05/02/14 08:40:44
>>318
> なんで前半の最後を後半の最初に繋げるだけじゃ駄目なんですか?
それにはnconcという別の関数が用意されている(「駄目」とかじゃなく
別々の使い方に対応するためにappendとnconcが用意されている)。

なぜappendが現在の仕様になっているかというと、
あるリストを参照している変数や自分の一部として参照しているLisp objectは
複数存在する可能性があって、そういうリストを1つの参照元が勝手に変更すると、
そのリストが変更されるとは想定していない別の参照元で混乱が生じるときがあるため。

(setq x (list 1 2)) => (1 2)
(setq y (cons 0 x)) => (0 1 2)
;; yが参照しているリストは勝手に変更されないとプログラマーは想定しているとする。
(setq z (nconc x '(3))) => (1 2 3)
y => (0 1 2 3) ;; えっ! (0 1 2)と変わっとるやないけ!

なぜnconcが用意されているかといえば、appendより速度、空間的なコストが安くあがる
可能性が高いため。

こんなんでどうでしょう?

322:デフォルトの名無しさん
05/02/14 08:44:13
上の例での動作がプログラマが望むものであるときもnconcを使うよね。

323:デフォルトの名無しさん
05/02/14 11:20:10
>>318
> (append '(1 2) '(3 4)) => (1 2 3 4)

'(1 2), '(3 4)は定数なのでテキストセグメントなど変更できないメモリ領域に
とられる可能性がある。そうするとappendの代わりにnconcを使って前半のリストを
変更すると、bus errorで落ちる。


324:デフォルトの名無しさん
05/02/14 23:28:54
気味が悪いくらい皆親切だな。何かあったのか?

325:デフォルトの名無しさん
05/02/14 23:30:05
>>324
実は童貞だけどチョコレートもらえたんだ。

326:デフォルトの名無しさん
05/02/24 23:09:02
ML使いの香具師いる?

327:デフォルトの名無しさん
05/02/25 00:41:40
MultiLanguage

328:デフォルトの名無しさん
05/02/27 13:28:46
>>326 Ocaml ならちょくちょく使うよ.

329:デフォルトの名無しさん
05/02/27 16:41:12
(setq n '(func foo))
n
(defmacro macro(x)
`(defun ,(car x) (y)
(print y)
)
)
このマクロがエラーになるのですがどうしてでしょうか?
`(defun ,(car n) (y) (print y))
これと同じ事をしているつもりなんですが・・・

330:デフォルトの名無しさん
05/02/27 17:35:58
自己解決しました
お騒がせしました

331:デフォルトの名無しさん
05/03/01 20:56:04
引数がアトム型なら"atom"、そうでなければ"false"と表示するマクロを
作成したいんですが、

(defmacro macro(x)
`(if,(atom ,x)
(print "atom")
(print "false")
)
上のようなマクロで動くんですが、
展開したときに
(macroexpand-1 '(macro 'a)) -> (print "atom")
となるようしするにはどうすればいいんでしょうか??

332:デフォルトの名無しさん
05/03/01 22:23:19
ifを外側に出せばいいのでは。
`(print ,(if (atom x) "atom" "false"))

333:デフォルトの名無しさん
05/03/01 22:32:27
(if (atom x) '(print "atom") '(print "false"))

334:デフォルトの名無しさん
05/03/02 01:15:22
>>332>>333
ありがとうございます。

マクロは凄い機能ですね、昔C++でどうしてもできなくて挫折した
機能をわずか数行で実現できました。

335:デフォルトの名無しさん
05/03/02 03:02:22
scheme と common lisp ってどのくらい違うのでしょうか?
なにが決定的に異なるかでもいいですが。

schemeを覚えたからといってcommon lisp のプログラムがかけるとか、そういうことは無いのですか?

336:デフォルトの名無しさん
05/03/02 03:30:08
|← これくらい →|

337:デフォルトの名無しさん
05/03/02 04:14:03
>>355
個人的には、最初にぶつかる大きな違いは
define-syntax と defmacro の違いかなあと思います。

call/cc は……scheme で call/cc 使いこなせるくらいになったら、
common lisp の特殊形式諸々で何とかできない……のかなあ。
私は call/cc 使いこなしてるわけじゃないので何とも。
clos も plt やら gauche を使えば、まあ、それなりに、て気もするし。

名前空間辺りは、好みはあっても、基本的にはすぐに慣れるでしょう。
たまにうっかり #' 付けたり付け忘れたりしますけど。あと funcall とか。

まあ、scheme やってればすぐ common lisp で書けるようなるかっていうと、
やっぱり慣れるのに時間は必要でしょうけれど、やってないよりは遥かに楽に入れるとは思います。

338:デフォルトの名無しさん
05/03/02 05:25:45
call/ccなんて使わない奴は全く使わないでしょ

339:デフォルトの名無しさん
05/03/04 17:44:07
lispで正規表現ってできますか?
Clispでうありたいんですけど。。。

340:デフォルトの名無しさん
05/03/04 18:57:18
>>339
はいな。
URLリンク(clisp.cons.org)

341:デフォルトの名無しさん
05/03/04 19:01:02
>340
さんくすです

342:デフォルトの名無しさん
05/03/05 12:43:02
>>337
schemeな人が「Lisp?(プゲラ」みたいなことよく言ってるけど、
こうしてみると、別にそれほどLispが劣ってるようには見えないなあ。
大して違わないじゃん。

343:デフォルトの名無しさん
05/03/05 13:31:47
趣味でいやなことやんなくていいときはScheme
仕事で泥臭いことも泣く泣くやらなきゃいけないときはCommon Lisp
フリーソフト作ってみんなに自慢したいときはEmacs Lisp

344:デフォルトの名無しさん
05/03/05 14:56:15
別に泣く泣くとか泥臭いとか言うほど違わないじゃん。
ちっとも泥臭くない。

345:デフォルトの名無しさん
05/03/05 16:46:25
>>343
仕事で泣く泣くCommonLispなんて選択する奴いるのかね。

346:デフォルトの名無しさん
05/03/05 17:31:16
こんなこと言うと怒られるかも知れんが、
lispとschemeで相違点あるのか?
ほとんど同じようなもんじゃないのか?

347:デフォルトの名無しさん
05/03/05 19:10:12
それ以上はスレ違い
このスレ、なんのために立てたんだ?

348:デフォルトの名無しさん
05/03/05 19:11:19
>schemeな人が「Lisp?(プゲラ」みたいなことよく言ってるけど、
どこで言ってたのか教えてくれよ(プゲラ

349:デフォルトの名無しさん
05/03/05 20:39:24
正直言って Scheme の define-syntax はいまいち馴染めん。
call/cc も catch/throw で代用できるケースしかあまり使わない。
(そうでないケースで使うと極端に効率の悪い処理系もある)
srfi の実装も結構まちまちで、ポータビリティを考えると結構めんどくさい。

ってなわけで、最近は Scheme より Common Lisp を使うことが多いね。

350:デフォルトの名無しさん
05/03/05 23:32:23
Lisp と Scheme を比較って、意味がわからんぞ。

Lisp
 +- Common Lisp
 +- Scheme
 +- Emacs Lisp
 +- その他の Lisp 方言
 :

351:デフォルトの名無しさん
05/03/05 23:48:15
LOOPマクロが嫌いな奴はみなSchemeに流れたよ

352:デフォルトの名無しさん
05/03/06 00:01:58
>>350
このスレの流れは >>335 から派生しているのだよ。

353:デフォルトの名無しさん
05/03/06 00:40:06
>>351
あぁ、あれか。あれは Common Lisp 派の漏れでも醜いなと思う。
CLtL2 を読んだとき目を疑ったよ。Common Lisp の汚点だ。w
漏れ的にはループは do がデフォかな。loop は無条件繰り返しのときだけ使う。

354:デフォルトの名無しさん
05/03/06 00:44:47
>>349
CommonLispにだってperlやrubyみたいな単一の実装があるわけじゃないんでしょ?
だったらポータビリティの問題はschemeとかわらないんじゃない?


355:デフォルトの名無しさん
05/03/06 00:54:25
んなこたあない

356:デフォルトの名無しさん
05/03/06 00:57:40
>>354
Common Lisp なら言語で定義されている範囲で済むことでも、Scheme の場合は
ちょっとした便利関数でも R5RS では定義されてないから結局 SRFI のお世話に
なってしまう。そのときの処理系間のばらつきが割と大きいように思えるということ。
別に Scheme が嫌いなわけじゃないよ。念のため。

357:デフォルトの名無しさん
05/03/06 01:26:26
Schemeってモジュールやオブジェクト指向といった、現代のプログラミングでは
欠かせない重要なことすら処理系依存じゃん。
そういうのは嫌なとこだよね。

358:デフォルトの名無しさん
05/03/06 06:10:36
SRFIでライブラリの標準化を進めるのはいいが、
定義された関数仕様が気に入らない
マクロ覚えたて厨が考えたみたいなマクロとか、
どこぞの処理系の実装そのまんまとか

ところで、ここはCommonLispスレじゃなかったのか

359:デフォルトの名無しさん
05/03/06 11:49:49
まぁ対比することで Common Lisp の良さが見えてくることもあるからいーじゃない。

360:デフォルトの名無しさん
05/03/06 20:03:24
ところでおまいらどの処理系使ってる?
ちなみに漏れは CLISP だが。

361:デフォルトの名無しさん
05/03/06 20:27:09
ACL trial

362:デフォルトの名無しさん
05/03/06 22:20:39
やっぱりemacsかな
日本語とデバッガと独自関数の便利さから。
しかしcommon lispと結構違うのが痛い。
日本語と環境(デバッガ)とフリーという三つの条件入れるとこれしか選択肢ないんだよな。
Schemeは全滅。

363:デフォルトの名無しさん
05/03/06 22:51:10
>>362
最近の CLISP は GNU libiconv 使ってて国際化は結構充実しているっぽいよ。
URLリンク(clisp.cons.org)

364:デフォルトの名無しさん
05/03/07 05:40:28
clispいい。
eclipseみたいな環境があればもっといい。
エディタは飽きた。

365:デフォルトの名無しさん
05/03/07 09:20:21
CommonLispではまともなのはCLISPしか選択肢ないよな。
環境が多少悪いかもしれないけどこれしかないんだから
我慢するしかない。

366:デフォルトの名無しさん
05/03/08 06:21:06
そうか、CLISPはIDEがないのか。
JAVAでさくっと作ってみるかな。。。

367:デフォルトの名無しさん
05/03/08 12:36:51
こんなのどーだ。使ったことないけど。
URLリンク(ciapek.uci.agh.edu.pl)

368:デフォルトの名無しさん
05/03/08 20:00:20
>>367
使ってみたけど、なんか意味あるのかこれ?
デバッガと言ってもインタプリタがそのまま出てきただけだったぞ。

369:デフォルトの名無しさん
05/03/08 20:10:19
SLIME じゃダメですかね

370:デフォルトの名無しさん
05/03/08 20:31:32
Lispがそんなに生産性高いならIDEくらいさっさと作れるはずだな。

371:デフォルトの名無しさん
05/03/08 20:41:17
slimeってclispで動いたっけ??

372:デフォルトの名無しさん
05/03/08 20:53:58
>370
ACLはACLで出来ている

373:デフォルトの名無しさん
05/03/08 21:16:10
>>371
% ls swank*.lisp
swank-abcl.lisp swank-lispworks.lisp
swank-allegro.lisp swank-loader.lisp
swank-backend.lisp swank-openmcl.lisp
swank-clisp.lisp swank-sbcl.lisp
swank-cmucl.lisp swank-source-path-parser.lisp
swank-gray.lisp swank.lisp


374:デフォルトの名無しさん
05/03/08 21:56:04
clisp 使えても iso-8859-1 決めうちじゃなあ。

375:デフォルトの名無しさん
05/03/09 02:21:04
emacs系が統合環境なんじゃないの?

376:デフォルトの名無しさん
05/03/09 16:07:21
>>371
サポートするってかいてあるけど。URLリンク(common-lisp.net)

377:デフォルトの名無しさん
05/03/09 22:41:11
>>367のエディタで改行して自動でインデントが付かないのは
俺だけか・・・?
微妙に使いづらいな。

378:デフォルトの名無しさん
05/03/09 22:46:23
忘れたころにLOOPマクロマンセー、と書いてみる。漏れは結構好きで使いまくりだ。

379:353
05/03/09 22:59:16
>>378
そうか。醜いとか汚点とか書いて悪かった。許してくれ。

380:デフォルトの名無しさん
05/03/09 23:25:15
loopも典型的で簡単な使い方をする分にはいいんじゃないの。

381:378
05/03/09 23:52:10
そうくるとは思わなかったな。何でLOOPなんか使うんだゴルァと叩かれると思ってた。
Common Lisp使ってる時点で異端扱いなので変な目で見られるのは慣れてるのだ(w
でもあのレベルのマクロを皆が好き勝手に作り始めたらポータビリティどころの騒ぎじゃ
なくなるような気はする。

382:デフォルトの名無しさん
05/03/10 06:13:09
emacsのlisp-modeのインデントが

(if predict
□□a
□b)

こうなるんだけど、scheme-modeみたく

(if predict
□□a
□□b)

のように出来ないんディスカー?

383:デフォルトの名無しさん
05/03/10 07:05:10
できる。というかわざわざ前者のようになってるわけだが……。
(put 'if 'lisp-indent-function nil)


384:デフォルトの名無しさん
05/03/10 07:09:41
>>383
ありがとう。
前者のようになっている理由は?

385:デフォルトの名無しさん
05/03/10 08:25:07
>>381
何でLOOPなんか使うんだゴルァ


LOOPみたいな独り善がりマクロがある限り
CommonLispに発展はない

386:353
05/03/10 11:20:48
>>381
マイナな中でさらに細かい流派を作って、いがみあってもしょうがないからね。
なるべく寛容になるようにしている。w
複雑なLOOPマクロを書けと言われたらちょと困るけど、読むくらいならなんとかなるし。
(たぶん、、、)

387:デフォルトの名無しさん
05/03/10 16:19:01
>>384

lisp: (if COND THEN ELSE ...)
scheme: (if COND THEN ELSE)

388:デフォルトの名無しさん
05/03/10 21:50:33
え、それって理由になってるの?

389:デフォルトの名無しさん
05/03/10 23:04:31
おそらく、理由なんだろうな。
elseが複数あるからってことでしょ?

まあ、だからってなんでaだけ下げるんだという疑問はまだ残るが。

390:378
05/03/10 23:13:10
>> 385
前半の前提と後半の帰結の関係がさ〜っぱりわからん。理論立てて説明してみ。

LOOPマクロが繰り返し構造に特化したDSLの様相を呈しているという点で独り善がり
という感想を持つのは理解できなくもないが(しかし委員会で承認され規格化されて
いるという点で独善ではありえない)、その存在とCommonLispの発展とに何の関係が?

391:デフォルトの名無しさん
05/03/10 23:35:25
>>389
>elseが複数あるからってことでしょ?

ええー
述語ひとつに対してTHEN節とELSE節の他に、
ELSE1…ELSEn節があるって論理的におかしくないか?

392:デフォルトの名無しさん
05/03/10 23:48:24
Scheme での (if COND THEN (begin ELSE1 ELSE2 ...)) を伝統的 Lisp では
(if COND THEN ELSE1 ELSE2 ...) と書けるってこと。

393:353
05/03/10 23:52:58
>>387
ええーーーっと思って確かめたけど、Common Lisp は複数の else 句を取れないよね。
初めて知ったが emacs lisp は確かに複数の else 句が取れるんだな。
別に論理的におかしいとまでは思わないけど変わった仕様だね。

394:デフォルトの名無しさん
05/03/10 23:54:48
2個目以降がもったいないから利用しちゃおうという感じか?
わざわざprognとかでネスト深くする必要がないように。

395:デフォルトの名無しさん
05/03/11 01:20:22
>>394
それって、括弧の存在、如いてはS式そのものを否定することにならないか?
Lisperは、括弧を惜しみなくばら撒くもんだとばかり思ってたよ。

396:デフォルトの名無しさん
05/03/11 01:36:07
そんなおおげさな
(+ 3 (+ 1 (+ 4 (+ 1 5))))
だって
(+ 3 1 4 1 5)
と書けるじゃないか

だからといってどうといったことはない



397:デフォルトの名無しさん
05/03/11 04:09:39
括弧の帆を広げて
順風満帆といきたいねえ

398:デフォルトの名無しさん
05/03/11 04:29:34
実益と実害を全く無視して括弧を好むのは本末転倒。

399:デフォルトの名無しさん
05/03/11 04:39:32
((i))

400:デフォルトの名無しさん
05/03/11 12:40:30
>>387
ちなみに Common Lisp は scheme と同じ (if COND THEN [ELSE]) なわけだが、
ELSE を複数書ける Lisp って Emacs Lisp 以外にあるの?

401:デフォルトの名無しさん
05/03/11 12:50:25
よくわからんが、>>392によると、伝統的Lispでは大体そうなんじゃないの。
つまり、MacLispとか?なんか昔はいろいろなLispがあったらしいし。

CommonLispはSchemeの影響もかなり受けてるしな。
最近のLispがELSE一つなんじゃないかと。

402:デフォルトの名無しさん
05/03/11 13:17:30
>>401
MacLisp には if は無かったみたい。
URLリンク(zane.brouhaha.com)
Common Lisp 以前の「伝統的なLisp」では if よりも cond が基本だったし、ELSEが複数
書けるというのは Emacs Lisp のローカルルールではないかと思うのだが。

403:デフォルトの名無しさん
05/03/11 16:11:16
MIT Lisp Machine では ELSE を複数書けたよ。
URLリンク(www.bitsavers.org)
Symbolics でも同様だったと思う。

404:デフォルトの名無しさん
05/03/12 02:27:01
On Lispを読んでてクロージャの説明のところで

(let ((counter 0))
 (defun inc ()
  (setq counter (+ counter 1)))
 (defun reset ()
  (setq counter 0)))

こういう内部状態を持つ関数の話が出てきて、Schemeに書き換えようと思ったんだけど
defineはlet式の内部で使っても外から見えないから、
上のCommon Lispの例のdefunをdefineに書き換えただけじゃうまくいかない。
Common Lispの例みたいに共通の環境情報にアクセスできる複数の関数の上手い書き方ってないかな。

(define count
 (let ((counter 0))
  (lambda (option)
   (if option
       (lambda ()
        (set! counter (+ counter 1)))
       (lambda ()
        (set! counter 0))))))

(define inc (count #t))
(define reset (count #f))

これじゃちょっと格好悪いよね…

405:デフォルトの名無しさん
05/03/12 03:12:31
(define inc #f)
(define reset #f)
(let ((counter 0))
(set! inc (lambda () (set! counter (+ counter 1))))
(set! reset (lambda () (set! counter 0))))

406:デフォルトの名無しさん
05/03/12 05:31:54
(define-values (inc reset)
(let ((counter 0))
(values (lambda () (set! counter (+ counter 1)))
(lambda () (set! counter 0)))))


407:デフォルトの名無しさん
05/03/17 09:14:18
本スレではLISPの普及に腐心してるようだ(主にドキュメントみたいだけど)
で、このスレ的にはLISPで何が出来ればいいのだろう?
サーバサイド、DB、XMLや、環境としてWindowsで、こんなところなのだろうか?

408:デフォルトの名無しさん
05/03/17 13:09:54
LISPと言えば人工知能に決まってるじゃないか

409:デフォルトの名無しさん
05/03/17 14:41:00
>408
ワロタw
人工知能にすら使えるほどの高級言語なら、業務システムを記述する
ことは易い。

410:デフォルトの名無しさん
05/03/17 20:22:18
>>409読んで、最高に頭悪そうな発言してくださいスレ
かと思った。

411:デフォルトの名無しさん
05/03/17 23:55:46
Lispで人工知能を作って、それに業務システムを作らせるのが真のLisperだ。

412:デフォルトの名無しさん
05/03/17 23:59:03
>>411
それだ!

413:デフォルトの名無しさん
05/03/18 01:44:25
ASDFの記述でLisp以外のコードの扱いをどう書いたらいいかとか分かるようなサンプル
誰か持ってない? ただアーカイブぶちまけてconfigure, make, make installする
だけなんだけも。ASDF慣れちゃうとmakeが面倒になってきくるけど、Lispオンリーで済む
状態でなくなったときにふとどうしたものかと悩んでしまう今日この頃。

414:デフォルトの名無しさん
05/03/18 05:40:36
ASDFの中でmakeするやつっていくつかあるよ。
でも中のmakefileがLinuxに依存したものになってる場合があって
辟易するんだよなー。Makefileの書式とかコマンドのパスとかさ。
署名前提だから適当に手元で改変して食わせるというのもちょっと手間がいるし。

というわけで例としてはUFFIがあるけど上記の点をよろしくおながいしますm(_ _)m

415:413
05/03/20 00:34:40
>>414
サンクス。uffi-tests.asd非常に参考になりました。
ってか自分でASDFのソース読みながらこんな使い方でいいのかな思いながら書いてた
ところに上の情報もらったんで、結果的に他の人の使い方も見てダブルチェック。
自分で好きなようにカスタマイズできてASDFって実にイィ!!ですね。

署名前提ってのはasdf-installのことだよね。cCLan最近見てないけど変化あった?

416:デフォルトの名無しさん
05/03/20 00:49:04
Gauche 0.8 + FreeBSD4.9だが日本語を受け付けてくれないyo!!

gosh> "日本語"
*** ERROR: unhandled signal 2 (SIGINT)
Stack Trace:
_______________________________________

417:デフォルトの名無しさん
05/03/20 00:53:03
ところでここSchemeの話題っていいの?

418:デフォルトの名無しさん
05/03/20 00:54:04
>>416
受け付けてくれるyo!!
% gosh -V
Gauche scheme interpreter, version 0.8.3 [euc-jp]
% gosh
gosh> (string-length "はげ")
2

419:デフォルトの名無しさん
05/03/20 17:52:38
>>407
common lisp emacs

# 需要は、それなりにあるんじゃないかな。
# hemlockは、あまり、うまくいってないようだし。

420:デフォルトの名無しさん
05/03/25 01:36:49
xyzzyでXMLを扱えるコンポーネントって何かあります?

421:デフォルトの名無しさん
05/03/25 09:22:09
> lispを使用してC#やJAVAの代替にするための方法(おまけ)

どうやんだよ?

422:デフォルトの名無しさん
05/03/25 09:24:05
gosh> (string-length ">>418 氏ね")
8

423:デフォルトの名無しさん
05/04/09 13:53:42
clispで定義された
(defun func()(print "func"))->func
という適当な関数を定義してバイトコンパイルしたものを
VC++から呼び出すとか出来ます?パイプでもなんでもいいんですが、
出来ますか?


424:デフォルトの名無しさん
05/04/09 18:12:46
できますよ。

425:デフォルトの名無しさん
05/04/09 18:28:35
clispって住み心地いいですよね。


426:デフォルトの名無しさん
05/04/09 18:29:23
住むところを間違えてます

427:デフォルトの名無しさん
05/04/09 20:48:02
>>424
やり方を教えておくれ、詳しく、たのむ

428:デフォルトの名無しさん
05/04/09 21:26:49
clispのマニュアルに詳しくかいてあるよ

429:デフォルトの名無しさん
05/04/10 00:43:55
LispからCの関数を呼ぶ例しか書いてない・・・

430:デフォルトの名無しさん
05/04/10 02:35:07
おんなじことだろ

431:デフォルトの名無しさん
05/04/10 12:30:06
同じか?
いまいちわからんな〜

432:デフォルトの名無しさん
05/04/10 14:52:56
文字列で渡す方法とかあるんじゃないの?

clisp_eval_string("(eval '(hello world))");

みたいなやつ。

433:デフォルトの名無しさん
05/04/10 15:35:00
system("clisp < tmp_in > tmp_out");
みたいにやればいいじゃん。pipe使えばさらにかっこいいぞ。

434:デフォルトの名無しさん
05/04/10 15:41:28
ちょいと、C++からCLISP関数を呼ぶコードを見せておくれでないかい。
リファレンス参照したが、どうにも解らん。たのむよ〜

435:デフォルトの名無しさん
05/04/10 17:18:43
>>433

436:デフォルトの名無しさん
05/04/10 19:16:55
いわれてみれば、そうだな。
ありがとう、ちょっとやってみるよ。

目標はJAVAから呼ぶこと。

437:デフォルトの名無しさん
05/04/10 23:55:31
String command = "lisp.exe";
Process process = Runtime.getRuntime().exec(command);
InputStream is = process.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));


String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
clispを呼び出すまではできたんだけどね、出力する方法が分からん。
(当初の目的は、単純にclispの関数を呼び出すだけだったんだけどな〜)

438:デフォルトの名無しさん
05/04/11 00:05:10
>>437
(ちょっとスレ違いになるが)
process.getOutputStream() して取得したストリームに書き込めば、それがlisp.exeの
標準入力になる。やはりBufferedWriterをかぶせるのが良いがflushを忘れぬようにな。

439:デフォルトの名無しさん
05/04/18 19:31:51
テストフレームワークって何使ったる?
ptester が手軽でいいなと思うんだけど。

440:デフォルトの名無しさん
05/04/18 21:56:48
自前のもの。



441:デフォルトの名無しさん
05/04/18 22:05:51
Lispだと5分くらいで作れちゃうから、ついつい自前のを作ってしまうのでした。

442:デフォルトの名無しさん
05/04/18 22:33:32
やっぱ自前ですか。
最近出版された Practical Common Lisp の中でも数十行で作ってたからな。
でも、 Common なテストフレームワークが欲しくないですか?


443:デフォルトの名無しさん
05/04/19 20:25:56
これ以上Commonを大きくするのは嫌です

444:デフォルトの名無しさん
05/04/24 20:53:29
jlinkerってjavaからLispを呼ぶときってどうやるの?
いまいち使い方が分からん。

445:デフォルトの名無しさん
05/04/25 06:56:03
jlinkerもjilもサンプル通りにやっても動きゃしない。
疲れた。寝る。

446:デフォルトの名無しさん
05/04/25 20:30:59
Soft Bank Common Lisp 0.9.0リリースあげ。
ちょっと古いけどslime 1.2あげ。

447:デフォルトの名無しさん
05/04/25 21:49:16
>>446
こらこらこら。捏造イクナイ。ところで、あがってないよ。



448:デフォルトの名無しさん
05/04/25 23:01:36
>>447
URLリンク(sourceforge.net)

URLリンク(common-lisp.net)

449:デフォルトの名無しさん
05/04/25 23:29:47
>>448
よく見れ。


450:デフォルトの名無しさん
05/04/25 23:34:04
jlinkerってそんなにハマるようなところあったっけか。
Javaのクラス名との対応さえとれてしまえば後は楽勝だった記憶があるんだが。

451:デフォルトの名無しさん
05/04/25 23:40:20
>>449
いいじゃん。
日本ではSBCLはSoft Bank Common Lispと読むんだよ。

452:デフォルトの名無しさん
05/04/25 23:53:00
>>451
Oh! SBCL っつー月刊誌を出したら認めてやる


453:デフォルトの名無しさん
05/04/26 07:13:44
>>450
いや使い方がまったくのってないんで、さっぱりわからん。
Lispからjavaを呼びのはなんとかなってんだが、javaからLispを
呼ぶ方法が情報皆無。

こうなったらACL買ってサポートで情報吐かせるしかないなぁ〜〜。

454:デフォルトの名無しさん
05/04/26 11:14:09
TryJavaToLisp.java
tryjtol.cl
ってのが./examples/jlinker/basicにあるけど・・・(ACL7 Enterprise)

455:デフォルトの名無しさん
05/04/26 14:01:53
>>454
うむ。それを試そうとしてはまっている。
jlinker-initがないといわれる。
jlinker.faslの中で定義されてないのか、と思案中。

ちなみに、ACL7 Enterpriseって幾ら位するの?
10万ていどなら茄子で買う。

456:デフォルトの名無しさん
05/04/26 22:32:17
そのサンプル問題なく動いたけど。jlinker-initってLispからJava呼ぶ準備にも
使うハズだから、JavaからLisp呼ぶときだけうまく行かないって何かが変だと思う。

価格は過去スレにあった気がする。とても個人じゃ買えない。

457:デフォルトの名無しさん
05/04/26 23:40:05
なんつーかサンプルのreadmeに書いてある手順でやると、
(jlinker-init)でエラーになるんだよな〜。所詮Trialということかな。

>価格は過去スレにあった気がする。とても個人じゃ買えない。
マジで?
そうか、普通に7のProfessionalでも買うかな。まぁ10万強ぐらいだろう、多分。
これってProfessionalってネイティブコンパイルできたっけ??

458:デフォルトの名無しさん
05/04/27 00:23:16
ACL7のTrialって出てないですよね。ってことは6.2?
微妙に違うんでしょうね。6.2持ってないので確認できないですが。

Professionalでもネイティブコードにコンパイルはできます。ってTrialでもできて
ますよね?作成したアプリケーションの配布とかMySQL/Oracle Directが付いてないとか
いう点が異なってたと記憶してますが詳細はFranz Inc.に直接確認してください。
頼めばProfessionalで十分かどうか確認するために評価ライセンスも発行してもらえると思います。

459:デフォルトの名無しさん
05/04/27 00:32:47
>Professionalでもネイティブコードにコンパイルはできます。ってTrialでもできて
ますよね?

勇気を持って言おう!!
・・・知らなかった。マジで知らなかったorz
試しに適当なプロジェクトをコンパイルしたらなんかEXEが出来てた。
いや〜なんつーか奥が深いねACLは。ちょっと首つってくるわ。

460:デフォルトの名無しさん
05/04/27 22:51:13
EXEってGUIでなければ作れないのかな?
VCみたいにDOS窓で動作するEXEは無理みたいだな〜。
生成されたDLLからLispの関数名を抜き出して使おうかと思ったが、
dependencywalkerでも関数名もなにも出てこない。

きついのう。

461:デフォルトの名無しさん
05/06/02 01:21:34
#'hoshu

462:デフォルトの名無しさん
05/06/02 17:05:34
gclでcに変換してコンパイル汁

463:デフォルトの名無しさん
05/06/05 01:03:21
>>462
そんなことは出来ん

464:デフォルトの名無しさん
05/06/05 01:05:39
GCL は知らんけど、ECL はスタンドアローンなバイナリ作れるから GCL でも
出来んじゃないの?
Win で出来るかは知らん

465:デフォルトの名無しさん
05/06/05 01:14:29
>>464
スマン、出来た

466:デフォルトの名無しさん
05/06/05 01:16:38
オメデォ

467:デフォルトの名無しさん
05/06/05 06:55:37
スキームのマクロについて丁寧に説明しているドキュメントない?
できれば日本語、ないなら英語でもいいや。

468:デフォルトの名無しさん
05/06/05 10:25:27
Schemeの話はスレ違い

469:デフォルトの名無しさん
05/06/05 11:19:23
>>468 なんだかしらないけど、病院行ったほうがいいよ。

470:デフォルトの名無しさん
05/06/05 14:06:22
ここはCommonLispのスレ
CommonLisp/Schemeスレは別に存在する

471:デフォルトの名無しさん
05/06/05 14:08:28
人少ないしSchemeネタもいいんじゃね?

マクロのことは入門Schemeとかにのってないのかな?

472:デフォルトの名無しさん
05/06/05 14:26:42
元々このスレはアンチschemerが立てたという経緯がある
そういう変な人の相手をしたくなかったら本スレでやったほうが良いかも
それでもここで続けるというのなら別に止めはしない

473:デフォルトの名無しさん
05/06/05 14:46:39
つーか、明らかに Common Lisp とは関係ない話題だし Scheme のスレもあるのに
このスレでやる理由は何もない。やめてほしい。

474:デフォルトの名無しさん
05/06/05 16:22:36
>>471
このスレだったか、もう一個のスレだったか忘れたけど、
本スレで Common Lisp の質問をしても、Scheme で返事が
返って来る事が多いのは S/N 比が悪いってことで立てられた
経緯があるから、Scheme ネタは宜しくないだろう。
わざわざ波風立てたい理由が分からん。

475:デフォルトの名無しさん
05/06/05 20:15:45
>>474
S/N比とかいってるアフォは、>>6だろ
しかしこのスレもあんまCommonLisp特有の話って続かないな
ちらほらSchemeの話にそれたりする

ところで、

【一日】CommonLisp【一門】
スレリンク(tech板)

こっちは放置か?


476:デフォルトの名無しさん
05/06/05 20:30:41
本スレは元々「Lisp Scheme」スレの筈で、
CommonLispはただのLisp属の1つという扱いだったんだが、
いつかの馬鹿がLisp->CommonLispに勝手に限定しやがった。
これはPart9か10辺りの出来事。
まあ、それでもCommonLispの話はほとんどされた覚えはないが。
相変わらずScheme寄りな本スレを見切ったのか、結局は
CommonLisp専用スレいくつか立って去っていったな。

そろそろ本スレは「Lisp Scheme」に戻そうかw

477:デフォルトの名無しさん
05/06/05 20:40:40
>>476
わざわざ波風立てたい理由が分からん。

478:デフォルトの名無しさん
05/06/05 20:56:55
>>477
Lispよりも波風が好きなんだろう

479:デフォルトの名無しさん
05/06/05 21:10:55
>>476
その辺の話は本スレの次スレ立てるときにでもまたしてもらえるとありがたい。
CommonLisp専用スレがあるんだから、もうどっちでもいいと言えばいいよ。

480:デフォルトの名無しさん
05/06/05 21:12:39
早期にEmacsLispと分離したのは正解だと思う。
CommonLispも同じ道を辿れればいいね。

481:デフォルトの名無しさん
05/06/05 21:21:27
やっぱ Lisper と Schemer は仲悪いんだな
大した違いは無いのに、何がこうさせるんだろう…

482:デフォルトの名無しさん
05/06/05 21:27:30
JavaとC++くらいには違うかもな。w
漏れは本スレも読んでいるが、ここはCommon Lispのスレなのだから
Schemeのマクロ(Common Lispのマクロとは大きく思想が異なる)の
話題はよそでやるのが当然だと思う。
これは仲悪いとかの問題ではない。

483:デフォルトの名無しさん
05/06/05 23:26:35
小さい人間


484:デフォルトの名無しさん
05/06/06 16:02:41
さて、ネタも溜まったしそろそろコードジンに発表していい?

485:デフォルトの名無しさん
05/06/06 21:28:37
>>484
出典:2chってちゃんと書けよw

486:デフォルトの名無しさん
05/06/07 08:04:05
向こうのスレでみんなで仲良くタライを舞わしていたらC++君が乱入の模様。

487:デフォルトの名無しさん
05/06/07 18:52:10
>>467
URLリンク(www.scheme.com)

が英語だけど、比較的詳しい。 あと、MzSchemeかDrSchemeの真乳有るあたりかな。。

488:デフォルトの名無しさん
05/06/12 21:10:08
こっちでいいかな。
Practical Common Lispの24章、25章あたりをざっくり読んでこうやってマクロは組み立てて
行くものなのかと感心しているところなのですが、ちょっと応用しようと思ったらすぐに方法が
わからなくてハマりましたので助けていただきたく。

やりたいことはdefine-binary-classとかのマクロでビットフィールドを持つ構造を扱いたいの
ですが・・・どの辺から発展させていったらいいんですかね?
一回のI/Oで複数個のスロットに値を配るのはできそうなんですが、その為の構文をどう設計する
べきかで悩んでます。無理にマクロにしないで泥臭く書いて行けばできるのは間違いないんですけど。

489:デフォルトの名無しさん
05/06/12 21:30:59
>>488
何に悩んでるかよくわからないけど、構文としては :bytes で指定するバイト数
の代わりに :bits でビット数を指定するみたいな具合にすればいいんじゃない?

490:488
05/06/12 21:54:40
スロット単位でreadしたものが流れて行っちゃう(こんな表現で伝わるかな)のは
マクロ側でいまストリームの何バイト目の何ビット目まで読んだ、みたいに自前で管理すれば
いいんですかね。

身近にLisp使いがいないんで、この本に出会うまで実際のコーディング上のノウハウみたいなの
知る機会がなかなか無くて随分と損した気がします。

491:デフォルトの名無しさん
05/06/12 21:59:26
>>490
まずビット単位でI/Oできるストリームみたいなのを構築(当然この中でバッファリング
する必要があるだろう)して、その上に作るのがいいんじゃないかな。
マクロにするかどうかというのは本質ではない気がする。

492:488=490
05/06/12 22:11:23
> マクロにするかどうかというのは本質ではない気がする。
本質ではないという意見も理解できるのですが、この章を読んでいてPaul Grahamが書いてる
ような「ミニ言語を作ってその言語を使ってプログラミングする」っていうのはこういうことかと
何となくわかったような気がしたのですよ。

逆に、いままでLispで自分流に書いて来たコードって全部「マクロ展開後」の結果をひたすら
書いて来たように感じました。それでもEmacsの中でちょいちょい変更してはテストしながら
やっていたのでC/C++/Javaよりは気楽に書いてましたけど(主観ですが)。

493:デフォルトの名無しさん
05/06/12 22:16:13
「マクロにするかどうかというのは本質ではない」と書いたのは、あくまで
バイト単位とかビット単位とかという議論に対しては、という話ね。
ま、気楽にやりましょ。w

494:488=490=492
05/06/12 22:32:46
> ま、気楽にやりましょ。w
ですね。

で、こっちなんですが >>まずビット単位でI/Oできるストリームみたいなのを構築
参考になりそうなドキュメントとかご存知ないですか?何でもかんでも自分で作っちゃうのが
Lisp屋さんの流儀みたいですが全然技量的に到達できそうもない今日この頃・・・

495:デフォルトの名無しさん
05/06/20 06:57:40
LispってCの#ifとかないの?

496:デフォルトの名無しさん
05/06/20 07:16:07
CL なら #+ #-

497:デフォルトの名無しさん
05/06/20 07:19:17
勿論あるよ。

URLリンク(www.lisp.org)
URLリンク(www.lisp.org)
URLリンク(www.lisp.org)

498:デフォルトの名無しさん
05/06/20 20:40:22
やっぱCLはこういうとこちゃんと考えてあるなあ。


499:デフォルトの名無しさん
05/06/21 07:10:59
Planet Lisp 見たら、SBCL で EUC-JP 使える様になったみたいでビクーリした

500:デフォルトの名無しさん
05/06/22 02:59:25
SBCL、いつになったらWindows portは出来上がるんだ……。


501:デフォルトの名無しさん
05/06/22 03:06:21
UTF-8は?


502:デフォルトの名無しさん
05/06/22 03:10:51
>>501
SBCLならかなり前からサポートされている

503:デフォルトの名無しさん
05/06/27 12:49:24
すみません、本スレを見ていて分からないんですが、
既存の関数名に別名をつけたい場合(nreverse に my-nreverse とつけるなど)、
Common Lisp ではどう書くのが良いんでしょうか?


504:デフォルトの名無しさん
05/06/27 14:02:55
(setf (symbol-function 'my-nreverse) #'nreverse)

505:デフォルトの名無しさん
05/06/27 14:20:09
いや、自分もそれでいいと思ってたんですが、本スレで「無知」と言われてたので、
何かもっと良い書き方があるのかなと。


506:デフォルトの名無しさん
05/06/28 00:18:10
(setf (fdefinition 'my-nreverse) #'nreverse)

507:デフォルトの名無しさん
05/06/29 00:16:54
変わんないじゃん。つうか、xyzzy には fdefinition はなかった。

508:デフォルトの名無しさん
05/06/30 10:20:04
俺は、本スレで煽ってた奴は、Common Lisp に fset があると勘違いしていた
んではないかと疑ってるのだが。


509:デフォルトの名無しさん
05/07/02 16:20:12
lispって配列は参照渡しですか?

510:デフォルトの名無しさん
05/07/02 18:20:15
>>509
うん

511:デフォルトの名無しさん
05/07/02 19:15:29
>>510
どうもです

512:デフォルトの名無しさん
05/07/02 21:51:40
…………… く ず れ す ……………

513:デフォルトの名無しさん
05/07/03 17:35:10
すいません、質問なのですが
(al-reverse'(a(b c)(d(e f))))
と与えたら((((f e)d)(c b)a)となり
中身が全て反転するような関数al-reverse
を定義するにはどうすれば良いのでしょうか?


514:513
05/07/03 18:23:18
自己解決しますた。失礼。

515:デフォルトの名無しさん
05/07/12 05:17:03
質問です。

普段使っている、lispアプリhogeがあって、
そのhogeをロードした後、必ず実行する関数(hoge-init)があるとします。

で、
(defun hoge-starter ()
(load "hoge")
(hoge-init))
の様な関数を、lispの起動時に読み込まれる初期化ファイル(.init.lisp)に
定義したいのですが、この定義をしてlispを起動すると、
`undefined function: hoge-init'
と、警告がでてしまいます。

この警告を消したいのですが、どのようにすれば良いでしょうか?

eval-when を使うのかと思って試したのですが、うまくいきませんでした。

516:デフォルトの名無しさん
05/07/12 09:42:48
>>515
まず使っている処理系や環境を書くように。


517:デフォルトの名無しさん
05/07/12 11:17:36
reverseを下記のようにプログラミングしました.
(defun my-reverse (l)
(cond ((null l) nil)
(t (append (my-reverse (cdr l)) (list (car l))))))

リスト内にもreverseをかけるべく再起処理を施したいのですが,
なかなか出来ません,お願いします.


518:デフォルトの名無しさん
05/07/12 12:24:49
(my-reverse (car l))

519:デフォルトの名無しさん
05/07/12 13:08:00
やれやれうちの大学の奴多いな。

520:デフォルトの名無しさん
05/07/12 13:31:40
>>519
おまいの大学の奴らだったのかw

521:デフォルトの名無しさん
05/07/12 13:44:40
>>519
お前もこのスレッド見ている時点でやれやれだなぁ.

522:515
05/07/12 14:44:44
>>516
失礼しました。

linux上で、cmuclとsbclを使っています。

523:デフォルトの名無しさん
05/07/12 15:26:05
>>521
見ているだけならいいんじゃね?
宿題を代わりにやってもらうってのはダメだが

524:デフォルトの名無しさん
05/07/12 16:29:19
2ch はおまいらの学校の校則には縛られません

525:デフォルトの名無しさん
05/07/12 16:44:22
宿題はさっさと教えてやった方が本人のタメにならなくていいな

526:デフォルトの名無しさん
05/07/14 11:59:58
なるほど!Common Lisp と Scheme のスレを分離したいという意見が多い理由
がわからなかったのだけど、やっと分かった。宿題を丸写しするためだったの
か!Common Lisp と Scheme の違いが分からないのなら、そりゃ混ざってちゃ
困るよなあ。了解しました。

◆「Lispに関する次の問いに答えよ」m(__)m
URLリンク(mentai.2ch.net)

↑のスレの1はさらに上を行く勇者で、Lisp と Ruby の違いも分からない。

まあ、別に悪いことだとは思わないけれど。私も興味のない科目はそんな風だっ
たし。


527:デフォルトの名無しさん
05/07/14 13:54:12
>>525
わらた。

528:デフォルトの名無しさん
05/07/21 05:48:46
ハッカーと画家 読んだことある香具師いる?

529:デフォルトの名無しさん
05/07/21 09:08:55
>>528
ノシ

530:デフォルトの名無しさん
05/07/21 23:47:57
>>528
ノシ

531:デフォルトの名無しさん
05/07/23 03:57:57
誰かCL-HTTPでhelloworld書いてくれ
俺のACLではloadできない

532:デフォルトの名無しさん
05/07/24 21:42:19
関数内で任意のz(関数内で使われていない変数)を定義して、それを値として使いたいのですが、どのようにしたらよいでしょうか?

533:デフォルトの名無しさん
05/07/24 21:42:53
期待age

534:デフォルトの名無しさん
05/07/24 22:35:57
>>532
よく質問の意味がわからんが、関数内で任意のz(関数内で使われていない変数)を
定義して、それを値として使えは良いのではないのか?w

535:デフォルトの名無しさん
05/07/25 16:35:07
>>534
説明が下手でサマソ。
なんというか、例えば全部のアルファベットを受け取ったときにも
まだ未使用のアルファベットとして定義して、そいつを値にしたいんだ
そんなことって可能なのか?



536:デフォルトの名無しさん
05/07/25 18:33:08
とことん説明の下手な香具師だな。


537:デフォルトの名無しさん
05/07/25 18:42:19
gensymでいいんじゃない?

538:デフォルトの名無しさん
05/07/25 23:54:43
二つのリストから最大値と最小値を1個づつ取り出し、この二数を割る
プログラムはどうつくればいいですか?


539:デフォルトの名無しさん
05/07/26 00:03:56
最大値を求めるプログラムと
最小値を求めるプログラムを書く。

二回走査するのがいやだったら
走査は一回にして最大値と最小値をリストにしてapply

540:デフォルトの名無しさん
05/07/26 02:35:34
おー久しぶりにのぞきにきたが,Lisp 関連スレが増えてる.

>>538 いいか,若いの.問題の定義がよくわからんが,考え方をおしえてやろう.
お前さんは
(欲しい関数 リスト1 リスト2) => (/ リスト1の最大値 リスト2 の最小値)
としたいわけだ?ならそう書けばよい.
(defun 欲しい関数 (リスト1 リスト2)
(/ リスト1の最大値 リスト2の最小値))
一度に考えるな.すぐにわからんものは関数にしてしまえ.
(defun 欲しい関数 (リスト1 リスト2)
(flet ((リスト1の最大値 ()
...)
(リスト2の最小値 ()
...))
(/ (リスト1の最大値) (リスト2の最小値))))
さて,こうすると,除算の問題はもう解けた.あとは
リスト1の最大値, リスト2の最小値という小さな問題を解くだけだ.
さて,日本語だと通らない処理系もあるから,↓のようにしよう.
(defun answer (list1 list2)
(flet ((max-of-list1 ()
...) ;; list1 の最大値を求める
(min-of-list2 ()
...)) ;; list2 の最大値を求める
(/ (max-of-list1) (min-of-list2))))
なに?授業を聞いてないしやる気もないから最大値も最小値も求められない?
そうだね, (apply #'max list1) や (apply #'min list2) でいいんじゃないか?


541:デフォルトの名無しさん
05/07/26 03:14:00
テキストには#ついてねーよ
progは習ったがfletはやってねー
ま、8クイーン頑張れよw


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5388日前に更新/244 KB
担当:undef