トップページtech
92コメント28KB

common lispのお勧め参考書を教えてください

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。NGNG
書店を見てまわったんですが、どれが使えるのかわかりません。
0002名無しさん@お腹いっぱい。NGNG
プログラマ板(http://mentai.2ch.net/prog/index2.html)で参考図書スレとか
lispスレとかあったから、それを一回見てみたら
0003名無しさん@お腹いっぱい。NGNG
2のような煽りは禁止です。
このスレッドは終了します
0004名無しさん@お腹いっぱい。NGNG
プログラマ版の方で
Common Lisp@` the Language 2nd Ed.
をお手頃として挙げたが、誰もつっこんでくれなかったよん。
誰が読むねんこの本、、、
0005名無しさん@お腹いっぱい。NGNG
俺common lisp実装するときに読んだよ。
それに制御構造とか参考になるじゃん。
英語の話?だったら、俺にはあの厚さはつらいが。
00064NGNG
いや、「お手頃」ってとこに突っ込んで欲しかったんだ、、
初心者の質問だったしー
0007名無しさん@お腹いっぱい。NGNG
CLtL2は「バイブル」的存在ですね。
これだけで理解できればイイですが
入門用として向いているかどうか…
でも、この本をマスターできたら99%!
0008名無しさん@お腹いっぱい(お酒で)NGNG
メジャー言語でないから、誰でも判るシリーズみたいな本は無いね (^^;) 256倍わかっちゃうのも…
フリーの処理系をゲットして、CLtL2 や Scheme(Freeな処理系はScheme系が多い)の本
片手に、あれこれ使いまくるのが得策かと。
00098(補足)NGNG
元Lisperとして、何でも答えるから、何かわからないコトが有ったら
どんどん質問して来て!
できうる範囲で答えます。
0010私もLISPerNGNG
>5
Common Lisp実装したんですか!?
0011勉強中NGNG
なんとなくlispをはじめたけど、なにやっていいかわかりません。
人工知能とかに興味ありの学生です。
0012>8NGNG
CLtL2の256倍、、、
恐いこと言いなはんな(笑
0013>11NGNG
何でもいいからやる事欲しいってんなら
Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp
でも始めなはれ。
0014steal@jnCliC-211-86.ppp.justnet.ne.jpNGNG
「ひろゆき天才。マンセー」
common lispのお勧め参考書を教えてください 13
0015>10NGNG
まさか全部はできない(笑)趣味だから。
数のシステムを除いて、言語の基本システム
(制御構造など)は全部やった。
関数は最低限しかやってない。

schemeR5RSは継続も含めてほぼフルに実装したよ。
関数もほぼ全部書いた(common lispに比べれば
圧倒的に少ないからね)。
こっちも整数だけだけど。
C++で書いてるし、flex使ってるから、虚数とか実数とかも
やろうと思えばすぐできると思うんだけど、
自分が使わないのでやる気にならなかった。
あとは、末尾呼び出しの最適化は適当なとこでやめちゃったな。

こうしてみると結構ヘタレだな、おれ。
威張るためにも、せめてschemeの実数くらいやっとくか。
でもいまそんなことに興味ないんだよな〜。
0016名無しさん@お腹いっぱい。NGNG
手に入るなら、
「対話による Common Lisp入門」栗原正仁 森北出版株式会社
がとてもわかりやすいんだけど、もう無理かな。
0017名無しさん@お腹いっぱい。NGNG
schemeの本が手に入る予定ですが、schemeとLispでは
何が違うんですか?
0018名無しさん@お腹いっぱい。NGNG

> Common Lisp@` the Language 2nd Ed

8000円か・・・(笑)
900ページ以上あるし内容も濃いから高くはないのだろう。
001918NGNG
日本語訳版の方>18
0020名無しさん@お腹いっぱい。NGNG
kkk
0021>17NGNG
Lisp方言のひとつだよ。<scheme
Lispの基礎は、どの方言使っても勉強できます。
scheme を scheme たらしめている個性的な拡張(継続とか)が成されていますが
その辺は基礎を学び終わった後に。
0022名無しさん@お腹いっぱい。NGNG
Lisp好きの間ではCommom Lispよりschemeのほうが好評な印象をうけるのですが、
そこらへんどうですか?
0023私はCL派NGNG
CommonLispは実用性とか一般性とかで、ちょっと肥満体気味だね。仕事用かな。
Schemeはオタ仕様(失礼)な部分が残っているので、面白さの面では優れているかと。
元々作った人(G.L. Steele)が同じだから、敵対関係とかライバル関係には無いと思う。
0024CLNGNG
Common Lisp でしかプログラム組んだことがなくて、
Schemeは耳学問ですが、Common Lispは確かに関数めちゃくちゃ
多いですね。でも、全部覚える必要はないですし、分からんときだけ
CLtL見ればいいですから別に気になりませんね。
002524NGNG
Common Lispの参考書、
培風館、情報処理シリーズ4
ウインストン、ホーン著(白井、安部、井田訳)、
LISP第2版、全2巻

0026名無しさん@お腹いっぱい。NGNG
(define lisp 'オタク言語')
0027名無しさん@お腹いっぱい。NGNG
>26
煽ろうと思って調べたの?
002826NGNG
知っていました。
煽りではなくてジョークです。
0029私はCL派NGNG
>26
' の使い方間違っているあたりがカワイイ (^-^)
003026NGNG
間違ってる?
0031私はCL派NGNG
'hoge は (quote hoge) の省略記法で、閉じるほうの ' はいらないんだよ (^-^)b
003226NGNG

LISPは人工知能のプログラムを作るのに使われるそうだが
一度もソースを見たことがない。
ネット上に公開されてないの?
0033私はCL派NGNG
もうブーム去っちゃったしね…
純粋に LISP だけで記述されたモノはほとんど無いんじゃないかな?
KEE、ART、KC が3大人工知能言語だったんだけど、すべて LISP ベースだったと思います。
0034LISP好き学生NGNG
>4
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=953825415
の360に対してなら425で一応つっこんでます。
0035LISP好き学生NGNG
>32
人工知能用じゃないけど、統計で
LISP-STAT
っていう有名(言いすぎか?)なフリーウェアがあったと思います
検索エンジンなどで調べてみては?
0036名無しさん@お腹いっぱい。NGNG


第五世代コンピュータ計画はその後、どうなったんですか?

0037>26NGNG
いくらでもころがってる。
少しは調べろよ、ぼけ。
0038名無しさん@お腹いっぱい。NGNG
>36
予定通りの結果を出して、予定通りに終了しました。
0039名無しさん@お腹いっぱい。NGNG
>38
予定なんてあったのか?
0040名無しさん@お腹いっぱい。NGNG
ああいうのは、だいがい予定調和でおわるんだよね。
0041名無しさん@お腹いっぱい。NGNG

マジレス希望
0042名無しさん@お腹いっぱい。NGNG
はい
http://www.icot.or.jp/ARCHIVE/HomePage-J.html
0043LISP好き学生NGNG
よく「LISPは人工知能用言語」って言われますよね。
確かに人工知能の分野で主に使われているけど、その為だけの言語ではなく
生産性、汎用性、移植性にすぐれた高級言語です。
コンパイラもあるし、ガベッジコレクションもやってくれる。
多倍長の数値計算も楽々で、分数型もサポートしてるので計算にも
まあ使いやすいと思います。

でも一つ謎なのは、よくLISPが関数型言語と分類付けされてますが、
これってバッカスの発表した関数型プログラミングの事でしょうか?

それとも単に関数を定義していってプログラムを書いていくから関数
型言語と言っているのでしょうか?だとすると、Cも関数型言語なのに
なぜかそうは言われないのが不思議です。


0044名無しさん@お腹いっぱい。NGNG
Cは制御構造がステートメントだから後者の関数型言語でもないです。
0045LISP好き学生NGNG
>44
LISPも制御構造は関数じゃなくて、
スペシャルフォームまたはそのマクロです。
0046名無しさん@お腹いっぱい。NGNG
知ったかぶりばかりしてないで、もうちょっと勉強しましょう>43
0047名無しさん@お腹いっぱい。NGNG
>44
43は
「それとも単に関数を定義していってプログラムを書いていくから関数
型言語と言っているのでしょうか?だとすると、Cも関数型言語なのに
なぜかそうは言われないのが不思議です。」
といってるの。
日本語読める?
004844>45NGNG
なるほど、どうもです。
004944>47NGNG
「関数を定義していってプログラムを書く関数型言語」っていうのに
「Cが」あてはまらない事を書いたんだけど。
あんたこそ、日本語、読める?

005047ではないけどNGNG
>49
44は「だとすると」とわざわざ断ってるから、
そういうことは指摘されなくても承知してるように読めるよ。
005144NGNG
ああ、おれがわるかったよ、ごめんよ。
0052名無しさん@お腹いっぱい。NGNG
LISP が関数型言語で、C は似非関型言語であって、
その関係は、弥が上にも
Java がオブジェクト指向言語で、C++が似非オブジェクト指向言語であることを
連想させる。
005344NGNG
だからもうかんべんしてください。
0054名無しさん@お腹いっぱい。NGNG
しょせんEmacsのマクロ
0055名無しさん@お腹いっぱい。NGNG
真のLisperはZmacsを使う
0056名無しさん@お腹いっぱい。NGNG
eLisp以外のLispは糞
0057名無しさん@お腹いっぱい。NGNG
kekeke>56
0058LISP好き学生NGNG
いろいろな御意見ありがとうございます。
さらにどっかの本で

prologとLISPは人工知能用に使われている論理型言語で…

とのくだりがありました。prologは確かにそんな感じがすると思うん
ですが、LISPはどう考えても「論理型言語」だとは思えません。

この前にCやpascalをまとめて「何とか(忘れましたすみません)型言語」
として、ひとまとめにしている箇所もあり、LISPがCよりpascalに近い
構造の言語である様に記述されています。

LISPはprologよりCに近いと思いますが同でしょうか?
0059LISP好き学生NGNG
58の書き込み訂正です

LISPがCよりpascalに近い構造の言語である様に記述されています。

LISPがCよりprologに近い構造の言語である様に記述されています。
0060元AIエンジニアNGNG
Lispだけで人工知能するわけじゃないです。
私の知っている例で言いますと、Lispペースで以下の様な構成を取ります。
1) 知識表現(フレーム表現)言語をLisp上に構築する
2) 前向き推論エンジン(OPS等)を1)のフレームベースで実装する
3) 後向き推論エンジン(Prolog等)を1)のフレームベースで実装する。
4) 2)と3)の融合(OPSの左辺式にPrologのQuery記述を許すとか)
5) cf値(確信度)やファジー値などの演算ユーティリティを組み込む

