common lispのお勧め参考書を教えてください
1 :
名無しさん@お腹いっぱい。 :
2000/08/10(木) 12:52 書店を見てまわったんですが、どれが使えるのかわかりません。
2 :
名無しさん@お腹いっぱい。 :2000/08/10(木) 13:32
2のような煽りは禁止です。 このスレッドは終了します
4 :
名無しさん@お腹いっぱい。 :2000/08/10(木) 16:05
プログラマ版の方で Common Lisp@` the Language 2nd Ed. をお手頃として挙げたが、誰もつっこんでくれなかったよん。 誰が読むねんこの本、、、
5 :
名無しさん@お腹いっぱい。 :2000/08/10(木) 18:00
俺common lisp実装するときに読んだよ。 それに制御構造とか参考になるじゃん。 英語の話?だったら、俺にはあの厚さはつらいが。
いや、「お手頃」ってとこに突っ込んで欲しかったんだ、、 初心者の質問だったしー
7 :
名無しさん@お腹いっぱい。 :2000/08/10(木) 19:41
CLtL2は「バイブル」的存在ですね。 これだけで理解できればイイですが 入門用として向いているかどうか… でも、この本をマスターできたら99%!
8 :
名無しさん@お腹いっぱい(お酒で) :2000/08/10(木) 19:47
メジャー言語でないから、誰でも判るシリーズみたいな本は無いね (^^;) 256倍わかっちゃうのも… フリーの処理系をゲットして、CLtL2 や Scheme(Freeな処理系はScheme系が多い)の本 片手に、あれこれ使いまくるのが得策かと。
9 :
8(補足) :2000/08/10(木) 19:51
元Lisperとして、何でも答えるから、何かわからないコトが有ったら どんどん質問して来て! できうる範囲で答えます。
10 :
私もLISPer :2000/08/10(木) 20:19
>5 Common Lisp実装したんですか!?
11 :
勉強中 :2000/08/10(木) 20:29
なんとなくlispをはじめたけど、なにやっていいかわかりません。 人工知能とかに興味ありの学生です。
12 :
>8 :2000/08/10(木) 20:39
CLtL2の256倍、、、 恐いこと言いなはんな(笑
13 :
>11 :2000/08/10(木) 20:42
何でもいいからやる事欲しいってんなら Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp でも始めなはれ。
「ひろゆき天才。マンセー」 common lispのお勧め参考書を教えてください 13
15 :
>10 :2000/08/10(木) 23:08
まさか全部はできない(笑)趣味だから。 数のシステムを除いて、言語の基本システム (制御構造など)は全部やった。 関数は最低限しかやってない。 schemeR5RSは継続も含めてほぼフルに実装したよ。 関数もほぼ全部書いた(common lispに比べれば 圧倒的に少ないからね)。 こっちも整数だけだけど。 C++で書いてるし、flex使ってるから、虚数とか実数とかも やろうと思えばすぐできると思うんだけど、 自分が使わないのでやる気にならなかった。 あとは、末尾呼び出しの最適化は適当なとこでやめちゃったな。 こうしてみると結構ヘタレだな、おれ。 威張るためにも、せめてschemeの実数くらいやっとくか。 でもいまそんなことに興味ないんだよな〜。
16 :
名無しさん@お腹いっぱい。 :2000/08/10(木) 23:09
手に入るなら、 「対話による Common Lisp入門」栗原正仁 森北出版株式会社 がとてもわかりやすいんだけど、もう無理かな。
17 :
名無しさん@お腹いっぱい。 :2000/08/10(木) 23:25
schemeの本が手に入る予定ですが、schemeとLispでは 何が違うんですか?
18 :
名無しさん@お腹いっぱい。 :2000/08/10(木) 23:36
> Common Lisp@` the Language 2nd Ed 8000円か・・・(笑) 900ページ以上あるし内容も濃いから高くはないのだろう。
19 :
18 :2000/08/10(木) 23:41
日本語訳版の方>18
20 :
名無しさん@お腹いっぱい。 :2000/08/10(木) 23:53
kkk
21 :
>17 :2000/08/11(金) 12:00
Lisp方言のひとつだよ。<scheme Lispの基礎は、どの方言使っても勉強できます。 scheme を scheme たらしめている個性的な拡張(継続とか)が成されていますが その辺は基礎を学び終わった後に。
22 :
名無しさん@お腹いっぱい。 :2000/08/11(金) 16:19
Lisp好きの間ではCommom Lispよりschemeのほうが好評な印象をうけるのですが、 そこらへんどうですか?
23 :
私はCL派 :2000/08/11(金) 16:52
CommonLispは実用性とか一般性とかで、ちょっと肥満体気味だね。仕事用かな。 Schemeはオタ仕様(失礼)な部分が残っているので、面白さの面では優れているかと。 元々作った人(G.L. Steele)が同じだから、敵対関係とかライバル関係には無いと思う。
24 :
CL :2000/08/11(金) 17:11
Common Lisp でしかプログラム組んだことがなくて、 Schemeは耳学問ですが、Common Lispは確かに関数めちゃくちゃ 多いですね。でも、全部覚える必要はないですし、分からんときだけ CLtL見ればいいですから別に気になりませんね。
25 :
24 :2000/08/11(金) 17:30
Common Lispの参考書、 培風館、情報処理シリーズ4 ウインストン、ホーン著(白井、安部、井田訳)、 LISP第2版、全2巻
26 :
名無しさん@お腹いっぱい。 :2000/08/11(金) 23:44
(define lisp 'オタク言語')
>26 煽ろうと思って調べたの?
28 :
26 :2000/08/12(土) 00:28
知っていました。 煽りではなくてジョークです。
29 :
私はCL派 :2000/08/12(土) 00:52
>26 ' の使い方間違っているあたりがカワイイ (^-^)
30 :
26 :2000/08/12(土) 00:57
間違ってる?
31 :
私はCL派 :2000/08/12(土) 01:04
'hoge は (quote hoge) の省略記法で、閉じるほうの ' はいらないんだよ (^-^)b
32 :
26 :2000/08/12(土) 01:23
LISPは人工知能のプログラムを作るのに使われるそうだが 一度もソースを見たことがない。 ネット上に公開されてないの?
33 :
私はCL派 :2000/08/12(土) 01:35
もうブーム去っちゃったしね… 純粋に LISP だけで記述されたモノはほとんど無いんじゃないかな? KEE、ART、KC が3大人工知能言語だったんだけど、すべて LISP ベースだったと思います。
34 :
LISP好き学生 :2000/08/12(土) 11:55
35 :
LISP好き学生 :2000/08/12(土) 12:04
>32 人工知能用じゃないけど、統計で LISP-STAT っていう有名(言いすぎか?)なフリーウェアがあったと思います 検索エンジンなどで調べてみては?
36 :
名無しさん@お腹いっぱい。 :2000/08/14(月) 00:05
第五世代コンピュータ計画はその後、どうなったんですか?
37 :
>26 :2000/08/14(月) 06:05
いくらでもころがってる。 少しは調べろよ、ぼけ。
>36 予定通りの結果を出して、予定通りに終了しました。
39 :
名無しさん@お腹いっぱい。 :2000/08/18(金) 21:37
>38 予定なんてあったのか?
ああいうのは、だいがい予定調和でおわるんだよね。
41 :
名無しさん@お腹いっぱい。 :2000/08/18(金) 23:07
マジレス希望
42 :
名無しさん@お腹いっぱい。 :2000/08/18(金) 23:23
43 :
LISP好き学生 :2000/08/21(月) 18:17
よく「LISPは人工知能用言語」って言われますよね。 確かに人工知能の分野で主に使われているけど、その為だけの言語ではなく 生産性、汎用性、移植性にすぐれた高級言語です。 コンパイラもあるし、ガベッジコレクションもやってくれる。 多倍長の数値計算も楽々で、分数型もサポートしてるので計算にも まあ使いやすいと思います。 でも一つ謎なのは、よくLISPが関数型言語と分類付けされてますが、 これってバッカスの発表した関数型プログラミングの事でしょうか? それとも単に関数を定義していってプログラムを書いていくから関数 型言語と言っているのでしょうか?だとすると、Cも関数型言語なのに なぜかそうは言われないのが不思議です。
Cは制御構造がステートメントだから後者の関数型言語でもないです。
45 :
LISP好き学生 :2000/08/21(月) 22:20
>44 LISPも制御構造は関数じゃなくて、 スペシャルフォームまたはそのマクロです。
知ったかぶりばかりしてないで、もうちょっと勉強しましょう>43
47 :
名無しさん@お腹いっぱい。 :2000/08/22(火) 00:03
>44 43は 「それとも単に関数を定義していってプログラムを書いていくから関数 型言語と言っているのでしょうか?だとすると、Cも関数型言語なのに なぜかそうは言われないのが不思議です。」 といってるの。 日本語読める?
48 :
44>45 :2000/08/22(火) 00:08
なるほど、どうもです。
49 :
44>47 :2000/08/22(火) 00:14
「関数を定義していってプログラムを書く関数型言語」っていうのに 「Cが」あてはまらない事を書いたんだけど。 あんたこそ、日本語、読める?
50 :
47ではないけど :2000/08/22(火) 00:21
>49 44は「だとすると」とわざわざ断ってるから、 そういうことは指摘されなくても承知してるように読めるよ。
51 :
44 :2000/08/22(火) 00:23
ああ、おれがわるかったよ、ごめんよ。
52 :
名無しさん@お腹いっぱい。 :2000/08/22(火) 01:35
LISP が関数型言語で、C は似非関型言語であって、 その関係は、弥が上にも Java がオブジェクト指向言語で、C++が似非オブジェクト指向言語であることを 連想させる。
53 :
44 :2000/08/22(火) 02:14
だからもうかんべんしてください。
54 :
名無しさん@お腹いっぱい。 :2000/08/22(火) 07:43
しょせんEmacsのマクロ
55 :
名無しさん@お腹いっぱい。 :2000/08/22(火) 09:14
真のLisperはZmacsを使う
56 :
名無しさん@お腹いっぱい。 :2000/08/22(火) 09:23
eLisp以外のLispは糞
kekeke>56
58 :
LISP好き学生 :2000/08/22(火) 13:34
いろいろな御意見ありがとうございます。 さらにどっかの本で prologとLISPは人工知能用に使われている論理型言語で… とのくだりがありました。prologは確かにそんな感じがすると思うん ですが、LISPはどう考えても「論理型言語」だとは思えません。 この前にCやpascalをまとめて「何とか(忘れましたすみません)型言語」 として、ひとまとめにしている箇所もあり、LISPがCよりpascalに近い 構造の言語である様に記述されています。 LISPはprologよりCに近いと思いますが同でしょうか?
59 :
LISP好き学生 :2000/08/22(火) 13:36
58の書き込み訂正です LISPがCよりpascalに近い構造の言語である様に記述されています。 LISPがCよりprologに近い構造の言語である様に記述されています。
60 :
元AIエンジニア :2000/08/22(火) 15:38
Lispだけで人工知能するわけじゃないです。 私の知っている例で言いますと、Lispペースで以下の様な構成を取ります。 1) 知識表現(フレーム表現)言語をLisp上に構築する 2) 前向き推論エンジン(OPS等)を1)のフレームベースで実装する 3) 後向き推論エンジン(Prolog等)を1)のフレームベースで実装する。 4) 2)と3)の融合(OPSの左辺式にPrologのQuery記述を許すとか) 5) cf値(確信度)やファジー値などの演算ユーティリティを組み込む
61 :
名無しさん@お腹いっぱい。 :2000/08/22(火) 16:02
>58 手続き型とか手順型とかでしょうか? 処理の手順を順番に記述するような言語ってことだと思います。 反対に、条件を列挙するような言語を宣言型とか言った気がします。 (くわしい人のつっこみ求む)
62 :
LISP好き学生 :2000/08/22(火) 19:54
>61 名前は忘れましたが、 cとpascalが同じ○○型言語 LISPとprologが論理型言語 と区分けしてるのはどう考えても変だな?と思ったので 他の人の意見を聞きたいだけで、○○の部分はべつにどうでも いいです。
63 :
LISP好き学生 :2000/08/22(火) 19:57
>61 多分、手続き型かそんな感じだった気がしますが… レスつけていただいてありがとうございます。 Cは通常、何型言語と呼ばれてて、どうべばしっくりくるん でしょうね。
64 :
LISP好き学生 :2000/08/22(火) 20:00
>60 後向き推論エンジンをPrologで実装するんじゃなくて、 Prologインタプリタをフレームシステム上に構築するんですか? この辺り興味しんしんです。
興味の無い話はどうでもいいからやめろってことか。
66 :
LISP好き学生 :2000/08/22(火) 21:02
>65 いや、62の発言は確かにそうとらえられてもしかたない発言だと 送信ボタンを押した瞬間に気づきましてすぐあとにフォローの つもりで63を書いたのですが、65さんの御意見は誤解です。 58での僕の質問の意図だけはっきりとお伝えするつもりで書いた のですが、書き方がまずかったと反省しております。すみません。 一般的にどの言語がどのクラスに属するのかは興味がありますので 御意見があれば続けてほしいです。
67 :
60 :2000/08/22(火) 22:11
>64 Prolog も OPS も Lisp で構築したものです。 速度的にはかなり不利ですが、当時は速度は気にしていませんでしたね(失笑) Prolog や OPS の処理要素(Prologだとaxionでしたっけ?OPSならWorkingMemory)が そのままフレームに対応しているのが特徴でした。 現在の状態(事実)をフレーム(オブジェクト)で記述して 例えばその状態から疑われる故障原因を前向き推論で導出する… 候補として挙げられた故障原因を、後ろ向き推論で検証して行く… そんなことの繰り返しで推論を進めて行く機構でした。 (故障診断システムの例)
68 :
名無しさん@お腹いっぱい。 :2000/08/23(水) 00:41
AIといえばドラゴン食えスト4か5くらいからAI機能がついたな。 その他のAIってしらないな。 アイボもあったか・・・
69 :
LISP好き学生 :2000/08/23(水) 01:40
>67 フレームで事実を表現するのはやはり、スロット−スロット 値の対ですよね?推論機構は付加手続きとしてスロットに埋め 込むべきなのでしょうか?それともスロットにルールを埋め込 んでおいて、推論機構は外部に構築したほうがいいんでしょうか? この辺りあんまりいい本見つからなくてどれがいいのか、悪い いのかよく分かりません。Minskyの論文も実装法は全然書いて ないし・・・(泣) やはり手続き的知識はフレームよりルールで表現したほうが 素直だと僕は思うんですが。実装に興味がありますねぇ。
70 :
>69 :2000/08/23(水) 10:21
ルール自体はリスト形式での記述でしたね。 そのリストをスロットの値にすることも出来ましたし メタスロットにルールを持たせて、デーモン的に起動することも可能でした。
71 :
学生時代AIでバイト :2000/08/23(水) 20:30
>デーモン的に起動 if-requiredとかif-added@`if-removedってやつですね。15年前 K-PrologとOPS83でフレームを実装してみたことがあるんですが、 今になって考えると、RDBMSでストアドプロシージャが特定の トリガで起動するのと、何が違うのかって考えてしまいます。 OPS83は前向き推論ルールが書けるPascalだったので、手続き的なのは仕方が ないんですが、Prologでも、気が付くとかなりの部分が手続き的なプログラム になっちゃってました。1万行程度のプログラムをPrologだけで記述すると、 本来のパターンマッチング&バックトラック、リスト処理を生かせる部分って 案外少なかったような気がします。言語仕様上、当然パターンマッチは使うけど、 それはCで書いたif文をProlog流に書き換えただけに過ぎません("\"オペレータの乱用)。 LISPはPrologに比べると遥かに手続き的な言語ですから、なおさら論理型言語 とは言えないでしょう。PROG文の中でループ組めたりもしますからね。 (LISPはウィンストンの教科書読んでFranzLispをちょっといじっただけです ので、基本的には無知ですが、EmacsLISPを書く手助け程度にはなってます)
72 :
LISP好き学生 :2000/08/24(木) 16:56
なるほど、参考になりました。Prologもなんか面白そう ですね。OPSっていうのは知らないのですが、話を聞いて るとつまりプロダクションシステムの処理系ですか。
73 :
LISP好き学生 :2000/09/13(水) 12:48
ちょっとCommon Lispでプログラムを組んでるのですが、難問にぶつかりまして どなたか解るかたおられるでしょうか? letフォームの中でeval等を用いてS式を評価する際、 let文で束縛されているローカル変数をS式中で参照する方法は あるのでしょうか?例えば、 >(let ((result 1)) (eval '(+ 1 result))) 2 としたいのですが。 (上は実際にはresultはグローバルのresultを参照してしまうのです(泣))
74 :
LISP好き学生 :2000/09/13(水) 13:39
(defvar result)とかを前もって宣言しておく、とかしか ないんでしょうか?S式中で参照するシンボルを事前に知って おかないと行けないというのが嫌なので…
75 :
名無しさん@お腹いっぱい。 :2000/09/13(水) 16:00
The form is evaluated in the current dynamic environment and a null lexical environment. (CLtL2) つーことだから、無理やね (^^;) global-let 使えると楽そうだけど… (ZetaLisp仕様)
76 :
名無しさん@お腹いっぱい。 :2000/09/13(水) 19:04
Scheme なら (eval sexp env) をサポートしてる実装は結構あるけどね。
77 :
76 :2000/09/13(水) 19:10
いま Abelson and Sussman の "Structure and Interpretation of Computer Programs" (原著)を 苦労しながら読んでいますが、すでによく知っていると 思っていたことでもいざ読んでみると勉強になりますね。 演習問題を考えていると全然進まないのだった。
78 :
Lisp好き学生 :2000/09/15(金) 16:22
お返事ありがとうございます。やはり無理ですか...。 評価時に環境を得る方法はCommonLispはサポートしてないんですね。 ところでdefmacroの&environmentってどう使うんでしょう?
79 :
名無しさん@お腹いっぱい。 :2000/09/18(月) 01:36
Windows で Common Lisp やってる人, 処理系は何使ってます? やっぱ,KCL ? あれは,DOS 版のインタプリタの 使い勝手が悪いんですけど… キーバインドが自由に決められないとか. なんか上手い方法あります?
80 :
名無しさん@お腹いっぱい。 :2000/09/18(月) 01:50
>78 コンパイルしたらアクセスできなくなるからな。 どうしてもそういう変なことがしたければ、 スペシャル宣言する手もあるが。 &environmentはマクロの中でマクロ展開する場合などに使う。
81 :
LISP好き学生 :2000/09/20(水) 18:06
>80 お返事ありがとうございます。 >コンパイルしたらアクセスできなくなるからな。 起動中の他の関数のローカル変数を参照するような 仕様のコンパイラは作成し難いという意味でしょうか? あと、たとえば (defmacro foo (&environment x) ...) と定義されたマクロ foo にはどんな引数を与えるんでしょう? 勝手にxにシステム側が展開される場所の変数束縛リストを バインドするのでしょうか?するとそれに対するアクセスは assocを用いて行うのですかね。
82 :
名無しさん@お腹いっぱい。 :2000/09/21(木) 03:26
>起動中の他の関数のローカル変数を参照するような >仕様のコンパイラは作成し難いという意味でしょうか? つーかね、言語仕様でそう決まっているから、 アクセスできるようにする必要がないってこと。 なぜ、そういう言語仕様なのかというと、 そのほうが効率がいいからだな。 具体的には、外部からアクセスする必要がなければ、 その変数はレジスタに乗せることができるわけだ。 動的スコープを持つようにコンパイルするのは別に難しいことではない。 現に、すべてのCommon Lisp処理系は、specialと宣言された変数束縛を 動的スコープを持つようにコンパイルすることができる。 >(defmacro foo (&environment x) ...) >と定義されたマクロ foo にはどんな引数を与えるんでしょう? >勝手にxにシステム側が展開される場所の変数束縛リストを >バインドするのでしょうか? システムが勝手に環境オブジェクトをバインドする。 バインドされるのは変数束縛リストではない。 >するとそれに対するアクセスはassocを用いて行うのですかね。 環境オブジェクトの構造は処理系依存であるため、 assocでアクセスできるかもしれないし、 まったくアクセスできないかもしれない。 &environmentは、マクロの中でmacroexpandを呼んだ際に、 macroletで定義されたマクロを展開できるように macroexpandの第二引数に与えるためのものであって、 おそらくキミの期待するものではないだろう。
83 :
LISP好き学生 :2000/09/21(木) 21:41
>82 ふむふむ。なるほど、わかりました。動的スコープを持つように コンパイルする事は可能だと思ってたので不思議に思ったので すが、具体的なご説明有り難うございます。 すると、スペシャル変数をあまり多用すると、ローカル変数で処理 した場合処理と比べて実行速度が遅くなる可能性が高いみたい ですね。勉強になりました。 あと、&environmentで無理矢理なんとかできないのかと思いま したが(やっぱり)無理みたいですね。
84 :
LISP好き学生 :2000/09/25(月) 17:34
問題が(かなり強引な方法ですが…)解決しました。 (defmacro macro-eval (s-exp) `(progn (eval `(defmacro temp-macro () '@`@`s-exp)) (temp-macro))) というようなマクロを用いればローカル変数をスコープにいれた状態 でS式を評価出来ました。以下実行例です。 ---------------------------------------- >(setq s-exp '(print x)) (print x) >(setq x 10) 10 >(let ((x 5)) (eval s-exp) (macro-eval s-exp)) 10 5 5 ---------------------------------------- では。
85 :
名無しさん@お腹いっぱい。 :2000/09/26(火) 05:16
>84 それをコンパイルしたら、期待する動きにはならないと思いますが、 こだわりません。
86 :
LISP好き学生 :2000/09/26(火) 20:03
>85 いえ、確かコンパイル後も動きますよ。 (GNUCommonLispとCLISPで確認済) 以下GCL(ver.2.2.2)での実行例 ---------------------------------------- >(defun foo (s-exp) (let ((x 5)) (eval s-exp) (macro-eval s-exp))) FOO >(setq x 10) 10 >(foo '(print x)) 10 5 5 >(compile 'foo) Compiling gazonk0.lsp. End of Pass 1. End of Pass 2. OPTIMIZE levels: Safety=0 (No runtime error checking)@` Space=0@` Speed=3 Finished compiling gazonk0.lsp. Loading gazonk0.o start address -T 829e76c Finished loading gazonk0.o #<compiled-function FOO> >(foo '(print x)) 10 5 5 ----------------------------------------
87 :
名無しさん@お腹いっぱい。 :2000/09/26(火) 20:04
CLISPでの実行例 ---------------------------------------- [2]> (defun foo (s-exp) (let ((x 5)) (eval s-exp) (macro-eval s-exp))) FOO [3]> (setq x 10) 10 [4]> (foo '(print x)) 10 5 5 [5]> (compile 'foo) FOO ; NIL ; NIL [6]> (foo '(print x)) 10 5 5 ----------------------------------------
88 :
LISP好き学生 :2000/09/26(火) 20:18
まあ、マクロを2回展開(2回目に展開されるマクロは1度目のマクロ 展開後に動的に定義される)するだけなのですので、仕様上は大丈 夫かと。(かなり兇悪ですな…(^^;)
89 :
名無しさん@お腹いっぱい。 :2000/09/26(火) 23:16
そのあとで、 (foo '(print (+ x 1))) を評価すると、 11 5 5 が得られると思いますが、 それでいいなら何も言うことはありません。
90 :
LISP好き学生 :2000/09/27(水) 16:17
>89 え?本当ですか。
91 :
LISP好き学生 :2000/09/27(水) 16:28
なるほど、確かにコンパイル後はうまくいきませんね。 あがいても無駄だった様です。
92 :
名無しさん@お腹いっぱい。 :
2000/10/01(日) 20:45 湯浅太一、萩谷昌巳のCommon Lisp入門(岩波書店) は分かり易い。