【入門】CommonLisp【 ..
[2ch|▼Menu]
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

542:デフォルトの名無しさん
05/07/26 05:47:40
>>535
何か具体的にやりたいことがあるんでしょうから、
具体例を出しちゃった方が話が早いと思いますよ。

>>541
prog って使ったことないや。
tagbody つきの let みたいなんでしたっけ。

543:535
05/07/26 18:02:54
>>542
その通りです。
では、具体的な話。

λ計算中に現れる[lexp1/x]lexp2を表現する関数
(defun substitution (x lexp1 lexp2))の中で

x≠yかつφ(E)∋x、φ(Q)∋yをどちらも満たすなら
任意のλ式E、任意のz(ただしzはx≠z≠yかつ
(E)Qの自由変数でも束縛変数でもない)に対して
[Q/x]Ly.E → Lz.[Q/x]{z/y}E

って書き換えたいんです。
ここで、Lx.Ly.(y)xは(L x L y (y) x)と表現します。

544:535
05/07/26 18:04:30
あ、ここでっていうのは単なる表現の例です。あしからず。

545:デフォルトの名無しさん
05/07/26 18:10:14
>>543
相変わらず説明は下手だなぁ。gensymじゃ駄目なのか?

546:535
05/07/26 18:27:20
>>545
鬼 才 現 る !

すいませんでした。
>>537でも書き込んでいただいていたみたいなのにスルーしてましたorz
そんな関数が存在していたとは・・・知りませんでした。
ありがとうございました!

547:538
05/07/26 20:39:51
>>540 539
説明ありがとうございますm(_ _)m
やってみます。

548:デフォルトの名無しさん
05/08/07 00:16:00
このスレって、やっぱCommonLisp専用スレ?
EmacsLispやSchemeの初心者レスはすれ違いでしょうか?

549:デフォルトの名無しさん
05/08/07 00:20:37
>>548
うん。スレ違い。
このあたりかな。
スレリンク(tech板)

550:デフォルトの名無しさん
05/08/08 01:12:30
質問です。

(defun func (x)
(setq x 2))

(setq a 1)

(func a)

などとして、グローバルな変数をfuncの引数にして呼び出した時に
そのグローバル変数自体が書き換えられるような、
C言語で例えるならポインタ引数のような使い方をするには
どうすればいいのでしょうか?

551:デフォルトの名無しさん
05/08/08 01:20:58
トップレベルで変数を定義して、関数内でsetqなりsetfなりを呼び出せばOK

552:デフォルトの名無しさん
05/08/08 01:28:25
(set x 2) とか (setf (symbol-value x) 2) とか。お好きな方で。
関数に渡すのはシンボルね。