0061名無しさん@お腹いっぱい。NGNG
>58
手続き型とか手順型とかでしょうか?
処理の手順を順番に記述するような言語ってことだと思います。
反対に、条件を列挙するような言語を宣言型とか言った気がします。
(くわしい人のつっこみ求む)
0062LISP好き学生NGNG
>61
名前は忘れましたが、
cとpascalが同じ○○型言語
LISPとprologが論理型言語
と区分けしてるのはどう考えても変だな?と思ったので
他の人の意見を聞きたいだけで、○○の部分はべつにどうでも
いいです。
0063LISP好き学生NGNG
>61
多分、手続き型かそんな感じだった気がしますが…
レスつけていただいてありがとうございます。
Cは通常、何型言語と呼ばれてて、どうべばしっくりくるん
でしょうね。
0064LISP好き学生NGNG
>60
後向き推論エンジンをPrologで実装するんじゃなくて、
Prologインタプリタをフレームシステム上に構築するんですか?
この辺り興味しんしんです。
0065名無しさん@お腹いっぱい。NGNG
興味の無い話はどうでもいいからやめろってことか。
0066LISP好き学生NGNG
>65
いや、62の発言は確かにそうとらえられてもしかたない発言だと
送信ボタンを押した瞬間に気づきましてすぐあとにフォローの
つもりで63を書いたのですが、65さんの御意見は誤解です。
58での僕の質問の意図だけはっきりとお伝えするつもりで書いた
のですが、書き方がまずかったと反省しております。すみません。
一般的にどの言語がどのクラスに属するのかは興味がありますので
御意見があれば続けてほしいです。
006760NGNG
>64
Prolog も OPS も Lisp で構築したものです。
速度的にはかなり不利ですが、当時は速度は気にしていませんでしたね(失笑)
Prolog や OPS の処理要素(Prologだとaxionでしたっけ?OPSならWorkingMemory)が
そのままフレームに対応しているのが特徴でした。

