【入門】Common Lisp その8【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/07/06(水) 17:15:15.55初心者の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)
0153デフォルトの名無しさん
2011/09/22(木) 01:06:48.59そこは基本的っていうか、むしろ嵌りどころ。
#'は特殊形式functionに展開されるんだけど、functionが返す関数オブジェクトは、
必ずしも毎回同じ物とは限らない、っていう話だったはず。
ttp://www.apl.jhu.edu/~hall/Lisp-Notes/Dalton-Pitfalls-List.text
の"Function vs eq."に詳しい。
0154デフォルトの名無しさん
2011/09/22(木) 01:12:36.50(defmacro test2(x)`(eq ,x #'+))でなく?
0155デフォルトの名無しさん
2011/09/22(木) 01:22:58.45マクロの展開結果がNILになり、評価結果もNILになる。
そういう勘違いなら、Common Lispの評価モデル自体を理解してないことになるので、
HyperSpecとか書籍とかマクロの解説とかを読んだ方が良いと思う。
マクロに渡されるのは値じゃなくて式。
0156152
2011/09/22(木) 01:54:26.73TEST3
>(test3 #'+)
T
納得。夜遅くにスイマセンでした
0157デフォルトの名無しさん
2011/09/30(金) 14:34:56.920158デフォルトの名無しさん
2011/09/30(金) 14:56:15.850159デフォルトの名無しさん
2011/10/05(水) 22:10:00.39キーワードの値としてnilが渡された場合って区別できるんでしょうか?
例えば
(defun hoge (&key (foo)) foo)
として、
(hoge)
の場合と
(hoge :foo nil)
の場合を区別できるかどうか、という意味です。
0160デフォルトの名無しさん
2011/10/05(水) 22:26:42.09CL-USER> (defun hoge (&key (foo nil foo-supplied-p)) (values foo foo-supplied-p))
HOGE
CL-USER> (hoge)
NIL
NIL
CL-USER> (hoge :foo nil)
NIL
T
0161159
2011/10/05(水) 22:46:31.24ばっちりです。ありがとうございます。
0162デフォルトの名無しさん
2011/10/10(月) 09:36:53.02何を参照したらよいですか?
0163デフォルトの名無しさん
2011/10/10(月) 11:42:24.68パッケージは知らないけど、ASDFなら
http://common-lisp.net/project/asdf/asdf.html
とか
http://common-lisp.net/~mmommer/asdf-howto.shtml
とかじゃない?
ググッたりしてるなら、もう見ただろうけど
0164デフォルトの名無しさん
2011/10/10(月) 13:07:43.42ASDFではなく、quicklispを使うといいよ。
既知だったらすまん。
0165デフォルトの名無しさん
2011/10/10(月) 18:25:50.48CLのパッケージシステム関連全体のことを聞いてるんじゃねぇの
quicklispもasdf使ってるし
``asdf-install使うくらいならquicklispを使うといいよ''
てな話だとわかるんだが, 若干的外れなような...
0166デフォルトの名無しさん
2011/10/10(月) 21:04:40.05これまで、小さなプログラムしか作ったことがないもので、
個々のソースプログラムファイルをloadしているだけで
満足してたのです。使ってる処理系がsbclなので、多分何もしなくても
コンパイルもしてくれるようですし。(つづく)
0167デフォルトの名無しさん
2011/10/10(月) 21:07:41.81しかし、下記の理由で、だんだんそうもいってられなくなりました。
1. 自分で書くプログラムがかなり大きくなってきた。
(その結果 2.と3.)
2. 名前空間(?)をcommon-lisp-userとは、分離したい.
3. ソースプログラムファイルの依存関係(どれが、どの
ファイルで定義されている関数を使っているかなど)を
うまく表現する方法がないか知りたい。コンパイルや
ロードをスマートにやりたい。
(c言語でのmakeに相当するものがないかな??)
(つづく)
0168デフォルトの名無しさん
2011/10/10(月) 21:10:04.154. 他人が作ったプログラムをつかうのに、requireとか
asdfを使うこともでてきたのですが、(関連するwebサイト
の説明を鵜呑みにしているだけで)何が起こっているのか
よく分からない。何が起こっているのか知りたい。
(つづく)
0169デフォルトの名無しさん
2011/10/10(月) 21:12:19.544. 他人が作ったプログラムをつかうのに、requireとか
asdfを使うこともでてきたのですが、(関連するwebサイト
の説明を鵜呑みにしているだけで)何が起こっているのか
よく分からない。何が起こっているのか知りたい。
(つづく)
0170デフォルトの名無しさん
2011/10/10(月) 21:14:34.72ちなみに、require関数を使って他人が書いたプログラム(たとえば
clxとかMcCLIMなんか)をロードすると、
結構、複雑なことが起こっている気がするのですが、CLtL2のrequire
の説明をみても何だかよくわかりませんでした。
(多分、必要なモジュールを探してロードしているんだろうなと思う。
そういうことを自作プログラムでもやりたいのです。)
0171デフォルトの名無しさん
2011/10/10(月) 21:24:23.453. は、ASDF (C言語でいう make の Lisp 版。最近の標準) の仕事。
4. に関しては、CLHS で provide/require という仕組が定義がされているが、
こいつは実装依存でかつ依存関係を取り扱うポータブルな手段がないため、一
般的にはASDFが利用される。(でも、処理系依存のライブラリなんかでは使われてる)
前にでている Quciklisp てーのは、 ASDF の上にさらに rpm/yum みたいなパッ
ケージ管理機能を追加したもの。なので、ボトムアップが好きなら学習順序と
してはパッケージ -> ASDF -> Quicklisp がいいんじゃないかな。
0172デフォルトの名無しさん
2011/10/11(火) 23:51:42.80ネットにつながるマシンでライブラリ整えて、~/quicklispを全部コピーして持ってけばおkなのかな?
0173デフォルトの名無しさん
2011/10/12(水) 00:26:01.96そう。
持っていったやつを別な場所に置きたいなら、
http://www.quicklisp.org/beta/faq.html#local-project を参考に。
0174デフォルトの名無しさん
2011/10/12(水) 14:01:09.61覚えていくような入門サイト、書籍みたいなものはありませんか?
入門書籍を何冊か読んでみたんですが、式それぞれの使い方は飲み込めたのですが
それをプログラムでどう表現したら良いか分らないと言いますか。
出来ればLinux上のClispに対応したものがベターですが、他の環境でも構いません。
0175デフォルトの名無しさん
2011/10/12(水) 16:47:15.570176デフォルトの名無しさん
2011/10/12(水) 16:53:12.06http://landoflisp.com/
0177デフォルトの名無しさん
2011/10/12(水) 17:09:02.980178デフォルトの名無しさん
2011/10/12(水) 19:37:39.35開いた瞬間にMade by secret alien technologyだったw
0179デフォルトの名無しさん
2011/10/12(水) 22:58:13.41類書が全く思いつかないすごい世界だ
0180デフォルトの名無しさん
2011/10/12(水) 23:02:53.030181デフォルトの名無しさん
2011/10/12(水) 23:59:37.28LISPのトンデモ歴史に始まり、簡単なAIやWEBサーバー開発なども学べる。
英語は平易。
0182デフォルトの名無しさん
2011/10/13(木) 00:10:38.65http://youtu.be/HM1Zb3xmvMc
0183デフォルトの名無しさん
2011/10/13(木) 01:12:43.71kindle価格で29ドル
早速読んでみるわ
0184デフォルトの名無しさん
2011/10/13(木) 22:45:02.02日本語の萌系の学術書?も翻訳してるし、
You learn a haskell for great good! (最近話題のHaskell書)の
本も出版してる。You learn ~ も簡単な英語で書かれてるよ。
0185デフォルトの名無しさん
2011/10/14(金) 07:07:25.64Hacking第2版のパブリッシャーでもあるのか
0186デフォルトの名無しさん
2011/10/14(金) 07:39:00.94オーム社は「マンガでわかる銀河系」も出すべきだなw
0187デフォルトの名無しさん
2011/10/14(金) 13:31:36.12サンクス!
お礼が遅れてすまんかった。
0188デフォルトの名無しさん
2011/10/16(日) 01:26:54.320189デフォルトの名無しさん
2011/10/16(日) 02:04:44.48http://www.franz.com/products/prolog/
0190デフォルトの名無しさん
2011/10/16(日) 09:42:50.700191デフォルトの名無しさん
2011/10/18(火) 23:48:13.920192デフォルトの名無しさん
2011/10/19(水) 00:54:57.34よく使われてるライブラリで共通で使われてたりするのかな?
xUnit,xSpec,quickcheck,Test::Moreみたいな言語間で広まってるテストフレームワークも
http://www.cliki.net/test%20framework
http://google.co.jp/search?q=commonlisp+test
0193デフォルトの名無しさん
2011/10/19(水) 01:02:25.05最近公開されたものだし、標準ではないけどね。
0194デフォルトの名無しさん
2011/10/19(水) 07:32:48.73比較的多く使われてるのはFiveAMとStefilかなー。
機能的にも割と似たような感じ。ただ、Stefilはドキュメントがない。
特に拘りがないならどっちか使っとけば良いと思う。
Clackの中の人が作ってるCL-TEST-MOREなんかは、TAPが好きなら良いかも。
あと、複雑なテストが必要ない場合、自分で書いてる人も割といるように見える。
上で出てない追加の情報源とか。
http://cl.cddddr.org/index.cgi?%a5%e9%a5%a4%a5%d6%a5%e9%a5%ea
http://cl.cddddr.org/index.cgi?FiveAM
http://aperiodic.net/phil/archives/Geekery/notes-on-lisp-testing-frameworks.html
0195デフォルトの名無しさん
2011/10/19(水) 07:54:01.51ただ、中の人が日本人なので、日本語の解説もあるけど。
https://github.com/fukamachi/cl-test-more
http://e-arrows.sakura.ne.jp/2010/11/cl-test-more.html
http://tips.lisp-users.org/common-lisp/index.cgi?CL-TEST-MORE
clojure.testっぽいのはButterだと思う。使ったことないから使い勝手は分からない。
こっちは日本語のREADME付き。
https://github.com/yuushimizu/butter
http://d.hatena.ne.jp/yuushimizu/20110922/1316627415
0196デフォルトの名無しさん
2011/10/25(火) 06:28:23.810197デフォルトの名無しさん
2011/10/25(火) 06:43:27.220198デフォルトの名無しさん
2011/10/25(火) 21:23:05.33おれがコンパイラとか興味持ったのも、全部Lispのおかげなんだ。
Lispの父の魂よ安らかに眠れ。
0199デフォルトの名無しさん
2011/10/25(火) 21:48:23.670200デフォルトの名無しさん
2011/10/25(火) 22:44:12.27ジョン・マッカーシー
http://wbb.forum.impressrd.jp/feature/20071212/515
0201デフォルトの名無しさん
2011/10/27(木) 16:40:48.72時折聞くのですが、そうなんですか?
自分はオブジェクト指向を型と引数の型によって振る舞いを変える関数の組み合わせで理解しており、
関数プログラミングとオブジェクト指向プログラミングは直行するのではないかと思っているのですが。
0202デフォルトの名無しさん
2011/10/27(木) 17:29:29.77どうしてもオブジェクト指向の、「物」指向、副作用による状態の変化を利用したスタイルから、
普通にはそれを使えなくなる純粋関数型に、自分の思考を持ち込むか、という技の掛け方、
というか、そのへんは実際にやってみて慣れればなんということないんだけど、説明するのは
難しいので。
0203201
2011/10/27(木) 17:34:38.20一度しか代入しないスタイルへの切り替えの難しさから
そういう意見が出てくるって事ですね
ありがとうございます
0204デフォルトの名無しさん
2011/10/27(木) 17:43:50.90メッセージパッシング系は上手く混合してるでしょ。
0205デフォルトの名無しさん
2011/10/27(木) 19:00:26.69技術書の「Concepts, Techniques, and Models of Computer Programming」
(CTMCP:コンピュータプログラミングの概念・技法・モデル)で複数の
計算モデルが解説されているが、一般にオブジェクト指向と呼ばれている言語は、”状態”
を内部に持って、書き換え(副作用を起こし)ながら処理を進めるモデル。
関数型と呼ばれる言語の多くは、数学での集合・写像がベースになったモデル。
従って、処理の大部分を副作用ではなく、集合への写像(関数適用と思っていい)で出来る。
相性というより、計算モデルが全く違うので、混在は非効率。
なお、CTMCPには他のモデルも解説されている。
0206デフォルトの名無しさん
2011/10/27(木) 20:28:15.59のxはこのまま活用するのですか?
LISP触って日が浅いのでまだ分かりづらくて…
0207201
2011/10/27(木) 20:51:23.53ありがとうございます。
確かに狭義の定義では相容れませんね。
JavaやC++でラムダ計算は出来そうにもありませんし、
Haskellでは代入自体が不可能ですし。
0208デフォルトの名無しさん
2011/10/27(木) 20:54:20.61「xはこのまま活用する」とはどういう意味でですか?
0209デフォルトの名無しさん
2011/10/27(木) 21:16:05.58すみません、少し読み返してみたらsetqでxは0に定義されていました・・・orz
少し落ち着いてから勉強しなおします。
0210デフォルトの名無しさん
2011/10/27(木) 21:21:24.930211デフォルトの名無しさん
2011/10/27(木) 23:10:17.78と思ったけど直前に(setq x 0)があるから束縛されてた,問題なかった,という意味?
0212デフォルトの名無しさん
2011/10/27(木) 23:46:20.82不必要に複雑になりがちで。
0213デフォルトの名無しさん
2011/10/28(金) 00:49:20.17clojureの宣伝文句は、OOの目的を別なやり方で、だとか。
http://thinkrelevance.com/blog/2009/08/12/rifle-oriented-programming-with-clojure-2.html
http://www.geidai.ac.jp/~marui/clojure/rationale/index.html
http://www.geidai.ac.jp/~marui/clojure/state/index.html
clとclojureちょっとかじったのけど、scheme知らないのでRacket使ってみようかな。
0214デフォルトの名無しさん
2011/10/28(金) 06:22:21.58個人的にはHaskellの型と型クラスの扱いが
一番綺麗に整理されてていいと思う
0215デフォルトの名無しさん
2011/10/28(金) 10:53:54.69みたいなことをOCamlの人が書いてた気がする。
0216デフォルトの名無しさん
2011/10/28(金) 15:05:25.95データ型と振る舞いの分離、データ型の継承なし、など。
0217デフォルトの名無しさん
2011/10/29(土) 06:37:12.03(let ((x2 0) (x3 0))
(setq x2 (2jou x))
(setq x3 (* x2 x))
(* x2 x3)))
5JOU
が理解できません。どなたか簡単に説明をお願いいたします。
0218デフォルトの名無しさん
2011/10/29(土) 08:28:04.20酷い関数名だなw
2乗する関数2jouってのがどこかに定義されてて、
xを5乗するってのを 2乗掛け(2乗掛け1乗)で実行してるだけだと思う。
ただ普通はそんな酷い書きかたしないよ。何の例?
0219デフォルトの名無しさん
2011/10/29(土) 08:50:47.56(destroy 'war-freak))
(crazyp 9jou-lover)
t
0220デフォルトの名無しさん
2011/10/29(土) 08:53:13.73(defun 5jou (x)
(let ((x2 0) (x3 0))
(setq x2 (2jou x)) ; x2 = x^2
(setq x3 (* x2 x)) ; x3 = x2*x = x^3
(* x2 x3))) ; x2 * x3 つまり x^5
0221デフォルトの名無しさん
2011/10/29(土) 09:49:42.36ある入門書です。
0222デフォルトの名無しさん
2011/10/29(土) 09:55:29.50ありがとうございました。
0223デフォルトの名無しさん
2011/10/29(土) 10:29:38.690224デフォルトの名無しさん
2011/10/29(土) 10:52:42.97(defun 5jou (x)
(let ((x2 (2jou x)))
(let ((x3 (* x2 x)))
(* x2 x3))))
0225デフォルトの名無しさん
2011/10/29(土) 11:14:37.940226デフォルトの名無しさん
2011/10/29(土) 12:36:07.35(* x x x x x))
0227デフォルトの名無しさん
2011/10/29(土) 14:10:16.47すぐに窓から投げ捨てたほうがいいレベル
変数名にx1,x2,...とかつけちゃう本は大抵ダメ
学生が作ってくるプログラムでたまにこういうのあるよね
全ての関数名がf1,f2,...で変数名がx1,x2,...
0228デフォルトの名無しさん
2011/10/29(土) 14:12:01.20_____
.ni 7 / \ ご冥福をお祈りします
l^l | | l ,/) / /・\ /・\ \ .n
', U ! レ' / |  ̄ ̄  ̄ ̄ | l^l.| | /)
/ 〈 | (_人_) | | U レ'//)
ヽっ \ | / ノ /
/´ ̄ ̄ ノ \_| \rニ |
`ヽ l
0229デフォルトの名無しさん
2011/10/29(土) 14:13:31.37(defmacro gogogo (n)
(let ((jo-name (intern (concatenate 'string (prin1-to-string n) "JOJO"))))
`(defun ,jo-name (x)
(let ((x-val x))
(apply #'* (make-list ,n :initial-element x-val))))))
0230デフォルトの名無しさん
2011/10/29(土) 14:15:36.49(flet ((hoge (....
とか(実際には frob とかだが)...
いいんじゃねぇの名前なんてどうでも....
0231デフォルトの名無しさん
2011/10/29(土) 14:16:11.420232デフォルトの名無しさん
2011/10/29(土) 14:32:35.97しておかないと、手直しする気すら起こらんぞ。
0233デフォルトの名無しさん
2011/10/29(土) 14:41:42.31名前は大事でしょ。
例えば関数の名前付けに困るときは、
処理をまとめる粒度がおかしかったり、
別個の処理をまとめてやっちゃってることが多い。
0234デフォルトの名無しさん
2011/10/29(土) 16:33:59.960235デフォルトの名無しさん
2011/10/29(土) 16:43:56.57読み込みが一瞬で終わってデバックするところが分からないから
CLISP使っている人でどうしたらいいか分かる人いない?
0236デフォルトの名無しさん
2011/10/29(土) 17:02:39.29すげーけどあまり関わりたくないな
0237デフォルトの名無しさん
2011/10/29(土) 17:03:58.19読み込み速度とデバッグの関係がわからない。なにをどうしたいんだ?
0238デフォルトの名無しさん
2011/10/29(土) 17:11:13.44俺の作ったデータを読み込む
↓
エラーがあるから無論エラー文が返される
↓
しかし速すぎ見えないワロタwww
みたいな流れ。
0240デフォルトの名無しさん
2011/10/29(土) 17:23:28.68それって gensym みたいだ
lispや関数型言語で悩むのは関数の名前だというのは避けられないな。
特に、英語のボキャブラリの足りなさと前置詞の使い方の理解不足が
日本人にとって鬼門だと思ってるよ。
0241デフォルトの名無しさん
2011/10/29(土) 17:26:48.12をすれば混乱するところはずいぶん減るよ。
意識してプログラミングしてみな。けっしてdefunの中身をでかくするんじゃないぞ
0242デフォルトの名無しさん
2011/10/29(土) 17:32:22.33だから、1つの関数に5行で収まることを意識した作りをしてみればいい。
condやcase/ifを使うと大きくなりがちだけど、条件のところを上手に
関数化すると関数の膨らみは抑えられるし、デバッグもあとで楽になる。
traceを使うときも条件分けした所でどこに富んだかは一目瞭然になるしね。
手続きグセなのか関数の中にオールインワンの方向に作っちゃう人はいるけど
あれは、デバッグで悩むことになるからやめたほうがいいよ。
優れたlisperのソースでも長いものはあるけど(macroでmacroや関数をまとめて
作るような場合は特にね。)最初は小分けから、最適化するに連れて色々変える
ことを意識してったほうが効率はいい。
0243デフォルトの名無しさん
2011/10/29(土) 17:32:29.26前者で合ってる
0244デフォルトの名無しさん
2011/10/29(土) 17:37:04.27S式眺めてると関数なんだかシンボルなんだかわからなくなる
ってなってた頃はx1とか変数然としてて読みやすかった記憶がある
0246デフォルトの名無しさん
2011/10/29(土) 18:37:19.17なにが速いんだ? >>239 の推測どーりなら、
コンソールが閉じる => コマンドプロンプトから起動すれば?
文字が流れちゃう => エラーでたら止まるようにプログラムしとけば?
という感想。状況がいまいちわからん。
0247デフォルトの名無しさん
2011/10/29(土) 21:39:37.13開発効率が十倍以上変わってくるぞ。
0248デフォルトの名無しさん
2011/10/29(土) 21:44:27.07その昔 グレアムはviでclispを・・・
ということがあったようだ。slimeがあまりにもいいからな。
いまはslimvというvimのものがあるが。
0250デフォルトの名無しさん
2011/10/29(土) 21:55:13.75だとすると、slime+clisp がついてくるlispcabinetが
おすすめ
インストールするだけで環境が整うよ
0251SCHEME餃子 ◆8X2XSCHEME
2011/10/29(土) 22:01:13.63実質的には実用的な開発環境が Emacs か Vi しかないっつーのは環境をととのえるとこからめんどくさくて初心者にはハードルが高いよな。
Lispbox 使えよ。
0252SCHEME餃子 ◆8X2XSCHEME
2011/10/29(土) 22:02:08.85導入の楽さでは Lispbox よりも上っぽいな。
■ このスレッドは過去ログ倉庫に格納されています