553:デフォルトの名無しさん
05/08/08 01:52:21
call by name にしたいならマクロ
(defmacro macro (x)
`(setq ,x 2))
(setq a 1)
(macro a)
a
=> 2

554:550
05/08/08 04:02:54
ということは、550で書いたコードをそのまま実行すると
(func a) の後はaの値は2になっているはずですよね?
でもトップレベルでsetqした値、つまり1になっています…
ここでどうにかaを2にしたいんですが…
質問の仕方が悪いのかもしれません、すみません

555:550
05/08/08 04:04:46
あああすみませんわかりました!!
seqじゃなくてsetを使うとできました。お騒がせしました…
とても助かりました。命の恩人です。

556:デフォルトの名無しさん
05/08/08 04:39:29
嬉しさは伝わるが、すごい表現。出来なかったら首でも吊ってたんだろうかw


557:デフォルトの名無しさん
05/08/08 11:44:30
>>556
わろす

558:デフォルトの名無しさん
05/08/19 04:41:05
すいません、LISPで画像処理をしたいのですが、
JPEGを扱うにはどうしたらいいのでしょうか。
いいライブラリがあったら紹介ください。

559: 
05/08/19 09:05:28
gcl で substring が呼べないのはなぜでしょうか

560:559
05/08/19 09:20:57
ごめ。
(subseq "hoge" 0 2)
"ho"
で出来た。色々変わったのかね

561:デフォルトの名無しさん
05/08/25 04:45:03
選別収集ってどんなだったっけ
(mapcan #'(lambda (x)
(cond
ここまでおもいだした

562:デフォルトの名無しさん
05/08/25 06:02:14
選別収集ってなんだったっけ。
srfi-1 でいう filter-map?

563:デフォルトの名無しさん
05/08/26 01:30:58
(mapcan #'(lambda (x)
(cond ((predicate x) (list x))
(t nil))
list)

predicateがoddpでlistが'(0 1 2 3 4 5) なら '(1 3 5)が返る

564:デフォルトの名無しさん
05/08/26 02:09:00
(remove-if-not #'oddp '(0 1 2 3 4 5))
=> (1 3 5)

565:デフォルトの名無しさん
05/08/26 02:26:56
remove-if-not や delete-if-not やらは deprecated らしいよ。
URLリンク(www.google.co.jp)

(remove-if (complement #'oddp) '(0 1 2 3 4 5))

と書くそうだ。

566:デフォルトの名無しさん
05/08/27 03:33:37
deprecatedって推奨されてないってこと?

remove-ifはなんだか収集という感じがしない
mapcanにできてremove-ifにできなさそうなものを考えてみる

567:デフォルトの名無しさん
05/08/29 12:07:23
別にやってることの本質は同じじゃない?
選別収集を言い換えればつまりはいらないものを捨てるってことだろうし。
remove-ifでもlambdaつかえば結局同じことだと思うけれど。

568:デフォルトの名無しさん
05/08/30 02:11:36
mapcan でなら複数のリストを取って選別収集するようなことができるかな。
(mapcan #'(lambda (&rest x) (if (every pred x) x nil)) list) みたいに。
つか、実装の詳細は措いて、mapcan で書き下したもの(の限定版)に
名前をつけたもんがremove-if(-not) なんじゃないかいな。

569:名無しさん@そうだ選挙に行こう
05/09/11 21:38:55
lispでCGI組みたいんですけど、
Apacheから直接PHPとかPerlみたいにはできないんでしょうか?
mod_lispとかlispachとかgocheとかはネットで調べたんですが、
なんとなくすっきりしません。
やっぱ自分で作るしかないのかな?


570:名無しさん@そうだ選挙に行こう
05/09/11 23:01:59
>>569
> なんとなくすっきりしません。

詳しく

571:デフォルトの名無しさん
05/09/12 12:46:48
Portable AllegroServeは?
表にApache建てたいならmod_proxyで。


572:デフォルトの名無しさん
05/09/12 23:20:06
>>570 えーと、つまりPerlやPHPのようにApacheのModuleとして組み込んで
直接ApacheのAPIを操作できるようにならないかということです。

>>571さん、なんとなくすっきりしないといったのは、
こういったApacheから何かを介してLispへアクセスするというのが、
私にとっては違和感がありまして…。

最近になってプログラミングをやりだしたものですので、
変なこと言ってるかもですが、
Apacheを使ってsoapとかのWebserviceのxmlを読み込み、
Routerのようにできないかなと思ってまして。
もちろん他の言語でもできるのですが。。。

こんなLisp初心者にご解答ありがとうございます。

573:デフォルトの名無しさん
05/09/26 03:17:10
Cで書くLISP処理系の本で今手に入るものはあるんでしょうか
大学近くの古本屋を回ってもあんまり理工書がないんですが

574:デフォルトの名無しさん
05/09/26 12:07:11
LISPでGoogle検索すればゴロゴロ転がってる気が
昔のアスキーのCプログラムブックIIIは独自LISP処理系扱ってるけど
今風の実装じゃないし
個人的には末尾再帰できない独自LISPはあんま魅力ないな
自分で作るならSchemeの方がいい

575:デフォルトの名無しさん
05/09/26 12:11:52
>>574
末尾再帰の実装なんて普通のLispでもさほど難しくはない。Schemeは
full continuationの実装など悩む割に報われない部分で苦労する。
まぁ作ってみるだけなら面白いけど、実用的な処理系は結構大変。

576:デフォルトの名無しさん
05/09/26 12:14:50
難しいかどかじゃなくて末尾再帰も標準的でない独自LISPには魅力感じないつってんの

577:デフォルトの名無しさん
05/09/26 12:17:57
>>576
おまえスレタイ読めるのか?
スキームの宣伝は他でやれよ。

578:デフォルトの名無しさん
05/09/26 12:20:35
ちなみにちゃんとしたSchemeでも継続はあんま使わないよ
別に無くてもなんとかなるレベルでしょ
ただし末尾再帰は無いとコーティングスタイルにまで影響する
最適化の余地があるCommonLispならともかく、
独自LISPにはもう期待できる事が何も無い

579:デフォルトの名無しさん
05/09/26 12:23:36
>>577
スキームの宣伝て何?
おまえこそちゃんとレス読めよダボが

580:デフォルトの名無しさん
05/09/26 12:28:57
>>578
はぁ?
> 最適化の余地があるCommonLispならともかく、
> 独自LISPにはもう期待できる事が何も無い

何か言ってる意味わかんねよ。
Common Lisp系の独自LISPとかイメージできないの?

581:デフォルトの名無しさん
05/09/26 14:26:44
>Common Lisp系の独自LISP
イミフメ

582:デフォルトの名無しさん
05/09/26 21:57:00
見事に話が噛み合ってないな(w
ちなみに漏れは580の言ってることは理解できる派ね。まぁただでさえマイナーな言語に
関わってる者同士マターリと行こうや。

583:デフォルトの名無しさん
05/09/27 01:25:11
末尾再帰の最適化をするのは Scheme だけじゃないしね。
俺も継続は無くても良いけど、末尾再帰の最適化は欲しいなぁ。

584:デフォルトの名無しさん
05/09/27 01:36:27
>>583
以前話題になった気がするけど、Common Lispにおける末尾再帰の最適化は、
・インタプリタはほとんどの処理系がやらない
・コンパイラはほとんどの処理系がやる
という結果だったと思う。Common Lisp的思想からすれば順当なところだろうね。

585:デフォルトの名無しさん
05/09/27 02:42:55
Scheme 勉強したてで毒されてるな.
末尾再帰の最適化はメリットばかりじゃねーんだぜ?
インタプリタ上では *常に* 最適化されちゃったらデバッグしにくいだろ?
Common Lisp 的思想なら,コンパイル時の最適化オプションで
制御できるほうが嬉しい.

末尾再帰の最適化を示すオプションが欲しいって話もあるけどな.事実上,
speed 3 とか debug 0 にしとけばほとんどのコンパイラがやってくれっからねぇ.


586:デフォルトの名無しさん
05/09/27 11:44:41
>>585
> インタプリタ上では *常に* 最適化されちゃったらデバッグしにくいだろ?

これはスタックトレースが取れないとかそういう意味?

587:デフォルトの名無しさん
05/09/28 02:18:03
常に最適化されちゃって選択できねーとかははやすぎる最適化の部類に感じる時がある.
CL 派としては c.l.l で出てた宣言的アプローチで解決してほしいなー.

「可能な限り最適化する」「自己呼び出しとローカル関数のみ最適化」「自己呼び出しのみ」「最適化なし」

とかが宣言できるみたいな.まぁ,現状はコンパイラのマニュアルを見る必要
があるわけだけど,それで不都合あるのかっつーはなし.Common Lisp におけ
る末尾再帰の最適化はだってほぼ標準だしね.


588:デフォルトの名無しさん
05/09/28 02:22:10
>>587
結局Common Lispの仕様の問題になるわけだよな。20年間にわたって仕様が安定
している(ANSIでわずかに変更されたところもあるが)のは利点でもあるわけだが、
そろそろ次期規格の話が出てきても良いように思う。

589:デフォルトの名無しさん
05/09/28 09:10:11
元々の話が>>573なわけで・・

590:デフォルトの名無しさん
05/09/28 14:17:11
Schemeばかり書いてると、関数呼び出しが関数呼び出しに
見えなくなるというか、全部継続へのジャンプに見えて来るんだよな。
それに関数とブロック(let)が頭の中でブレンドされて区別されなくなる。
そうすると自己末尾呼び出しだけ特別扱いしたりするのがとても不自然に
感じる。

まあ、Common Lispの空気に合わないってのはわかる。CLで書くときは
スタイルが変わるからな。


591:デフォルトの名無しさん
05/09/29 01:15:48
このスレこんなに人がいたのか(^_^ゝ)


592:デフォルトの名無しさん
05/09/29 03:42:33
>>588
仕様の問題ねぇ.改善の余地(個人的希望は >>587 な)があるとは思うが,
Scheme が The Right Thing だとは思わない.なぜなら,俺には区別したい
時があるからだ.最適化する,しないは選択したい.まぁ,その選択肢が
存在するのが不自然だと言われりゃしょうがねーけどなぁ.

ま,CL にも末尾再帰の最適化は実装依存だが,「ある」という事を言って
おきたかったわけ.

593:デフォルトの名無しさん
05/09/30 19:03:53
lispファイル用の良いアイコン知りませんか?

594:デフォルトの名無しさん
05/09/30 23:27:09
>>593
自作すれば。
↓雛型
(())


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

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