現在の状態(事実)をフレーム(オブジェクト)で記述して
例えばその状態から疑われる故障原因を前向き推論で導出する…
候補として挙げられた故障原因を、後ろ向き推論で検証して行く…
そんなことの繰り返しで推論を進めて行く機構でした。
(故障診断システムの例)
0068名無しさん@お腹いっぱい。NGNG
AIといえばドラゴン食えスト4か5くらいからAI機能がついたな。
その他のAIってしらないな。
アイボもあったか・・・
0069LISP好き学生NGNG
>67
フレームで事実を表現するのはやはり、スロット−スロット
値の対ですよね?推論機構は付加手続きとしてスロットに埋め
込むべきなのでしょうか?それともスロットにルールを埋め込
んでおいて、推論機構は外部に構築したほうがいいんでしょうか?
この辺りあんまりいい本見つからなくてどれがいいのか、悪い
いのかよく分かりません。Minskyの論文も実装法は全然書いて
ないし・・・(泣)
やはり手続き的知識はフレームよりルールで表現したほうが
素直だと僕は思うんですが。実装に興味がありますねぇ。
0070>69NGNG
ルール自体はリスト形式での記述でしたね。
そのリストをスロットの値にすることも出来ましたし
メタスロットにルールを持たせて、デーモン的に起動することも可能でした。
0071学生時代AIでバイトNGNG
>デーモン的に起動
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を書く手助け程度にはなってます)
0072LISP好き学生NGNG
なるほど、参考になりました。Prologもなんか面白そう
ですね。OPSっていうのは知らないのですが、話を聞いて
るとつまりプロダクションシステムの処理系ですか。
0073LISP好き学生 NGNG
ちょっとCommon Lispでプログラムを組んでるのですが、難問にぶつかりまして
どなたか解るかたおられるでしょうか?

