common lispのお勧め参考書を教えてください
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNG0002名無しさん@お腹いっぱい。
NGNGlispスレとかあったから、それを一回見てみたら
0003名無しさん@お腹いっぱい。
NGNGこのスレッドは終了します
0004名無しさん@お腹いっぱい。
NGNGCommon Lisp@` the Language 2nd Ed.
をお手頃として挙げたが、誰もつっこんでくれなかったよん。
誰が読むねんこの本、、、
0005名無しさん@お腹いっぱい。
NGNGそれに制御構造とか参考になるじゃん。
英語の話?だったら、俺にはあの厚さはつらいが。
00064
NGNG初心者の質問だったしー
0007名無しさん@お腹いっぱい。
NGNGこれだけで理解できればイイですが
入門用として向いているかどうか…
でも、この本をマスターできたら99%!
0008名無しさん@お腹いっぱい(お酒で)
NGNGフリーの処理系をゲットして、CLtL2 や Scheme(Freeな処理系はScheme系が多い)の本
片手に、あれこれ使いまくるのが得策かと。
00098(補足)
NGNGどんどん質問して来て!
できうる範囲で答えます。
0010私もLISPer
NGNGCommon Lisp実装したんですか!?
0011勉強中
NGNG人工知能とかに興味ありの学生です。
0012>8
NGNG恐いこと言いなはんな(笑
0013>11
NGNGParadigms of Artificial Intelligence Programming: Case Studies in Common Lisp
でも始めなはれ。
0014steal@jnCliC-211-86.ppp.justnet.ne.jp
NGNGcommon lispのお勧め参考書を教えてください 13
0015>10
NGNG数のシステムを除いて、言語の基本システム
(制御構造など)は全部やった。
関数は最低限しかやってない。
schemeR5RSは継続も含めてほぼフルに実装したよ。
関数もほぼ全部書いた(common lispに比べれば
圧倒的に少ないからね)。
こっちも整数だけだけど。
C++で書いてるし、flex使ってるから、虚数とか実数とかも
やろうと思えばすぐできると思うんだけど、
自分が使わないのでやる気にならなかった。
あとは、末尾呼び出しの最適化は適当なとこでやめちゃったな。
こうしてみると結構ヘタレだな、おれ。
威張るためにも、せめてschemeの実数くらいやっとくか。
でもいまそんなことに興味ないんだよな〜。
0016名無しさん@お腹いっぱい。
NGNG「対話による Common Lisp入門」栗原正仁 森北出版株式会社
がとてもわかりやすいんだけど、もう無理かな。
0017名無しさん@お腹いっぱい。
NGNG何が違うんですか?
0018名無しさん@お腹いっぱい。
NGNG> Common Lisp@` the Language 2nd Ed
8000円か・・・(笑)
900ページ以上あるし内容も濃いから高くはないのだろう。
001918
NGNG0020名無しさん@お腹いっぱい。
NGNG0021>17
NGNGLispの基礎は、どの方言使っても勉強できます。
scheme を scheme たらしめている個性的な拡張(継続とか)が成されていますが
その辺は基礎を学び終わった後に。
0022名無しさん@お腹いっぱい。
NGNGそこらへんどうですか?
0023私はCL派
NGNGSchemeはオタ仕様(失礼)な部分が残っているので、面白さの面では優れているかと。
元々作った人(G.L. Steele)が同じだから、敵対関係とかライバル関係には無いと思う。
0024CL
NGNGSchemeは耳学問ですが、Common Lispは確かに関数めちゃくちゃ
多いですね。でも、全部覚える必要はないですし、分からんときだけ
CLtL見ればいいですから別に気になりませんね。
002524
NGNG培風館、情報処理シリーズ4
ウインストン、ホーン著(白井、安部、井田訳)、
LISP第2版、全2巻
0026名無しさん@お腹いっぱい。
NGNG0027名無しさん@お腹いっぱい。
NGNG煽ろうと思って調べたの?
002826
NGNG煽りではなくてジョークです。
0029私はCL派
NGNG' の使い方間違っているあたりがカワイイ (^-^)
003026
NGNG0031私はCL派
NGNG003226
NGNGLISPは人工知能のプログラムを作るのに使われるそうだが
一度もソースを見たことがない。
ネット上に公開されてないの?
0033私はCL派
NGNG純粋に LISP だけで記述されたモノはほとんど無いんじゃないかな?
KEE、ART、KC が3大人工知能言語だったんだけど、すべて LISP ベースだったと思います。
0034LISP好き学生
NGNGhttp://mentai.2ch.net/test/read.cgi?bbs=prog&key=953825415
の360に対してなら425で一応つっこんでます。
0035LISP好き学生
NGNG人工知能用じゃないけど、統計で
LISP-STAT
っていう有名(言いすぎか?)なフリーウェアがあったと思います
検索エンジンなどで調べてみては?
0036名無しさん@お腹いっぱい。
NGNG第五世代コンピュータ計画はその後、どうなったんですか?
0037>26
NGNG少しは調べろよ、ぼけ。
0038名無しさん@お腹いっぱい。
NGNG予定通りの結果を出して、予定通りに終了しました。
0039名無しさん@お腹いっぱい。
NGNG予定なんてあったのか?
0040名無しさん@お腹いっぱい。
NGNG0041名無しさん@お腹いっぱい。
NGNGマジレス希望
0042名無しさん@お腹いっぱい。
NGNGhttp://www.icot.or.jp/ARCHIVE/HomePage-J.html
0043LISP好き学生
NGNG確かに人工知能の分野で主に使われているけど、その為だけの言語ではなく
生産性、汎用性、移植性にすぐれた高級言語です。
コンパイラもあるし、ガベッジコレクションもやってくれる。
多倍長の数値計算も楽々で、分数型もサポートしてるので計算にも
まあ使いやすいと思います。
でも一つ謎なのは、よくLISPが関数型言語と分類付けされてますが、
これってバッカスの発表した関数型プログラミングの事でしょうか?
それとも単に関数を定義していってプログラムを書いていくから関数
型言語と言っているのでしょうか?だとすると、Cも関数型言語なのに
なぜかそうは言われないのが不思議です。
0044名無しさん@お腹いっぱい。
NGNG0045LISP好き学生
NGNGLISPも制御構造は関数じゃなくて、
スペシャルフォームまたはそのマクロです。
0046名無しさん@お腹いっぱい。
NGNG0047名無しさん@お腹いっぱい。
NGNG43は
「それとも単に関数を定義していってプログラムを書いていくから関数
型言語と言っているのでしょうか?だとすると、Cも関数型言語なのに
なぜかそうは言われないのが不思議です。」
といってるの。
日本語読める?
004844>45
NGNG004944>47
NGNG「Cが」あてはまらない事を書いたんだけど。
あんたこそ、日本語、読める?
005047ではないけど
NGNG44は「だとすると」とわざわざ断ってるから、
そういうことは指摘されなくても承知してるように読めるよ。
005144
NGNG0052名無しさん@お腹いっぱい。
NGNGその関係は、弥が上にも
Java がオブジェクト指向言語で、C++が似非オブジェクト指向言語であることを
連想させる。
005344
NGNG0054名無しさん@お腹いっぱい。
NGNG0055名無しさん@お腹いっぱい。
NGNG0056名無しさん@お腹いっぱい。
NGNG0057名無しさん@お腹いっぱい。
NGNG0058LISP好き学生
NGNGさらにどっかの本で
prologとLISPは人工知能用に使われている論理型言語で…
とのくだりがありました。prologは確かにそんな感じがすると思うん
ですが、LISPはどう考えても「論理型言語」だとは思えません。
この前にCやpascalをまとめて「何とか(忘れましたすみません)型言語」
として、ひとまとめにしている箇所もあり、LISPがCよりpascalに近い
構造の言語である様に記述されています。
LISPはprologよりCに近いと思いますが同でしょうか?
0059LISP好き学生
NGNGLISPがCよりpascalに近い構造の言語である様に記述されています。
LISPがCよりprologに近い構造の言語である様に記述されています。
0060元AIエンジニア
NGNG私の知っている例で言いますと、Lispペースで以下の様な構成を取ります。
1) 知識表現(フレーム表現)言語をLisp上に構築する
2) 前向き推論エンジン(OPS等)を1)のフレームベースで実装する
3) 後向き推論エンジン(Prolog等)を1)のフレームベースで実装する。
4) 2)と3)の融合(OPSの左辺式にPrologのQuery記述を許すとか)
5) cf値(確信度)やファジー値などの演算ユーティリティを組み込む
0061名無しさん@お腹いっぱい。
NGNG手続き型とか手順型とかでしょうか?
処理の手順を順番に記述するような言語ってことだと思います。
反対に、条件を列挙するような言語を宣言型とか言った気がします。
(くわしい人のつっこみ求む)
0062LISP好き学生
NGNG名前は忘れましたが、
cとpascalが同じ○○型言語
LISPとprologが論理型言語
と区分けしてるのはどう考えても変だな?と思ったので
他の人の意見を聞きたいだけで、○○の部分はべつにどうでも
いいです。
0063LISP好き学生
NGNG多分、手続き型かそんな感じだった気がしますが…
レスつけていただいてありがとうございます。
Cは通常、何型言語と呼ばれてて、どうべばしっくりくるん
でしょうね。
0064LISP好き学生
NGNG後向き推論エンジンをPrologで実装するんじゃなくて、
Prologインタプリタをフレームシステム上に構築するんですか?
この辺り興味しんしんです。
0065名無しさん@お腹いっぱい。
NGNG0066LISP好き学生
NGNGいや、62の発言は確かにそうとらえられてもしかたない発言だと
送信ボタンを押した瞬間に気づきましてすぐあとにフォローの
つもりで63を書いたのですが、65さんの御意見は誤解です。
58での僕の質問の意図だけはっきりとお伝えするつもりで書いた
のですが、書き方がまずかったと反省しております。すみません。
一般的にどの言語がどのクラスに属するのかは興味がありますので
御意見があれば続けてほしいです。
006760
NGNGProlog も OPS も Lisp で構築したものです。
速度的にはかなり不利ですが、当時は速度は気にしていませんでしたね(失笑)
Prolog や OPS の処理要素(Prologだとaxionでしたっけ?OPSならWorkingMemory)が
そのままフレームに対応しているのが特徴でした。
現在の状態(事実)をフレーム(オブジェクト)で記述して
例えばその状態から疑われる故障原因を前向き推論で導出する…
候補として挙げられた故障原因を、後ろ向き推論で検証して行く…
そんなことの繰り返しで推論を進めて行く機構でした。
(故障診断システムの例)
0068名無しさん@お腹いっぱい。
NGNGその他のAIってしらないな。
アイボもあったか・・・
0069LISP好き学生
NGNGフレームで事実を表現するのはやはり、スロット−スロット
値の対ですよね?推論機構は付加手続きとしてスロットに埋め
込むべきなのでしょうか?それともスロットにルールを埋め込
んでおいて、推論機構は外部に構築したほうがいいんでしょうか?
この辺りあんまりいい本見つからなくてどれがいいのか、悪い
いのかよく分かりません。Minskyの論文も実装法は全然書いて
ないし・・・(泣)
やはり手続き的知識はフレームよりルールで表現したほうが
素直だと僕は思うんですが。実装に興味がありますねぇ。
0070>69
NGNGそのリストをスロットの値にすることも出来ましたし
メタスロットにルールを持たせて、デーモン的に起動することも可能でした。
0071学生時代AIでバイト
NGNGif-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ですね。OPSっていうのは知らないのですが、話を聞いて
るとつまりプロダクションシステムの処理系ですか。
0073LISP好き学生
NGNGどなたか解るかたおられるでしょうか?
letフォームの中でeval等を用いてS式を評価する際、
let文で束縛されているローカル変数をS式中で参照する方法は
あるのでしょうか?例えば、
>(let ((result 1))
(eval '(+ 1 result)))
2
としたいのですが。
(上は実際にはresultはグローバルのresultを参照してしまうのです(泣))
0074LISP好き学生
NGNGないんでしょうか?S式中で参照するシンボルを事前に知って
おかないと行けないというのが嫌なので…
0075名無しさん@お腹いっぱい。
NGNGつーことだから、無理やね (^^;)
global-let 使えると楽そうだけど… (ZetaLisp仕様)
0076名無しさん@お腹いっぱい。
NGNG007776
NGNG苦労しながら読んでいますが、すでによく知っていると
思っていたことでもいざ読んでみると勉強になりますね。
演習問題を考えていると全然進まないのだった。
0078Lisp好き学生
NGNG評価時に環境を得る方法はCommonLispはサポートしてないんですね。
ところでdefmacroの&environmentってどう使うんでしょう?
0079名無しさん@お腹いっぱい。
NGNG処理系は何使ってます?
やっぱ,KCL ?
あれは,DOS 版のインタプリタの
使い勝手が悪いんですけど…
キーバインドが自由に決められないとか.
なんか上手い方法あります?
0080名無しさん@お腹いっぱい。
NGNGコンパイルしたらアクセスできなくなるからな。
どうしてもそういう変なことがしたければ、
スペシャル宣言する手もあるが。
&environmentはマクロの中でマクロ展開する場合などに使う。
0081LISP好き学生
NGNGお返事ありがとうございます。
>コンパイルしたらアクセスできなくなるからな。
起動中の他の関数のローカル変数を参照するような
仕様のコンパイラは作成し難いという意味でしょうか?
あと、たとえば
(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ふむふむ。なるほど、わかりました。動的スコープを持つように
コンパイルする事は可能だと思ってたので不思議に思ったので
すが、具体的なご説明有り難うございます。
すると、スペシャル変数をあまり多用すると、ローカル変数で処理
した場合処理と比べて実行速度が遅くなる可能性が高いみたい
ですね。勉強になりました。
あと、&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それをコンパイルしたら、期待する動きにはならないと思いますが、
こだわりません。
0086LISP好き学生
NGNGいえ、確かコンパイル後も動きますよ。
(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----------------------------------------
[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展開後に動的に定義される)するだけなのですので、仕様上は大丈
夫かと。(かなり兇悪ですな…(^^;)
0089名無しさん@お腹いっぱい。
NGNG(foo '(print (+ x 1)))
を評価すると、
11
5
5
が得られると思いますが、
それでいいなら何も言うことはありません。
0090 LISP好き学生
NGNGえ?本当ですか。
0091LISP好き学生
NGNGあがいても無駄だった様です。
0092名無しさん@お腹いっぱい。
NGNGは分かり易い。
■ このスレッドは過去ログ倉庫に格納されています