1read 100read
2011年11月2期プログラム39: 【入門】Common Lisp その8【質問よろず】 (406) TOP カテ一覧 スレ一覧 2ch元 削除依頼

【入門】Common Lisp その8【質問よろず】


1 :11/07/06 〜 最終レス :11/11/24
lispを触ってみたい入門者のQ&A
初心者のQ&A
本スレでは恥ずかしくて聞けない人のQ&A
本スレは高度すぎて割り込めない人のQ&A
linuxでなくてwindowsでやりたいんですが・・・Q&A
lispを使用してC#やJAVAの代替にするための方法(おまけ)
ま、ゆっくりたりましょう。
「いいものの本質は、いかなる時代においても変わらない」byパワーズ
(list
(url http://pc8.2ch.net/test/read.cgi/tech/1101386936/l50 :part 1)
(url http://pc11.2ch.net/test/read.so/tech/1140012484/l50 :part 2)
(url http://pc11.2ch.net/test/read.so/tech/1181479267/l50 :part 3)
(url http://pc11.2ch.net/test/read.cgi/tech/1201402366/l50 :part 4)
(url http://pc11.2ch.net/test/read.cgi/tech/1215834213/l50 :part 5)
(url http://pc12.2ch.net/test/read.cgi/tech/1234884136/l50 :part 6)
(url http://hibari.2ch.net/test/read.cgi/tech/1270370267/l50 :part 7)
□テンプレート置き場□
ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)

2 :
((お勧めの Common Lisp 処理系)
(SBCL: http://www.sbcl.org/
:プラットフォーム Linux, Mac OS, Solaris, *BSD, Windows
:開発 活発
:日本語 UCS-2, UCS-4, UTF-8, UTF-16, UTF-32, Shift_JIS, EUC-JP
:特徴 一番お勧めのネイティブコードコンパイラ。)
(CLISP: http://clisp.org/
:プラットフォーム Linux, Mac OS, UNIX, *BSD, Windows, etc.
:開発 そこそこ活発
:日本語 UCS-2, UCS-4, UTF-8, UTF-16, ISO-2022-JP, Shift_JIS, CP932, EUC-JP
:特徴 バイトコードコンパイラ。遅いがフットプリントが小さい。)
(CMUCL: http://www.cons.org/cmucl/
:プラットフォーム Linux, Mac OS, UNIX, *BSD
:開発 そこそこ活発
:日本語 UTF-8, UTF-16, UTF-32
:特徴 高速ネイティブコードコンパイラ。SBCL の元になった。)
(Clozure CL: http://trac.clozure.com/ccl
:プラットフォーム Mac OS, Linux, FreeBSD, Solaris, Windows
:開発 そこそこ活発
:日本語 UCS-2, UTF-8, UTF-16, UTF-32, CP932、EUC-JP
:特徴 元々商用のネイティブコードコンパイラ。))

3 :
((商用の処理系)
(Allegro CL: http://jp.franz.com/index.html
:プラットフォーム Linux, Mac OS, FreeBSD, Solaris, AIX, Windows
:開発 最大手
:日本語 UTF-8, UTF-16, ISO-2022-JP, Shift_JIS, CP932, EUC-JP
:特徴 お高いがもっとも頼れる。申し込みが必要だがFree Express Editionあり。)
(LispWorks: http://www.lispworks.com/products/lispworks.html
:プラットフォーム Linux, Mac OS, FreeBSD, Solaris, HP-UX, Windows
:開発 半年にいっぺんくらいアップデート
:日本語 UCS-2, UTF-8, ISO-2022-JP, Shift_JIS, EUC-JP
:特徴 IDEベース。フリー版はconsセルの上限が来るとダイアログがでる。
SDLとかで遊ぶとすぐに引っかかる。)
(Corman CL: http://www.cormanlisp.com/index.html
:プラットフォーム Windows
:特徴 Windows専門の処理系。Allegro CLやLispWorksに比べると安価。))
((その他)
(ABCL: http://armedbear-j.sourceforge.net/
:特徴 JavaVM 上で動く。JavaVM のバイトコードを生成。)
(GCL: http://www.gnu.org/software/gcl/
:特徴 日本発 Kyoto Common Lisp の直系。)
(ECL: http://ecls.sourceforge.net/
:特徴 Lisp->C コンパイラ。組み込み可能。こちらもKCLの系譜。))

4 :
■ANSI Commn Lisp 仕様関係
HyperSpec (CLHS)
http://www.lispworks.com/documentation/HyperSpec/Front/
Common Lisp the Language, 2nd Edition (CLtL2)
http://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html
lispdoc
http://lispdoc.com/
Common Lisp Quick Reference
http://clqr.berlios.de/index.php
■日本語のチュートリアル
xyzzy Lisp Programming
ttp://www.geocities.jp/m_hiroi/xyzzy_lisp.html
ファイヤープロジェクト: Common Lisp
ttp://www.fireproject.jp/feature/common-lisp/index.html
LISP and PROLOG
ttp://home.soka.ac.jp/~unemi/LispProlog/
Lisp 一夜漬け
ttp://www.haun.org/kent/lisp1/
Lisp入門
ttp://wisdom.sakura.ne.jp/programming/lisp/index.html

5 :
■進んだ話題が欲しい人に
(和文)
http://ja.wikipedia.org/wiki/Common_Lisp
http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/
ttp://lispuser.net
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/index.html
(英文)
http://wiki.alu.org:80/
http://groups.google.co.jp/group/comp.lang.lisp
http://www.cliki.net/index
http://www.common-lisp.net
http://cl-cookbook.sourceforge.net/
http://planet.lisp.org/
http://www.gigamonkeys.com/book/
http://letoverlambda.com/
http://landoflisp.com/
http://www.psg.com/~dlamkins/sl/cover.html
http://www.cs.cmu.edu/~dst/LispBook/index.html

6 :
((おまけの処理系
(POPLOG: http://www.cs.bham.ac.uk/research/poplog/freepoplog.html
Lisp, Prolog, ML のコンパイラ)
(WCL: http://wcl.kontiki.com/
Shared Library として使える Lisp)
(Movitz: http://common-lisp.net/project/movitz/movitz.html
フルスクラッチの Lisp OS)
(CADR LispM: http://www.heeltoe.com/retro/mit/mit_cadr_lmss.html
MIT で使われていた LispM のソースを公開したもの)))
((その他のリンク
(Common Lisp JP: http://practical-scheme.net/chaton/common-lisp-jp/
チャット)
(lush: http://lush.sourceforge.net/
Lisp Universal Shell)
(「実践 Common Lisp」非公式サポートページ: ttp://pcl.lispuser.net/)
(Paul Graham の ANSI Common Lisp: http://www.pej-hed.jp/washo/288.html
Common Lisp の 参考書を探しているならこれ一択)))

7 :
テンプレ終わり。以上、漏れ、ミス等あったら指摘よろしく。
この長いテンプレを貼るのも二度目だと思うが、テンプレ代わりに
ttp://wiki.fdiary.net/lisp/
ttp://cl.cddddr.org/
書いとくだけじゃ駄目なん? Lisp Schemeスレみたいに。

8 :
>>1 乙です。
> ま、ゆっくりたりましょう。
ってなってるけど、「ゆっくり『や』りましょう」かな
テンプレ置き場から間違っているみたいだけど
テンプレは短くてもいいと思う

9 :
長いと貼るのが大変だから短くていいと思う。
できるだけスレ立てする人の負担を軽くすべし。

10 :
>1乙

11 :
>>1
スレ立て乙

12 :
しかしネタがないage

13 :
じゃあ、そろそろ出そうなCCL 1.7の話でも。
- Darwin/ppcのサポート終了の予定
- 付属のASDFが2.016になった
- ASDF-Installの同梱終了。Quicklispを代わりに推奨
- CCLの32-bitのバイナリが64-bit Windowsでも動くようになった
- ARMへの対応が大幅に前進
- *gensym-counter*がスレッドローカルからグローバルに
- ccl:*disassemble-verbose*追加

14 :
あと、trunkではアセンブラ周りとかに色々手が入っていて、
FASLのバージョンも上がってイメージやFASLの互換性が無くなった。
1.7に入るかは不明。

15 :
exe化したcommon lisp処理系のスクリプトを配布したいとき、
(動作環境はwindows 7/vistaです)
ライセンス的に緩いものはどれでしょうか?

16 :
* SBCL - パブリックドメイン(一部BSD)
* CMUCL - パブリックドメイン
* CLISP - GPL(附則あり)
* CCL - LLGPL
* ECL - LGPL
* ABCL - GPL(附則あり)
だから、実行形式作る分には好きなの使えば良いと思う。
むしろ気を付けるべきなのは、処理系よりも使うライブラリじゃないか?

17 :
#:keyword はキーワードだと思うのですが、
:keyword と書くのと何か違うのでしょうか?

18 :
>>17
キーワードではない
#: introduces an uninterned symbol whose name is symbol-name. Every time this
syntax is encountered, a distinct uninterned symbol is created. The
symbol-name must have the syntax of a symbol with no package prefix.

19 :
>>16
それは処理系のライセンスでしょ?
CLの場合、実行形式作ると処理系も含まれるよね?
まあ実行形式は別のライセンスになってるケースもあると思うが。

20 :
あるシンボルがtype-specifierかどうかは
どうすれば知ることが出来ますか?

21 :
>>19
それはひょっとしてギャグで言っているのか。
処理系のライセンスが、例えばパブリックドメインとかBSDとかMITなら、
実行形式にカーネル含めようが何しようが問題ないのは分かるよね?
あとは、LLGPLというのは、まさにその、Lisp特有のリンク事情について定義を明確にした、
LGPL+附則というライセンスだし、CLISPなどの「GPL+附則」の附則部分は、
実行形式を作ったりするときの例外事項の規定の訳だが。
とりあえず、自分で実際に読めば分かるよ。
LLGPL
ttp://opensource.franz.com/preamble.html
CLISPのライセンス
ttp://clisp.hg.sourceforge.net/hgweb/clisp/clisp/raw-file/tip/COPYRIGHT
ABCLが採用しているクラスパス例外
ttp://www.gnu.org/software/classpath/license.html

22 :
>>20
どういうことがやりたいの?
HyperSpecを流し読みしてみたけど、ドンピシャの関数とかはないみたい。
CCLなら、ccl:type-specifier-pという関数があったよ。

23 :
>>22
あるクラスのサブクラスのオブジェクトについて
(defun make-hoge (type &rest args) ...)
みたいな感じのコンストラクタを書きたいと思い
ここでtypeにtype-specとニックネームのような短い名前の
両方を入れられるようにしたいと思いました
typeはtype-specと1対1に対応しているわけではなく、
typeを参考にargsの内容から実際のtype-specを推測します。
ここで、typeがtype-specだった場合に
対応しているものか調べるために、subtypepを呼ぶと、
typeがtype-specで無い場合にエラーが起きてしまいます
誰もご存知ないようなら例外処理か何かで対応しようと思います
ありがとうございました

24 :
>>23
なるほど。力になれずに申し訳ないけど、ポータブルなやり方は分からない。
subtypepのエラーを捕捉するのが、泥臭いけど一番良いのかな。
>>22で挙げたccl:type-specifier-pでは、
(defun type-specifier-p (form &aux sym)
(cond ((symbolp form)
(or (type-predicate form)
(structure-class-p form)
(%deftype-expander form)
(find-class form nil)))
((consp form)
(setq sym (%car form))
(or (type-specifier-p sym)
(memq sym '(member satisfies mod))
(and (memq sym '(and or not))
(dolist (spec (%cdr form) t)
(unless (type-specifier-p spec) (return nil))))))
(t (typep form 'class))))
こんな風に判断してた。

25 :
Lispというと、なんだかリストばかりを使うイメージがあります。
実際には配列も多く使用するのですか。

26 :
基本はリストだけど配列のほうが適している場面では使うかと
「サイズ不変」かつ「ランダムアクセス多発」なんてときはそりゃ配列のが良いさ
C言語とかだと組み込みとかの極小メモリ環境意識するし
標準では配列しか使えないから配列がメインだろうけど
あれだって「要素数が常に変化する」「シーケンシャルアクセスがメイン」なんて場合はリストも使うっしょ

27 :
Clojure なんて見てると、プログラムをデータとして扱う(要はマクロ)とき
は確かにリストだけど、それ以外は何でもありって感じ。
Lisp の進化形なのか、変種にすぎないのか、良く分からんね。

28 :
リストはメモリの消費が激しいから、配列も多用するよー。
リストの場合、32ビットでもコンスセルあたり8バイトとか使うし。64ビットだともう凄い。
32ビットで1024要素くらいでも、リストが8 kb強、ベクタなら4 kb弱とダブルスコア。
ただ、遅延ストリームとか循環リストとか便利だし、木構造も表現できるし、
なんだかんだ言ってalistもplistもお手軽で便利だから、リスト使うよ。
>>26の言うように、シーケンシャルアクセスなら速いし。

29 :
Lisp で手軽に扱えるデータ構造というとリストだからね。
まぁ、そのように作られた言語だから当然なんだけど。
ざっくりとしたものをまず作るってときにリストの柔軟性っていうのはすごくマッチしてるんだよ。
プログラムを書く序盤っていうのはどんなデータ構造が適切なのか、
どこがボトルネックになるのかはわからない。
わかってるつもりがやってみたら違うってこともある。
だから序盤ではリストで作ってみて効率に効いてくるところを配列や構造体で置換えるというのはよくある。
機能や性能が不足だろうととにかく「まず動くもの」を作ってから改良していくのが Lisp 的なスタイルだし、
そのスタイルにリストはよく合うってこと。

30 :
>>24
ありがとうございます。
参考になります。

31 :
25です。
皆様ご回答ありがとうございました。
勉強になりました。

32 :
common lispの挙動を理解するために
common lisp の(簡単な)サブセットを vbs で作って見たいのですが、
どこから着手すればよいのかわかりません
できれば動作を確認しながら実装したいです
lispのサブセットを作成したことがある方の意見をお聞かせください

33 :
vbsで書かれたyaccでも探すとか?

34 :
>>32
Lisp1.5から始めたら?
Lisp自体初めてでも3日とかからないでしょ。

35 :
>>32
何で CL の挙動を理解するのに vbs でサブセットを実装するという話になるのか分からんけど、
Lisp の処理系を作った事がないなら、まずは↓この記事が参考になると思います。
http://www.oki-osk.jp/esc/go.html
CL の実装はその後で。
それより CL の処理系をインストールしてガシガシ弄った方が勉強になると思うけど...

36 :
好きなやり方でやればいい。

37 :
サブセットでも、Common Lispの処理系を作るとかマジ勇者だな。LispとかSchemeならともかく。
Visual Basicとかから来たのなら、規格に溢れる概念や用語を把握するだけでもきつい気がする。
応援してるから頑張ってくれ。もし手応えを得たら、日本発の処理系再びって展開を期待。

38 :
http://blog.bugyo.tk/lyrical/archives/126
ニコニコ動画のスクリプトでLispインタプリタ作ったそうだ

39 :
いつの話題だよ

40 :
書いてあるよ?

41 :
確かに「いつの話題だよ」って文を額面通りに読めばいつの話題なのか訊ねてることになるが……

42 :
人工知能なんだろう

43 :
ナンセンスギャグの王道的手法だな

44 :
>>41
修辞疑問だな。

45 :
このスレッドは天才pンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

46 :
このスレッドはCommon Lispによる人工知能「AIちゃん」が
言語訓練のために立てたものです。
AIと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

47 :
そこはElizaちゃんでだなぁ

48 :
Common Lispって実際に使われてるの?

49 :
その質問定期的に出るNE!
しかも過去ログを読もうともしないし、グーグル先生にお伺いを立てることもないんだ。

50 :
stumpwmで動作はぎこちないが現在のグループに表示してあるウィンドウを
すべてfnextにずらすもの作ったんだけど需要ありますか?

51 :
>>48

>>46

52 :
>>50
stumpwm 改造の参考に、見てみたいです。

53 :
>>52
参考にならないほどのやっつけですが
http://www.dotup.org/uploda/www.dotup.org1828277.gz.html
自分用としてはいまのところ問題ないです。

54 :
>>53
stumpwmってしらなかった、wmiiからこっちにひっこそうかしら

55 :
Lispを今日始めたものなのですが、
(defun foo (lst) (car lst))
(setq var (list 2 4 6 8 1 3 5 7 9 10) )
(foo var)
でfooという関数はないと言われるのですが、何故でしょうか?

56 :
>>55
Mac OS X 上の CCL だと実行出来ましたよ

57 :
(setq var (list 2 4 6 8 1 3 5 7 9 10) ) ってなんか意味あんの?それを挟まなければエラーが出ないとか?

58 :
う、見間違えた。すまん

59 :
http://ideone.com/TeUAw


60 :
おお…本当ですね
xyzzyというエディタ付属のLispが手軽と聞いたのでそちらでやっていたのですが、そちらだと怒られるようで・・・
ありがとうございます

61 :
便乗して...
http://ideone.com/fu2He
これが動かないのは何故でしょう?

62 :
名前入れ忘れた
エラー文を調べたら局所変数にアクセスが云々と出てきたのですが、
外からアクセスはしてないように見えるのです

63 :
>>61
CL はlisp-2だから
http://ideone.com/lLwg2
あと、>>55 はxyzzyでも動くよ。
評価し忘れとかじゃない?

64 :
>>55
>>63に補足すると、*scratch*で
(defun foo (lst) (car lst))
を入力したらC-j(ctrlを押下中にj)
(setq var (list 2 4 6 8 1 3 5 7 9 10) )
を入力したらC-j(ctrlを押下中にj)
(foo var)
を入力したらC-j(ctrlを押下中にj)
このようにして一行ずつC-jを押すこと

65 :
>>61
funcall の後ろに#’つけたら動いたよ

66 :
いや、なんつーか、>>63>>65
(defun qsort (lst)
...
(append (qsort ...) ...) ...)
って感じに呼べることをまず教えてやれよ……。

67 :
こんな感じ。
http://ideone.com/fPEnC

68 :
ECLだとquicklispからdrakma使えませんでした。
解決エロい人たすけて

69 :
解決エロい人 >> 解決できるエロい人 に直してください

70 :
>>68
エラーメッセージは?

71 :
Your Lisp does not support weak key hash-tables.
[Condition of type SIMPLE-ERROR] 
ECL 10.3.1 をapt-get install で入れて使っています。 

72 :
まんま書いてるじゃないですかー!
Drakmaが利用してるCL+SSLってライブラリがあって、
さらにそれが利用してるtrivial-garbageというライブラリが出してるエラー。
ECLがウィークハッシュテーブルに対応してないから出てる。
あるいは、ECLが実はウィークハッシュテーブル使えるってんなら、
簡単に使えるようになるから、バグレポートでもすればすぐ修正してくれると思う。
報告するのはDrakma相手じゃなくて、trivial-garbageの方ね。

73 :
ttp://osdir.com/ml/lisp.ecl.general/2008-04/msg00171.html
読むと、ウィークハッシュテーブルに対応する予定はなさそうなんで、
ECL側の修正は割と無理っぽいんじゃないかと思う。
考えられる対応策:
- CL+SSLに報告してECLだけ特別扱いしてもらう
- curlのプロセスを実行して出力を読む
- libcurlをFFI経由で使う
- 別の処理系を使う
- 別の言語を使う

74 :
>>72,73
今後はdrakmaを使う時には別の処理系を使うようにします
いろいろありがとうございました

75 :
解決エロい人がいるスレですね。

76 :
かいけつゾロリとか快傑ズバットの亜種か。

77 :
cl-annotで@export はしっかりできてるんですが@docなど他の使い方が分からない
cl-annotが使えるパッケージ内で(annot:enable-annot-syntax)を書くだけじゃもしや駄目?
Undefined function SCRIPT-TES::DOC called with arguments ("shellscript ls ==") .
[Condition of type CCL::UNDEFINED-FUNCTION-CALL]

78 :
解決しました。
〜.asd のファイルには書かなくていいけど〜.lispの方に付け加えるだけで良かったみたいです。

79 :
cl-annotとかは、
ttps://github.com/arielnetworks
にあるコードでいっぱい使ってるので、見ると参考になると思う。

80 :
>>53
自分のやり方が違うかもしれないが、テキストファイルにならない。

81 :
>>80
dump-group-to-fileで作られるファイルのことですか?

82 :
http://ll.la/LQ4F
中のファイルすべてHOMEにつっこんで
sbclにquicklispインストール、cl-ppcreとtrivial-shellも一度quickloadで再起動でいけるはず。

83 :
abclでmaximaが動くのはいつになるんだ

84 :
連想リストからある値の取得がうまくいかないので質問です。
以下のような状況です。
(setq list_a (list "a0" "a1" "a2"))
(setq list_b (list "b0" "b1" "b2"))
(setq list_c (list
'('a . list_a)
'('b . list_a)
))
ここまで。
で、list_cに対して
(cdr (car list_c))
を評価すると
list_a
が取れるのですが
(car (cdr (car list_c)))
にして、list_aの"a0"
を取得したいのですが評価するとbacktraceになってしまいうまくいきません。
これはどうすればいいんでしょうか?

85 :
>>84
なぜ二重にクォートしたし。
(setq list_c (list `(a . ,list_a) `(b . ,list_a)))
;; あるいは
(setq list_c (list `(a ,@list_a) `(b ,@list_a)))
(setq list_c (list (cons 'a list_a) (cons 'b list_a)))
(car (cdr (car list_c)))
;; なぜ連想リストのアクセスにassocを使わないのか
(cadr (assoc 'a list_c))
;=> "a0"
あと、Lisp界ではx_y_zじゃなくてx-y-zみたいに区切るのが普通。

86 :
ああ、一番普通なの忘れてたわ。
(setq list_c `((a ,@list_a) (b ,@list_a)))

87 :
>>85
ありがとう、理解できました。

88 :
labelsでエラーがでるのですが理由がわからいので教えてください。
scratchで以下の式を評価すると正常に動くのですが
(defun foo ()
(labels (
(bar ()
(print "foo test")
)
)
(bar)
)
)
(foo)
で "foo test"が表示される
これをこのまま
.emacsファイルに記述するとbacktraceになってしまいます。
↓メッセージ
Debugger entered--Lisp error: (void-function labels)
(labels ((bar nil ...)) (bar))
foo()
これはなぜでしょうか。またどのように解決したらよいでしょうか?

89 :
>>88
そのプログラムの前に (requre 'cl) を付けると解決出来るんじゃないかな

90 :
もちろん >>89 は (require 'cl) の typo です。。。
Emacs Lisp と Common Lisp は別物なので、もし emacs lisp を勉強したいなら、
Emacs Lisp 3
http://hibari.2ch.net/test/read.cgi/tech/1191875993/
に行くと良いと思います。
Common Lisp を勉強したいなら、Common Lisp 用の環境を整えると色々と
捗ると思います。

91 :
>>90
ありがとう解決しました。
今後はEmacs Lispのほうで聞きますね。

92 :
時代はlispよりもhaskell
教養としてのプログラミングならこっちを勧めたい

93 :
自分の知る限り、Haskell は少なくとも 5 年前には注目を受けていたし、
Haskell に無い Lisp の特徴として S 式とマクロは知っておいた方が良いと思われ

94 :
lispが理解できないとHaskellは無理だと思う

95 :
Haskellが無理ならLispも無理だろう

96 :
>>92-95
忍者より酷い

97 :
どっちか勉強するのにもう一つの知識が必要みたいな議論がおかしい
まっさらな状態で今はじめるならHaskellの方が得るものは大きい

98 :
そんな単純な比較が可能とは思えないが…

99 :
カレーとおにぎりを比べるようなものだな

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