letフォームの中でeval等を用いてS式を評価する際、
let文で束縛されているローカル変数をS式中で参照する方法は
あるのでしょうか?例えば、

>(let ((result 1))
 (eval '(+ 1 result)))
2
としたいのですが。
(上は実際にはresultはグローバルのresultを参照してしまうのです(泣))
0074LISP好き学生 NGNG
(defvar result)とかを前もって宣言しておく、とかしか
ないんでしょうか?S式中で参照するシンボルを事前に知って
おかないと行けないというのが嫌なので…
0075名無しさん@お腹いっぱい。 NGNG
The form is evaluated in the current dynamic environment and a null lexical environment. (CLtL2)
つーことだから、無理やね (^^;)
global-let 使えると楽そうだけど… (ZetaLisp仕様)
0076名無しさん@お腹いっぱい。 NGNG
Scheme なら (eval sexp env) をサポートしてる実装は結構あるけどね。
007776 NGNG
いま Abelson and Sussman の "Structure and Interpretation of Computer Programs" (原著)を
苦労しながら読んでいますが、すでによく知っていると
思っていたことでもいざ読んでみると勉強になりますね。
演習問題を考えていると全然進まないのだった。
0078Lisp好き学生 NGNG
お返事ありがとうございます。やはり無理ですか...。
評価時に環境を得る方法はCommonLispはサポートしてないんですね。
ところでdefmacroの&environmentってどう使うんでしょう?
0079名無しさん@お腹いっぱい。 NGNG
Windows で Common Lisp やってる人,
処理系は何使ってます?
やっぱ,KCL ?
あれは,DOS 版のインタプリタの
使い勝手が悪いんですけど…
キーバインドが自由に決められないとか.
なんか上手い方法あります?
0080名無しさん@お腹いっぱい。 NGNG
>78
コンパイルしたらアクセスできなくなるからな。
どうしてもそういう変なことがしたければ、
スペシャル宣言する手もあるが。

&environmentはマクロの中でマクロ展開する場合などに使う。
0081LISP好き学生 NGNG
>80
お返事ありがとうございます。

>コンパイルしたらアクセスできなくなるからな。
起動中の他の関数のローカル変数を参照するような
仕様のコンパイラは作成し難いという意味でしょうか?

あと、たとえば
(defmacro foo (&environment x) ...)
と定義されたマクロ foo にはどんな引数を与えるんでしょう?
勝手にxにシステム側が展開される場所の変数束縛リストを
バインドするのでしょうか?するとそれに対するアクセスは
assocを用いて行うのですかね。
0082名無しさん@お腹いっぱい。 NGNG
>起動中の他の関数のローカル変数を参照するような
>仕様のコンパイラは作成し難いという意味でしょうか?

つーかね、言語仕様でそう決まっているから、
アクセスできるようにする必要がないってこと。
なぜ、そういう言語仕様なのかというと、
そのほうが効率がいいからだな。
具体的には、外部からアクセスする必要がなければ、
その変数はレジスタに乗せることができるわけだ。

動的スコープを持つようにコンパイルするのは別に難しいことではない。
現に、すべてのCommon Lisp処理系は、specialと宣言された変数束縛を
動的スコープを持つようにコンパイルすることができる。

>(defmacro foo (&environment x) ...)
>と定義されたマクロ foo にはどんな引数を与えるんでしょう?
>勝手にxにシステム側が展開される場所の変数束縛リストを
>バインドするのでしょうか?

システムが勝手に環境オブジェクトをバインドする。
バインドされるのは変数束縛リストではない。

>するとそれに対するアクセスはassocを用いて行うのですかね。

環境オブジェクトの構造は処理系依存であるため、
assocでアクセスできるかもしれないし、
まったくアクセスできないかもしれない。

&environmentは、マクロの中でmacroexpandを呼んだ際に、
macroletで定義されたマクロを展開できるように
macroexpandの第二引数に与えるためのものであって、
おそらくキミの期待するものではないだろう。
0083LISP好き学生 NGNG
>82
ふむふむ。なるほど、わかりました。動的スコープを持つように
コンパイルする事は可能だと思ってたので不思議に思ったので
すが、具体的なご説明有り難うございます。
すると、スペシャル変数をあまり多用すると、ローカル変数で処理
した場合処理と比べて実行速度が遅くなる可能性が高いみたい
ですね。勉強になりました。
あと、&environmentで無理矢理なんとかできないのかと思いま
したが(やっぱり)無理みたいですね。
0084LISP好き学生 NGNG
問題が(かなり強引な方法ですが…)解決しました。

(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
----------------------------------------
では。
0085名無しさん@お腹いっぱい。 NGNG
>84
それをコンパイルしたら、期待する動きにはならないと思いますが、
こだわりません。
0086LISP好き学生 NGNG
>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
----------------------------------------
0087名無しさん@お腹いっぱい。 NGNG
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
----------------------------------------
0088LISP好き学生 NGNG
まあ、マクロを2回展開(2回目に展開されるマクロは1度目のマクロ
展開後に動的に定義される)するだけなのですので、仕様上は大丈
夫かと。(かなり兇悪ですな…(^^;)
0089名無しさん@お腹いっぱい。 NGNG
そのあとで、
(foo '(print (+ x 1)))
を評価すると、
11
5
5
が得られると思いますが、
それでいいなら何も言うことはありません。
0090 LISP好き学生 NGNG
>89
え?本当ですか。
0091LISP好き学生 NGNG
なるほど、確かにコンパイル後はうまくいきませんね。
あがいても無駄だった様です。
0092名無しさん@お腹いっぱい。 NGNG
湯浅太一、萩谷昌巳のCommon Lisp入門(岩波書店)
は分かり易い。
■ このスレッドは過去ログ倉庫に格納されています