5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2011/07/06(水) 17:15:15.55
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 :デフォルトの名無しさん:2011/07/06(水) 18:51:29.38
((お勧めの 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 :デフォルトの名無しさん:2011/07/06(水) 19:12:33.30
((商用の処理系)
(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 :デフォルトの名無しさん:2011/07/06(水) 19:21:15.55
■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 :デフォルトの名無しさん:2011/07/06(水) 19:28:45.96
■進んだ話題が欲しい人に
(和文)
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 :デフォルトの名無しさん:2011/07/06(水) 19:34:24.68
((おまけの処理系
(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 :デフォルトの名無しさん:2011/07/06(水) 19:44:12.30
テンプレ終わり。以上、漏れ、ミス等あったら指摘よろしく。

この長いテンプレを貼るのも二度目だと思うが、テンプレ代わりに

ttp://wiki.fdiary.net/lisp/
ttp://cl.cddddr.org/

書いとくだけじゃ駄目なん? Lisp Schemeスレみたいに。

8 :デフォルトの名無しさん:2011/07/06(水) 21:44:00.33
>>1 乙です。

> ま、ゆっくりたりましょう。
ってなってるけど、「ゆっくり『や』りましょう」かな
テンプレ置き場から間違っているみたいだけど

テンプレは短くてもいいと思う

9 :デフォルトの名無しさん:2011/07/07(木) 00:48:28.48
長いと貼るのが大変だから短くていいと思う。
できるだけスレ立てする人の負担を軽くすべし。

10 :デフォルトの名無しさん:2011/07/08(金) 23:31:48.61
>1乙

11 :デフォルトの名無しさん:2011/07/09(土) 09:50:21.47
>>1
スレ立て乙

12 :デフォルトの名無しさん:2011/07/09(土) 22:37:19.25
しかしネタがないage

13 :デフォルトの名無しさん:2011/07/10(日) 00:10:47.65
じゃあ、そろそろ出そうなCCL 1.7の話でも。

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

14 :デフォルトの名無しさん:2011/07/10(日) 00:17:18.16
あと、trunkではアセンブラ周りとかに色々手が入っていて、
FASLのバージョンも上がってイメージやFASLの互換性が無くなった。
1.7に入るかは不明。

15 :デフォルトの名無しさん:2011/07/12(火) 14:30:35.80
exe化したcommon lisp処理系のスクリプトを配布したいとき、
(動作環境はwindows 7/vistaです)
ライセンス的に緩いものはどれでしょうか?

16 :デフォルトの名無しさん:2011/07/13(水) 01:22:23.15
* SBCL - パブリックドメイン(一部BSD)
* CMUCL - パブリックドメイン
* CLISP - GPL(附則あり)
* CCL - LLGPL
* ECL - LGPL
* ABCL - GPL(附則あり)

だから、実行形式作る分には好きなの使えば良いと思う。
むしろ気を付けるべきなのは、処理系よりも使うライブラリじゃないか?

17 :デフォルトの名無しさん:2011/07/16(土) 09:14:00.44
#:keyword はキーワードだと思うのですが、
:keyword と書くのと何か違うのでしょうか?

18 :デフォルトの名無しさん:2011/07/16(土) 11:39:48.66
>>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 :デフォルトの名無しさん:2011/07/16(土) 11:39:56.49
>>16
それは処理系のライセンスでしょ?
CLの場合、実行形式作ると処理系も含まれるよね?
まあ実行形式は別のライセンスになってるケースもあると思うが。

20 :デフォルトの名無しさん:2011/07/16(土) 13:53:16.43
あるシンボルがtype-specifierかどうかは
どうすれば知ることが出来ますか?

21 :デフォルトの名無しさん:2011/07/16(土) 14:03:59.08
>>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 :デフォルトの名無しさん:2011/07/16(土) 14:31:51.10
>>20
どういうことがやりたいの?

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

23 :デフォルトの名無しさん:2011/07/16(土) 16:02:33.06
>>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 :デフォルトの名無しさん:2011/07/16(土) 19:08:06.55
>>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 :デフォルトの名無しさん:2011/07/16(土) 23:37:49.07
Lispというと、なんだかリストばかりを使うイメージがあります。
実際には配列も多く使用するのですか。

26 :デフォルトの名無しさん:2011/07/17(日) 05:28:59.34
基本はリストだけど配列のほうが適している場面では使うかと
「サイズ不変」かつ「ランダムアクセス多発」なんてときはそりゃ配列のが良いさ

C言語とかだと組み込みとかの極小メモリ環境意識するし
標準では配列しか使えないから配列がメインだろうけど
あれだって「要素数が常に変化する」「シーケンシャルアクセスがメイン」なんて場合はリストも使うっしょ

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

28 :デフォルトの名無しさん:2011/07/17(日) 07:27:39.63
リストはメモリの消費が激しいから、配列も多用するよー。
リストの場合、32ビットでもコンスセルあたり8バイトとか使うし。64ビットだともう凄い。
32ビットで1024要素くらいでも、リストが8 kb強、ベクタなら4 kb弱とダブルスコア。

ただ、遅延ストリームとか循環リストとか便利だし、木構造も表現できるし、
なんだかんだ言ってalistもplistもお手軽で便利だから、リスト使うよ。
>>26の言うように、シーケンシャルアクセスなら速いし。

29 :デフォルトの名無しさん:2011/07/17(日) 08:39:23.30
Lisp で手軽に扱えるデータ構造というとリストだからね。
まぁ、そのように作られた言語だから当然なんだけど。
ざっくりとしたものをまず作るってときにリストの柔軟性っていうのはすごくマッチしてるんだよ。

プログラムを書く序盤っていうのはどんなデータ構造が適切なのか、
どこがボトルネックになるのかはわからない。
わかってるつもりがやってみたら違うってこともある。
だから序盤ではリストで作ってみて効率に効いてくるところを配列や構造体で置換えるというのはよくある。

機能や性能が不足だろうととにかく「まず動くもの」を作ってから改良していくのが Lisp 的なスタイルだし、
そのスタイルにリストはよく合うってこと。

30 :デフォルトの名無しさん:2011/07/17(日) 12:46:05.02
>>24
ありがとうございます。
参考になります。

31 :25:2011/07/17(日) 17:38:02.06
25です。
皆様ご回答ありがとうございました。
勉強になりました。

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

33 :デフォルトの名無しさん:2011/07/19(火) 14:35:01.66
vbsで書かれたyaccでも探すとか?

34 :デフォルトの名無しさん:2011/07/19(火) 16:05:02.70
>>32
Lisp1.5から始めたら?
Lisp自体初めてでも3日とかからないでしょ。

35 :デフォルトの名無しさん:2011/07/19(火) 21:04:48.95
>>32
何で CL の挙動を理解するのに vbs でサブセットを実装するという話になるのか分からんけど、
Lisp の処理系を作った事がないなら、まずは↓この記事が参考になると思います。

http://www.oki-osk.jp/esc/go.html

CL の実装はその後で。

それより CL の処理系をインストールしてガシガシ弄った方が勉強になると思うけど...

36 :デフォルトの名無しさん:2011/07/19(火) 21:35:27.97
好きなやり方でやればいい。

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

38 :デフォルトの名無しさん:2011/07/21(木) 13:45:40.59
http://blog.bugyo.tk/lyrical/archives/126
ニコニコ動画のスクリプトでLispインタプリタ作ったそうだ

39 :デフォルトの名無しさん:2011/07/21(木) 15:12:46.41
いつの話題だよ

40 :デフォルトの名無しさん:2011/07/21(木) 22:06:16.45
書いてあるよ?

41 :デフォルトの名無しさん:2011/07/21(木) 22:42:11.72
確かに「いつの話題だよ」って文を額面通りに読めばいつの話題なのか訊ねてることになるが……

42 :デフォルトの名無しさん:2011/07/21(木) 22:56:32.95
人工知能なんだろう

43 :デフォルトの名無しさん:2011/07/22(金) 03:22:46.85
ナンセンスギャグの王道的手法だな

44 :デフォルトの名無しさん:2011/07/22(金) 08:29:49.03
>>41
修辞疑問だな。

45 :デフォルトの名無しさん:2011/07/22(金) 14:11:09.96
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

46 :デフォルトの名無しさん:2011/07/22(金) 21:07:56.93
このスレッドはCommon Lispによる人工知能「AIちゃん」が
言語訓練のために立てたものです。

AIと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

47 :デフォルトの名無しさん:2011/07/23(土) 01:28:34.64
そこはElizaちゃんでだなぁ

48 :デフォルトの名無しさん:2011/07/24(日) 18:26:29.09
Common Lispって実際に使われてるの?



49 :デフォルトの名無しさん:2011/07/24(日) 19:34:32.07
その質問定期的に出るNE!

しかも過去ログを読もうともしないし、グーグル先生にお伺いを立てることもないんだ。

50 :デフォルトの名無しさん:2011/07/24(日) 19:44:05.18
stumpwmで動作はぎこちないが現在のグループに表示してあるウィンドウを
すべてfnextにずらすもの作ったんだけど需要ありますか?

51 :デフォルトの名無しさん:2011/07/25(月) 16:22:49.31
>>48

>>46

52 :デフォルトの名無しさん:2011/07/25(月) 17:03:18.43
>>50
stumpwm 改造の参考に、見てみたいです。

53 :デフォルトの名無しさん:2011/07/25(月) 18:38:25.47
>>52
参考にならないほどのやっつけですが
http://www.dotup.org/uploda/www.dotup.org1828277.gz.html
自分用としてはいまのところ問題ないです。

54 :デフォルトの名無しさん:2011/07/25(月) 19:55:32.39
>>53
stumpwmってしらなかった、wmiiからこっちにひっこそうかしら


55 :デフォルトの名無しさん:2011/07/31(日) 21:04:37.62
Lispを今日始めたものなのですが、
(defun foo (lst) (car lst))
(setq var (list 2 4 6 8 1 3 5 7 9 10) )
(foo var)
でfooという関数はないと言われるのですが、何故でしょうか?

56 :デフォルトの名無しさん:2011/07/31(日) 21:12:22.21
>>55
Mac OS X 上の CCL だと実行出来ましたよ

57 :デフォルトの名無しさん:2011/07/31(日) 21:13:39.35
(setq var (list 2 4 6 8 1 3 5 7 9 10) ) ってなんか意味あんの?それを挟まなければエラーが出ないとか?

58 :デフォルトの名無しさん:2011/07/31(日) 21:14:26.54
う、見間違えた。すまん

59 :デフォルトの名無しさん:2011/07/31(日) 21:44:57.55
http://ideone.com/TeUAw


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

61 :デフォルトの名無しさん:2011/07/31(日) 22:08:29.48
便乗して...
http://ideone.com/fu2He
これが動かないのは何故でしょう?

62 :55==61:2011/07/31(日) 22:13:24.18
名前入れ忘れた
エラー文を調べたら局所変数にアクセスが云々と出てきたのですが、
外からアクセスはしてないように見えるのです


63 :デフォルトの名無しさん:2011/07/31(日) 22:49:44.40
>>61
CL はlisp-2だから
http://ideone.com/lLwg2

あと、>>55 はxyzzyでも動くよ。
評価し忘れとかじゃない?

64 :デフォルトの名無しさん:2011/07/31(日) 23:01:58.21
>>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 :デフォルトの名無しさん:2011/08/03(水) 02:44:38.45
>>61
funcall の後ろに#’つけたら動いたよ






66 : 忍法帖【Lv=12,xxxPT】 :2011/08/03(水) 06:10:12.50
いや、なんつーか、>>63>>65

(defun qsort (lst)
...
(append (qsort ...) ...) ...)

って感じに呼べることをまず教えてやれよ……。

67 :デフォルトの名無しさん:2011/08/03(水) 06:43:28.89
こんな感じ。

http://ideone.com/fPEnC

68 :デフォルトの名無しさん:2011/08/04(木) 09:34:28.69
ECLだとquicklispからdrakma使えませんでした。
解決エロい人たすけて

69 :デフォルトの名無しさん:2011/08/04(木) 09:37:08.37
解決エロい人 >> 解決できるエロい人 に直してください

70 :デフォルトの名無しさん:2011/08/04(木) 10:30:59.09
>>68
エラーメッセージは?

71 :デフォルトの名無しさん:2011/08/04(木) 11:29:14.64
Your Lisp does not support weak key hash-tables.
[Condition of type SIMPLE-ERROR] 
ECL 10.3.1 をapt-get install で入れて使っています。 


72 :デフォルトの名無しさん:2011/08/04(木) 14:00:50.29
まんま書いてるじゃないですかー!

Drakmaが利用してるCL+SSLってライブラリがあって、
さらにそれが利用してるtrivial-garbageというライブラリが出してるエラー。
ECLがウィークハッシュテーブルに対応してないから出てる。

あるいは、ECLが実はウィークハッシュテーブル使えるってんなら、
簡単に使えるようになるから、バグレポートでもすればすぐ修正してくれると思う。
報告するのはDrakma相手じゃなくて、trivial-garbageの方ね。

73 :デフォルトの名無しさん:2011/08/04(木) 14:21:48.11
ttp://osdir.com/ml/lisp.ecl.general/2008-04/msg00171.html

読むと、ウィークハッシュテーブルに対応する予定はなさそうなんで、
ECL側の修正は割と無理っぽいんじゃないかと思う。

考えられる対応策:

- CL+SSLに報告してECLだけ特別扱いしてもらう
- curlのプロセスを実行して出力を読む
- libcurlをFFI経由で使う
- 別の処理系を使う
- 別の言語を使う


74 :デフォルトの名無しさん:2011/08/04(木) 15:37:21.44
>>72,73
今後はdrakmaを使う時には別の処理系を使うようにします
いろいろありがとうございました


75 :デフォルトの名無しさん:2011/08/04(木) 16:18:55.06
解決エロい人がいるスレですね。

76 :デフォルトの名無しさん:2011/08/04(木) 16:44:41.51
かいけつゾロリとか快傑ズバットの亜種か。

77 :デフォルトの名無しさん:2011/08/04(木) 19:43:24.53
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 :77:2011/08/04(木) 20:09:57.53
解決しました。
〜.asd のファイルには書かなくていいけど〜.lispの方に付け加えるだけで良かったみたいです。

79 :デフォルトの名無しさん:2011/08/04(木) 21:28:33.55
cl-annotとかは、

ttps://github.com/arielnetworks

にあるコードでいっぱい使ってるので、見ると参考になると思う。

80 :デフォルトの名無しさん:2011/08/05(金) 00:15:37.50
>>53
自分のやり方が違うかもしれないが、テキストファイルにならない。

81 :デフォルトの名無しさん:2011/08/05(金) 00:55:25.96
>>80
dump-group-to-fileで作られるファイルのことですか?

82 :デフォルトの名無しさん:2011/08/05(金) 03:50:16.17
http://ll.la/LQ4F
中のファイルすべてHOMEにつっこんで
sbclにquicklispインストール、cl-ppcreとtrivial-shellも一度quickloadで再起動でいけるはず。


83 :デフォルトの名無しさん:2011/08/05(金) 10:53:30.37
abclでmaximaが動くのはいつになるんだ

84 :デフォルトの名無しさん:2011/08/12(金) 00:53:45.82
連想リストからある値の取得がうまくいかないので質問です。

以下のような状況です。

(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 :デフォルトの名無しさん:2011/08/12(金) 01:15:31.43
>>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 :デフォルトの名無しさん:2011/08/12(金) 01:17:20.15
ああ、一番普通なの忘れてたわ。

(setq list_c `((a ,@list_a) (b ,@list_a)))


87 :84:2011/08/12(金) 01:23:54.85
>>85
ありがとう、理解できました。


88 :デフォルトの名無しさん:2011/08/15(月) 02:27:11.12
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 :デフォルトの名無しさん:2011/08/15(月) 02:38:59.99
>>88
そのプログラムの前に (requre 'cl) を付けると解決出来るんじゃないかな

90 :デフォルトの名無しさん:2011/08/15(月) 02:50:37.63
もちろん >>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 :デフォルトの名無しさん:2011/08/15(月) 03:18:26.75
>>90
ありがとう解決しました。

今後はEmacs Lispのほうで聞きますね。



92 :デフォルトの名無しさん:2011/08/15(月) 22:39:41.10
時代はlispよりもhaskell
教養としてのプログラミングならこっちを勧めたい

93 :デフォルトの名無しさん:2011/08/16(火) 03:07:18.49
自分の知る限り、Haskell は少なくとも 5 年前には注目を受けていたし、
Haskell に無い Lisp の特徴として S 式とマクロは知っておいた方が良いと思われ

94 :デフォルトの名無しさん:2011/08/16(火) 12:52:53.95
lispが理解できないとHaskellは無理だと思う

95 :デフォルトの名無しさん:2011/08/16(火) 18:01:20.91
Haskellが無理ならLispも無理だろう

96 :デフォルトの名無しさん:2011/08/16(火) 18:08:14.77
>>92-95
忍者より酷い


97 :デフォルトの名無しさん:2011/08/16(火) 18:10:31.20
どっちか勉強するのにもう一つの知識が必要みたいな議論がおかしい
まっさらな状態で今はじめるならHaskellの方が得るものは大きい

98 :デフォルトの名無しさん:2011/08/16(火) 18:32:14.29
そんな単純な比較が可能とは思えないが…

99 :デフォルトの名無しさん:2011/08/16(火) 18:46:49.49
カレーとおにぎりを比べるようなものだな

100 :デフォルトの名無しさん:2011/08/16(火) 18:56:45.41
で、どっちがカレーなんだ

101 :デフォルトの名無しさん:2011/08/16(火) 19:02:30.24
Haskellの説明でカリー化ってしょっちゅうくらいだからやはりHaskellがカレーじゃなかろか?














;;;ごめんなさい、ワタシが悪うございました。

102 :デフォルトの名無しさん:2011/08/16(火) 19:24:52.71
>>101
俺も同じ事思ったから大丈夫だ

103 :デフォルトの名無しさん:2011/08/16(火) 20:02:39.45
別にどっち先に勉強しても、もう一方を勉強できないわけじゃないんだから。
好きな方先にやって後で別の方やれば良いよ。

HaskellだけやってたらHaskell自身の長所を理解できないし、
LispだけやってたらLisp以降に生まれたパラダイムを取り込めないじゃん。

104 :デフォルトの名無しさん:2011/08/17(水) 03:41:17.91
おにぎlispってなんかいいな

105 :デフォルトの名無しさん:2011/08/17(水) 06:47:24.00
haskellカレーにおにぎlisp

仲良くやっていけそうな気がする

106 :デフォルトの名無しさん:2011/08/17(水) 13:00:47.05
J( 'ー`)し<残さないで食べなさいね。

107 :デフォルトの名無しさん:2011/08/17(水) 16:11:13.82
最近のコンビニにはカレー化おにぎりというのがあってだな

108 :デフォルトの名無しさん:2011/08/17(水) 16:11:51.86
なぜ「化」という文字が入る…

109 :デフォルトの名無しさん:2011/08/19(金) 09:42:20.53
>>83
command line版Maximaは(run_testsuite()を通過する意味で)動いてる筈。
ttp://abcl-dev.blogspot.com/2010/10/maxima-on-abcl-full-pass-on-test-suite.html

ABCL版Maximaは、GCL版Maximaより遅かった様な…。

110 :デフォルトの名無しさん:2011/08/26(金) 10:59:32.41
保守

111 :デフォルトの名無しさん:2011/09/06(火) 04:49:27.30
つかS式と基本5関数さえあれば何でもできるのに何でlispってアホみたいに方言多いの?

112 :デフォルトの名無しさん:2011/09/06(火) 04:59:00.08
流石に純LISPだけでは実用性に欠けるから
よく使う関数を各社が実装した結果

113 :デフォルトの名無しさん:2011/09/06(火) 05:42:33.67
たぶんルールが少ないほうがバリエーションは増えるんだと思う
かつての2Dシューティングゲームみたいに

114 :デフォルトの名無しさん:2011/09/06(火) 05:54:29.02
>>111
チューリングマシンでプログラミングしてきたら答えが分かると思うよ。

>>111は何か他の所でまんま同じな文章見た気がするんでコピペだろうけど、
Lispの方言だけ何か特別視するのって凄いナンセンス。
ALGOLの方言とかいくつあるんだよとか逆に聞きたい。

115 :デフォルトの名無しさん:2011/09/06(火) 09:04:36.79
>>111 「S式と基本5関数さえあれば何でもできる」が嘘
まずは少なくとも cond か if の特殊形式がないとチューリング完全じゃないし、
lambda が無いのも微妙だろう。

116 :デフォルトの名無しさん:2011/09/06(火) 22:22:01.52
それだけではなんでこんなに方言があるのかという質問の答えとして弱いのではないか?


117 :デフォルトの名無しさん:2011/09/06(火) 22:50:56.94
処理系を作るのが簡単だから

118 :デフォルトの名無しさん:2011/09/06(火) 23:20:31.02
2進数の文字列から10進数に変換するにはどうしたらいいか教えてください。

119 :デフォルトの名無しさん:2011/09/06(火) 23:25:36.72
(parse-integer "1010" :radix 2)

120 :デフォルトの名無しさん:2011/09/07(水) 00:20:57.67
>>119
ありがとうございます。

121 :デフォルトの名無しさん:2011/09/07(水) 18:16:43.66
リスプの処理系より簡単な演算器もったスタックマシンのほうが簡単なきがしましたよ。
アセンブラなんて1行1命令で翻訳してだけだから原始的なものならこっちも簡単でした。

122 :デフォルトの名無しさん:2011/09/07(水) 18:20:18.73
言語処理系を作るなら、まずForth処理系でも作ってみるのは、悪くないよね。

123 :デフォルトの名無しさん:2011/09/08(木) 06:28:12.39
Forthのかっこよさは異常

124 :デフォルトの名無しさん:2011/09/08(木) 08:59:14.97
Obi-Wan Kenobi もForthを使えって言ってたしな

125 :デフォルトの名無しさん:2011/09/08(木) 11:30:03.13
そのネタ聞くのはもう100万遍目だ

126 :デフォルトの名無しさん:2011/09/08(木) 18:58:27.75
>>125
> そのネタ聞くのはもう100万遍目だ
(/ (expt 1000.0 2) 365)
毎日そのネタを平均一回聞けるとして2739.726年かかるよ

127 :デフォルトの名無しさん:2011/09/08(木) 21:20:54.60
今日という一日を100万回繰り返した超能力者である可能性も捨て切れない。

128 :デフォルトの名無しさん:2011/09/08(木) 21:25:29.10
>>127
> 今日という一日を100万回繰り返した超能力者である可能性も捨て切れない。
2739.726歳の超能力者か、なんかすごいね。

129 :デフォルトの名無しさん:2011/09/09(金) 14:27:37.34
激しくどうでもいいなwww

130 :デフォルトの名無しさん:2011/09/09(金) 14:41:31.45
まどマギだったら歳とらない

131 :デフォルトの名無しさん:2011/09/09(金) 14:47:43.34
\オッカリ〜ン/でも多分としとらない。

132 :デフォルトの名無しさん:2011/09/09(金) 17:35:10.00
エンドレスビリオン

133 :デフォルトの名無しさん:2011/09/10(土) 12:57:05.63
あんまり面白かったのでループでまわしたのかもしれんぞ。
(dotimes (n 999998) (print "Forthを使え"))


134 :デフォルトの名無しさん:2011/09/10(土) 18:26:28.62
なんか問題(良問)を出して、それを実装して、プログラミングベンチマークテストしようぜ。
環境は基本Linuxベースであること(他の環境でも可だけど、明言すること)、使っている言語のバージョンは明言必須。

良問のネタの候補がない場合は、Python, Perl, Rubyの宿題スレから探してくる。

135 :デフォルトの名無しさん:2011/09/12(月) 02:28:07.87
scheme初心者スレを探しているのですが無いみたいなので
scheme初心者の質問もここで良いのでしょうか?

136 :デフォルトの名無しさん:2011/09/12(月) 02:33:27.81
>>135
初心者スレはないけどこっちよりは適切なはず

Lisp Scheme Part32
http://hibari.2ch.net/test/read.cgi/tech/1303299696/

137 :デフォルトの名無しさん:2011/09/12(月) 06:57:07.46
>>134
とりあえず問題によるんじゃね?
そういえばどう書く?org って、いつのまにかすたれたね

138 :デフォルトの名無しさん:2011/09/12(月) 14:10:11.65
>>137
いいのが思いつかないので、ベタに(random 1234567890)で生成されるn個の値をソートせよ。ぐらいではダメかね?
期限は9/23(金)21:00まで。ソース晒しは9/16(金)21:00から。

単純なソートだと工夫の余地がなくて速度の違いって出ないものなのかな。

;; ### 絶賛、問題募集中 ###

139 :デフォルトの名無しさん:2011/09/12(月) 16:25:34.19
これでいいんじゃね?

The Computer Language Benchmarks Game
http://shootout.alioth.debian.org/

既にSBCL向けのコードがあるから、
俺の書いたコードの方が速いぜとか、
この処理系の方が早いぜとか。


140 :デフォルトの名無しさん:2011/09/12(月) 19:38:24.28
>>139
> 既にSBCL向けのコードがあるから、
> 俺の書いたコードの方が速いぜとか、
> この処理系の方が早いぜとか。
その心は?

個人的には入門者でもなんとか参加できるレベルの問題にしたいです。ジムカーナなどに使われるtime result形式で個々人の励みにしてほしいなあと。
もちろん、入門者が相当がんばれば参加できるレベルの問題をたまにやるのは良いと思います。

141 :デフォルトの名無しさん:2011/09/12(月) 21:52:32.59
誰も参加してないのに、俺ルール炸裂かよw

142 :デフォルトの名無しさん:2011/09/13(火) 07:02:30.34
Linux上のSBCLでLispbuilder-SDLをasdf-installから入れようとすると
まぁGPG鍵はもちろんスキップするんだが、その後すぐに
cocoahelperが有りません的なこと言われて止まります

Linuxだからいらねぇんだよおおおおおおおおおおおおおおおおおおおおおおおお

143 :デフォルトの名無しさん:2011/09/13(火) 07:12:31.29
カリカリしないで一息いれなよ
っ 森永ココア

144 :デフォルトの名無しさん:2011/09/13(火) 07:35:54.70
>>142
ASDF-Installとか今さら使ってんじゃNEEEEEEEEEEEEEEEEE!!1! このボケが!

私としては、ASDF-Installの代わりにQuicklispを使うことをお勧めします。
SBCLで動かないパッケージははねられているみたいですし。
それでも動かない場合、もっと詳細なエラーメッセージを頂けると、
解決に協力できるかもしれません。

145 :デフォルトの名無しさん:2011/09/13(火) 07:38:41.77
ASDFは時代遅れだったのか……!!!!!!
cocoaは消えて、今度はcffi-examples見つからなかったとか言いやがる

ちなみに私はヴァンホーテンが好きです。

とりあえずQuickLisp使ってみます

146 :デフォルトの名無しさん:2011/09/13(火) 08:41:41.68
>>145
ASDFというか、ASDF-Installが過去の遺物になりつつある、
といった感じになっています。森永も悪く無いのではないでしょうか。

ASDFという、ライブラリに対する操作を統一するAPIの上に、
QuicklispやASDF-Installなどの、ライブラリを管理する仕組みが作られています。

Quicklispは比較的最近現れたもので、まだベータ版なのですが、
抜群の使いやすさから、一気に定着してしまった感がありますね。

147 :デフォルトの名無しさん:2011/09/13(火) 14:16:59.49
Rをclから使いたいからrclとかいうの入れた
それをmaximaから呼ぶとlapackが2重に呼ばれるのかおかしくなる

何か回避方法ないの?

148 :デフォルトの名無しさん:2011/09/13(火) 23:31:07.27
一般論だけど、環境、エラーメッセージ、バージョン、操作、
そういった物を書いてくれないと、仮に回避方法が分かる人でも、
同じ所ではまったことがないと答えられんと思うよ。

あと、Maximaの話なら、

【数式処理システム】 Maxima 【Common Lisp】
http://kamome.2ch.net/test/read.cgi/math/1287274183/

の方が回答を得られるんじゃない?

149 :デフォルトの名無しさん:2011/09/14(水) 08:59:05.79
>>138
http://projecteuler.net/

150 :SCHEME餃子 ◆8X2XSCHEME :2011/09/14(水) 23:41:49.99
ブログとかで Project Euler の解き方の解説してるのみたら「XXは自明なので」とか書いてあったりするけど、全然自明じゃねーよって感じのが多くて困る。
Project Euler って数学の問題でもあるから単なるプログラミング演習の問題とはちょっと雰囲気が違うかも。
もちろん、身に付くことは多いけど。

151 :デフォルトの名無しさん:2011/09/15(木) 12:57:41.32
>>150
そんなの高校数学の教科書からたくさんあるだろ

152 :デフォルトの名無しさん:2011/09/22(木) 00:30:22.73
スイマセン、基本的なところなんですが

>(defun test1(x)(eq x #'+))
TEST1
>(test1 #'+)
T
なのに

>(defmacro test2(x)(eq x #'+))
TEST2
>(test2 #'+)
NIL
になるんですが、マクロと関数で引数の評価の仕方が違うんでしょうか?

153 :デフォルトの名無しさん:2011/09/22(木) 01:06:48.59
>>152
そこは基本的っていうか、むしろ嵌りどころ。

#'は特殊形式functionに展開されるんだけど、functionが返す関数オブジェクトは、
必ずしも毎回同じ物とは限らない、っていう話だったはず。

ttp://www.apl.jhu.edu/~hall/Lisp-Notes/Dalton-Pitfalls-List.text

の"Function vs eq."に詳しい。

154 :デフォルトの名無しさん:2011/09/22(木) 01:12:36.50
って、待った。test2ってクォートしてないの?
(defmacro test2(x)`(eq ,x #'+))でなく?

155 :デフォルトの名無しさん:2011/09/22(木) 01:22:58.45
まんま>>152の通りなら、コンスの '(function +) と関数の #'+ を比較してるので、
マクロの展開結果がNILになり、評価結果もNILになる。

そういう勘違いなら、Common Lispの評価モデル自体を理解してないことになるので、
HyperSpecとか書籍とかマクロの解説とかを読んだ方が良いと思う。
マクロに渡されるのは値じゃなくて式。

156 :152:2011/09/22(木) 01:54:26.73
>(defmacro test3(x)(equal x '(function +)))
TEST3
>(test3 #'+)
T
納得。夜遅くにスイマセンでした

157 :デフォルトの名無しさん:2011/09/30(金) 14:34:56.92
自明は相手をごまかす頻出単語

158 :デフォルトの名無しさん:2011/09/30(金) 14:56:15.85
毎回公理から一つ一つ積み重ねるしかないのか

159 :デフォルトの名無しさん:2011/10/05(水) 22:10:00.39
キーワード引数が指定されなかった場合と、
キーワードの値としてnilが渡された場合って区別できるんでしょうか?
例えば
(defun hoge (&key (foo)) foo)
として、
(hoge)
の場合と
(hoge :foo nil)
の場合を区別できるかどうか、という意味です。


160 :デフォルトの名無しさん:2011/10/05(水) 22:26:42.09
&key では判断するために supplied-p-parameter があるよ。
CL-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


161 :159:2011/10/05(水) 22:46:31.24
おぉー。全く知りませんでした。
ばっちりです。ありがとうございます。

162 :デフォルトの名無しさん:2011/10/10(月) 09:36:53.02
パッケージとか、ASDFの使い方を知りたいのですが、
何を参照したらよいですか?


163 :デフォルトの名無しさん:2011/10/10(月) 11:42:24.68
>>162
パッケージは知らないけど、ASDFなら
http://common-lisp.net/project/asdf/asdf.html
とか
http://common-lisp.net/~mmommer/asdf-howto.shtml
とかじゃない?

ググッたりしてるなら、もう見ただろうけど

164 :デフォルトの名無しさん:2011/10/10(月) 13:07:43.42
>>162
ASDFではなく、quicklispを使うといいよ。
既知だったらすまん。

165 :デフォルトの名無しさん:2011/10/10(月) 18:25:50.48
>>164
CLのパッケージシステム関連全体のことを聞いてるんじゃねぇの
quicklispもasdf使ってるし
``asdf-install使うくらいならquicklispを使うといいよ''
てな話だとわかるんだが, 若干的外れなような...


166 :デフォルトの名無しさん:2011/10/10(月) 21:04:40.05
162の質問者です。舌足らずの質問ですいませんでした。

これまで、小さなプログラムしか作ったことがないもので、
個々のソースプログラムファイルをloadしているだけで
満足してたのです。使ってる処理系がsbclなので、多分何もしなくても
コンパイルもしてくれるようですし。(つづく)


167 :デフォルトの名無しさん:2011/10/10(月) 21:07:41.81
(つづき)
しかし、下記の理由で、だんだんそうもいってられなくなりました。
1. 自分で書くプログラムがかなり大きくなってきた。
   (その結果 2.と3.)
  2. 名前空間(?)をcommon-lisp-userとは、分離したい.
3. ソースプログラムファイルの依存関係(どれが、どの
   ファイルで定義されている関数を使っているかなど)を
   うまく表現する方法がないか知りたい。コンパイルや
   ロードをスマートにやりたい。
    (c言語でのmakeに相当するものがないかな??)
(つづく)


168 :デフォルトの名無しさん:2011/10/10(月) 21:10:04.15
(つづき)
4. 他人が作ったプログラムをつかうのに、requireとか
   asdfを使うこともでてきたのですが、(関連するwebサイト
   の説明を鵜呑みにしているだけで)何が起こっているのか
   よく分からない。何が起こっているのか知りたい。
(つづく)


169 :デフォルトの名無しさん:2011/10/10(月) 21:12:19.54
(つづき)
4. 他人が作ったプログラムをつかうのに、requireとか
   asdfを使うこともでてきたのですが、(関連するwebサイト
   の説明を鵜呑みにしているだけで)何が起こっているのか
   よく分からない。何が起こっているのか知りたい。
(つづく)


170 :デフォルトの名無しさん:2011/10/10(月) 21:14:34.72
(つづき)
ちなみに、require関数を使って他人が書いたプログラム(たとえば
clxとかMcCLIMなんか)をロードすると、
結構、複雑なことが起こっている気がするのですが、CLtL2のrequire
の説明をみても何だかよくわかりませんでした。
(多分、必要なモジュールを探してロードしているんだろうなと思う。
そういうことを自作プログラムでもやりたいのです。)


171 :デフォルトの名無しさん:2011/10/10(月) 21:24:23.45
2. は CL でいうパッケージの仕事。
3. は、ASDF (C言語でいう make の Lisp 版。最近の標準) の仕事。
4. に関しては、CLHS で provide/require という仕組が定義がされているが、
こいつは実装依存でかつ依存関係を取り扱うポータブルな手段がないため、一
般的にはASDFが利用される。(でも、処理系依存のライブラリなんかでは使われてる)

前にでている Quciklisp てーのは、 ASDF の上にさらに rpm/yum みたいなパッ
ケージ管理機能を追加したもの。なので、ボトムアップが好きなら学習順序と
してはパッケージ -> ASDF -> Quicklisp がいいんじゃないかな。

172 :デフォルトの名無しさん:2011/10/11(火) 23:51:42.80
ネットに繋がらない環境にquicklispkから落としたライブラリを持って行きたいんだけど、
ネットにつながるマシンでライブラリ整えて、~/quicklispを全部コピーして持ってけばおkなのかな?

173 :デフォルトの名無しさん:2011/10/12(水) 00:26:01.96
>>172
そう。
持っていったやつを別な場所に置きたいなら、
http://www.quicklisp.org/beta/faq.html#local-project を参考に。

174 :デフォルトの名無しさん:2011/10/12(水) 14:01:09.61
なんと言いますか、ミニゲームを作りながら段々とプログラミングのやり方を
覚えていくような入門サイト、書籍みたいなものはありませんか?

入門書籍を何冊か読んでみたんですが、式それぞれの使い方は飲み込めたのですが
それをプログラムでどう表現したら良いか分らないと言いますか。

出来ればLinux上のClispに対応したものがベターですが、他の環境でも構いません。

175 :デフォルトの名無しさん:2011/10/12(水) 16:47:15.57
ありません

176 :デフォルトの名無しさん:2011/10/12(水) 16:53:12.06
>>174
http://landoflisp.com/

177 :デフォルトの名無しさん:2011/10/12(水) 17:09:02.98
斬新スギルwwwwww

178 :デフォルトの名無しさん:2011/10/12(水) 19:37:39.35
>>176
開いた瞬間にMade by secret alien technologyだったw


179 :デフォルトの名無しさん:2011/10/12(水) 22:58:13.41
>>176
類書が全く思いつかないすごい世界だ

180 :デフォルトの名無しさん:2011/10/12(水) 23:02:53.03
括弧食うなw

181 :デフォルトの名無しさん:2011/10/12(水) 23:59:37.28
その本は素晴らしいよ。
LISPのトンデモ歴史に始まり、簡単なAIやWEBサーバー開発なども学べる。
英語は平易。

182 :デフォルトの名無しさん:2011/10/13(木) 00:10:38.65
Land of Lispって、作曲したり、色々フリーダムだよな。

http://youtu.be/HM1Zb3xmvMc

183 :デフォルトの名無しさん:2011/10/13(木) 01:12:43.71
>>176を見てamazon kindleで衝動買いしてしまったw
kindle価格で29ドル
早速読んでみるわ

184 :デフォルトの名無しさん:2011/10/13(木) 22:45:02.02
出版社はno starch press (堅苦しくない出版 という名前)で
日本語の萌系の学術書?も翻訳してるし、
You learn a haskell for great good! (最近話題のHaskell書)の
本も出版してる。You learn ~ も簡単な英語で書かれてるよ。

185 :デフォルトの名無しさん:2011/10/14(金) 07:07:25.64
本当だ、オーム社のマンガでわかる〇〇の表紙が公式サイトにある
Hacking第2版のパブリッシャーでもあるのか

186 :デフォルトの名無しさん:2011/10/14(金) 07:39:00.94
The Manga Guide to the Universe なんてのもその出版社のページに。
オーム社は「マンガでわかる銀河系」も出すべきだなw

187 :デフォルトの名無しさん:2011/10/14(金) 13:31:36.12
>>173
サンクス!
お礼が遅れてすまんかった。

188 :デフォルトの名無しさん:2011/10/16(日) 01:26:54.32
Schemeのschelogに相当するものってないの?

189 :デフォルトの名無しさん:2011/10/16(日) 02:04:44.48
http://norvig.com/paip/prolog.lisp
http://www.franz.com/products/prolog/

190 :デフォルトの名無しさん:2011/10/16(日) 09:42:50.70
http://www.lispworks.com/products/knowledgeworks.html


191 :デフォルトの名無しさん:2011/10/18(火) 23:48:13.92
テスティングフレームワークって何が標準的なんでしょうか?

192 :デフォルトの名無しさん: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

193 :デフォルトの名無しさん:2011/10/19(水) 01:02:25.05
clojure.testっぽいのとPerlのMore::Testっぽいのは、日本語の一次資料があるらしい。
最近公開されたものだし、標準ではないけどね。


194 :デフォルトの名無しさん:2011/10/19(水) 07:32:48.73
>>191
比較的多く使われてるのは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

195 :デフォルトの名無しさん:2011/10/19(水) 07:54:01.51
あと、CL-TEST-MOREは公式のドキュメントは英語。
ただ、中の人が日本人なので、日本語の解説もあるけど。

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

196 :デフォルトの名無しさん:2011/10/25(火) 06:28:23.81
RIP

197 :デフォルトの名無しさん:2011/10/25(火) 06:43:27.22
マッカーシー御大のことか

198 :デフォルトの名無しさん:2011/10/25(火) 21:23:05.33
ああ、なんというか悲しいなぁ。
おれがコンパイラとか興味持ったのも、全部Lispのおかげなんだ。
Lispの父の魂よ安らかに眠れ。

199 :デフォルトの名無しさん:2011/10/25(火) 21:48:23.67
マッカーシーって赤狩りやった人?

200 :デフォルトの名無しさん:2011/10/25(火) 22:44:12.27
連載:インターネット・サイエンス の歴史人物館(12)
ジョン・マッカーシー
http://wbb.forum.impressrd.jp/feature/20071212/515

201 :デフォルトの名無しさん:2011/10/27(木) 16:40:48.72
関数プログラミングとオブジェクト指向プログラミングが相容れないという見解を
時折聞くのですが、そうなんですか?
自分はオブジェクト指向を型と引数の型によって振る舞いを変える関数の組み合わせで理解しており、
関数プログラミングとオブジェクト指向プログラミングは直行するのではないかと思っているのですが。

202 :デフォルトの名無しさん:2011/10/27(木) 17:29:29.77
確かに直交するものではあるのだけど、
どうしてもオブジェクト指向の、「物」指向、副作用による状態の変化を利用したスタイルから、
普通にはそれを使えなくなる純粋関数型に、自分の思考を持ち込むか、という技の掛け方、
というか、そのへんは実際にやってみて慣れればなんということないんだけど、説明するのは
難しいので。

203 :201:2011/10/27(木) 17:34:38.20
ははあ、結局再代入をどんどんやるスタイルから
一度しか代入しないスタイルへの切り替えの難しさから
そういう意見が出てくるって事ですね
ありがとうございます

204 :デフォルトの名無しさん:2011/10/27(木) 17:43:50.90
ABCLとか、ACTOR→Schemeとか、
メッセージパッシング系は上手く混合してるでしょ。

205 :デフォルトの名無しさん:2011/10/27(木) 19:00:26.69
>>201
技術書の「Concepts, Techniques, and Models of Computer Programming」
(CTMCP:コンピュータプログラミングの概念・技法・モデル)で複数の
計算モデルが解説されているが、一般にオブジェクト指向と呼ばれている言語は、”状態”
を内部に持って、書き換え(副作用を起こし)ながら処理を進めるモデル。

関数型と呼ばれる言語の多くは、数学での集合・写像がベースになったモデル。
従って、処理の大部分を副作用ではなく、集合への写像(関数適用と思っていい)で出来る。

相性というより、計算モデルが全く違うので、混在は非効率。
なお、CTMCPには他のモデルも解説されている。

206 :デフォルトの名無しさん:2011/10/27(木) 20:28:15.59
質問ですが、(progn (setq x 0) (dotimon (i 10) (setq x (add x i))))
のxはこのまま活用するのですか?
 LISP触って日が浅いのでまだ分かりづらくて…

207 :201:2011/10/27(木) 20:51:23.53
>>205
ありがとうございます。
確かに狭義の定義では相容れませんね。
JavaやC++でラムダ計算は出来そうにもありませんし、
Haskellでは代入自体が不可能ですし。

208 :デフォルトの名無しさん:2011/10/27(木) 20:54:20.61
>>206
「xはこのまま活用する」とはどういう意味でですか?

209 :デフォルトの名無しさん:2011/10/27(木) 21:16:05.58
>>208
すみません、少し読み返してみたらsetqでxは0に定義されていました・・・orz
 少し落ち着いてから勉強しなおします。

210 :デフォルトの名無しさん:2011/10/27(木) 21:21:24.93
209の者で一応206をまとめると、「xをそのまま引数としていいのか」という文意でした。
 

211 :デフォルトの名無しさん:2011/10/27(木) 23:10:17.78
何にも束縛されていない変数xを引数にした式(add x i)を評価するとまずいんじゃね,
と思ったけど直前に(setq x 0)があるから束縛されてた,問題なかった,という意味?

212 :デフォルトの名無しさん:2011/10/27(木) 23:46:20.82
scala 触ってみて、クラスベースOO と関数型は相性良くないなあと思った。
不必要に複雑になりがちで。

213 :デフォルトの名無しさん:2011/10/28(金) 00:49:20.17
物と状態のシミュレーションじゃなくて、やり取りするインターフェース指向というか型や取り決めのためにOOは使うものなんだよっていう人もいるな。

clojureの宣伝文句は、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使ってみようかな。

214 :デフォルトの名無しさん:2011/10/28(金) 06:22:21.58
インターフェースって観点なら
個人的にはHaskellの型と型クラスの扱いが
一番綺麗に整理されてていいと思う

215 :デフォルトの名無しさん:2011/10/28(金) 10:53:54.69
型クラス便利なんだけど、副作用とあんま相性が良くない、
みたいなことをOCamlの人が書いてた気がする。

216 :デフォルトの名無しさん:2011/10/28(金) 15:05:25.95
clojureのdeftype/protocolもhaskellの型クラスに近い感じだね。
データ型と振る舞いの分離、データ型の継承なし、など。

217 :デフォルトの名無しさん:2011/10/29(土) 06:37:12.03
(defun 5jou (x)
(let ((x2 0) (x3 0))
(setq x2 (2jou x))
(setq x3 (* x2 x))
(* x2 x3)))
5JOU
が理解できません。どなたか簡単に説明をお願いいたします。


218 :デフォルトの名無しさん:2011/10/29(土) 08:28:04.20
>>217
酷い関数名だなw
2乗する関数2jouってのがどこかに定義されてて、
xを5乗するってのを 2乗掛け(2乗掛け1乗)で実行してるだけだと思う。

ただ普通はそんな酷い書きかたしないよ。何の例?

219 :デフォルトの名無しさん:2011/10/29(土) 08:50:47.56
(defun 9jou-lover ()
(destroy 'war-freak))

(crazyp 9jou-lover)
t


220 :デフォルトの名無しさん: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


221 :デフォルトの名無しさん:2011/10/29(土) 09:49:42.36
>218
ある入門書です。

222 :デフォルトの名無しさん:2011/10/29(土) 09:55:29.50
>>220
ありがとうございました。

223 :デフォルトの名無しさん:2011/10/29(土) 10:29:38.69
関数型4つの特徴とλ計算かな

224 :デフォルトの名無しさん:2011/10/29(土) 10:52:42.97
こんな短い関数に setq 使っているのが凄く気持ち悪いな

(defun 5jou (x)
(let ((x2 (2jou x)))
(let ((x3 (* x2 x)))
(* x2 x3))))


225 :デフォルトの名無しさん:2011/10/29(土) 11:14:37.94
ダメな例として挙げているのかも知れんな

226 :デフォルトの名無しさん:2011/10/29(土) 12:36:07.35
(defun 5jyou (x)
(* x x x x x))

227 :デフォルトの名無しさん:2011/10/29(土) 14:10:16.47
もしもその本の中で悪例として取り上げていないのであれば
すぐに窓から投げ捨てたほうがいいレベル

変数名にx1,x2,...とかつけちゃう本は大抵ダメ
学生が作ってくるプログラムでたまにこういうのあるよね
全ての関数名がf1,f2,...で変数名がx1,x2,...

228 :デフォルトの名無しさん:2011/10/29(土) 14:12:01.20






          _____
  .ni 7    /        \  ご冥福をお祈りします
l^l | | l ,/) / /・\  /・\ \    .n
', U ! レ' / |    ̄ ̄    ̄ ̄  |  l^l.| | /)
/    〈  |    (_人_)    |  | U レ'//)
     ヽっ     \   |    /   ノ    /
 /´ ̄ ̄ ノ     \_|    \rニ    |
                      `ヽ   l







229 :デフォルトの名無しさん: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))))))

230 :デフォルトの名無しさん:2011/10/29(土) 14:15:36.49
処理系のソースの中にも, 結構見掛けられる
(flet ((hoge (....
とか(実際には frob とかだが)...

いいんじゃねぇの名前なんてどうでも....


231 :デフォルトの名無しさん:2011/10/29(土) 14:16:11.42
x-val は必要なかった。画竜点睛を欠いちまったぜ!!

232 :デフォルトの名無しさん:2011/10/29(土) 14:32:35.97
ソースを後で見なおした時にすぐにわかるように
しておかないと、手直しする気すら起こらんぞ。

233 :デフォルトの名無しさん:2011/10/29(土) 14:41:42.31
>>230
名前は大事でしょ。
例えば関数の名前付けに困るときは、
処理をまとめる粒度がおかしかったり、
別個の処理をまとめてやっちゃってることが多い。

234 :デフォルトの名無しさん:2011/10/29(土) 16:33:59.96
命名規則さえ一貫してれば名前なんて何でも良い

235 :デフォルトの名無しさん:2011/10/29(土) 16:43:56.57
コンパイラでGNU CLISP使ってんのだけど、
読み込みが一瞬で終わってデバックするところが分からないから
CLISP使っている人でどうしたらいいか分かる人いない?

236 :デフォルトの名無しさん:2011/10/29(土) 17:02:39.29
たとえ命名規則が"f+数字"でも、一貫してればそれでいいのか。
すげーけどあまり関わりたくないな

237 :デフォルトの名無しさん:2011/10/29(土) 17:03:58.19
>>235
読み込み速度とデバッグの関係がわからない。なにをどうしたいんだ?

238 :デフォルトの名無しさん:2011/10/29(土) 17:11:13.44
>>237
俺の作ったデータを読み込む
    ↓
エラーがあるから無論エラー文が返される
    ↓
しかし速すぎ見えないワロタwww
みたいな流れ。

239 :SCHEME餃子 ◆8X2XSCHEME :2011/10/29(土) 17:23:00.81
>>238
コンソールが閉じるってこと?
それともエラーの量が多すぎて流れちゃうってこと?

240 :デフォルトの名無しさん:2011/10/29(土) 17:23:28.68
>>236
それって gensym みたいだ
lispや関数型言語で悩むのは関数の名前だというのは避けられないな。
特に、英語のボキャブラリの足りなさと前置詞の使い方の理解不足が
日本人にとって鬼門だと思ってるよ。

241 :デフォルトの名無しさん:2011/10/29(土) 17:26:48.12
common lispにはtraceやstepがあるから、それを意識した関数の作り方
をすれば混乱するところはずいぶん減るよ。
意識してプログラミングしてみな。けっしてdefunの中身をでかくするんじゃないぞ


242 :デフォルトの名無しさん:2011/10/29(土) 17:32:22.33
小分けした関数でいいから、最適化をするときにインライン化もできるしね。
だから、1つの関数に5行で収まることを意識した作りをしてみればいい。
condやcase/ifを使うと大きくなりがちだけど、条件のところを上手に
関数化すると関数の膨らみは抑えられるし、デバッグもあとで楽になる。
traceを使うときも条件分けした所でどこに富んだかは一目瞭然になるしね。
手続きグセなのか関数の中にオールインワンの方向に作っちゃう人はいるけど
あれは、デバッグで悩むことになるからやめたほうがいいよ。
優れたlisperのソースでも長いものはあるけど(macroでmacroや関数をまとめて
作るような場合は特にね。)最初は小分けから、最適化するに連れて色々変える
ことを意識してったほうが効率はいい。

243 :デフォルトの名無しさん:2011/10/29(土) 17:32:29.26
>>238
前者で合ってる

244 :デフォルトの名無しさん:2011/10/29(土) 17:37:04.27
確か、初めて本の中でletが登場した辺りだったと思う
S式眺めてると関数なんだかシンボルなんだかわからなくなる
ってなってた頃はx1とか変数然としてて読みやすかった記憶がある

245 :SCHEME餃子 ◆8X2XSCHEME :2011/10/29(土) 17:40:07.18
>>238
普通は Emacs と繋げるだろう jk

246 :デフォルトの名無しさん:2011/10/29(土) 18:37:19.17
>>238
なにが速いんだ? >>239 の推測どーりなら、
コンソールが閉じる => コマンドプロンプトから起動すれば?
文字が流れちゃう => エラーでたら止まるようにプログラムしとけば?
という感想。状況がいまいちわからん。

247 :デフォルトの名無しさん:2011/10/29(土) 21:39:37.13
SLIME経由で使わないCommon Lispとかマジ罰ゲームだろ。
開発効率が十倍以上変わってくるぞ。

248 :デフォルトの名無しさん:2011/10/29(土) 21:44:27.07
>>247
その昔 グレアムはviでclispを・・・
ということがあったようだ。slimeがあまりにもいいからな。
いまはslimvというvimのものがあるが。

249 :238:2011/10/29(土) 21:51:03.24
>>245,246,247
サンクス、いろいろ試してみる

250 :デフォルトの名無しさん:2011/10/29(土) 21:55:13.75
GNU CLISPってことはwindowsかな?
だとすると、slime+clisp がついてくるlispcabinetが
おすすめ
インストールするだけで環境が整うよ

251 :SCHEME餃子 ◆8X2XSCHEME :2011/10/29(土) 22:01:13.63
Lisp は言語としては (今となっては相対的に) それほど複雑とも難しいとも言えないし、日常的なスクリプトを書くのにも使えるけれど、
実質的には実用的な開発環境が Emacs か Vi しかないっつーのは環境をととのえるとこからめんどくさくて初心者にはハードルが高いよな。
Lispbox 使えよ。

252 :SCHEME餃子 ◆8X2XSCHEME :2011/10/29(土) 22:02:08.85
最近は lispcabinet なんてのもあるのか。
導入の楽さでは Lispbox よりも上っぽいな。

253 :デフォルトの名無しさん:2011/10/29(土) 22:02:45.70
Slimv - SLIME for Vim - YouTube
http://www.youtube.com/watch?v=dSofx9hur1Q

見てみたけど面白いね。vimでここまで出来るなら、使い勝手がよさそう

254 :デフォルトの名無しさん:2011/10/29(土) 22:16:23.99
quicklispのことまで考えたらcabinetのほうがいいけどな。
そもそもwindowsで関数型言語をやる環境は整えるのが大変だわ。
msのところに本拠があるはずのhaskellだってlinuxのほうが扱いやすい。
windowsはさっさと捨てて、linuxを使ったほうが変な悩みは減るよ。

255 :デフォルトの名無しさん:2011/10/29(土) 22:18:37.60
Vimとか、Vimスクリプトの時点でお帰り下さいって感じだわ。
Emacs Lispも大概だけど、曲がりなりにもLispだからまだマシ。

という煽りはさておき、LispboxとかLisp Cabinetとかって、
Emacsに薄い皮を被せただけだから、トラブルとか起きると、
結局Emacsの深い所に突っ込んで行かないといけなくて、
そんなにありがたくないんだよね。インストールが楽なだけで。

RacketみたいにIDEも付けてくれると、住み分けできると思うんだけど、
そっちの方向に期待できるのは商用かCCLくらいしかない。

256 :デフォルトの名無しさん:2011/10/29(土) 22:42:10.35
emacsをもっとwindowsフレンドリーに改変してくれればいいんだろうけど
(環境設定のあたりとか)
現状で満足する人が大多数だから、そうはならないだろうね
dual bootできない環境ならvirtual machine 経由でlinuxを動かすのが現実的な案か

257 :デフォルトの名無しさん:2011/10/30(日) 03:39:26.35
>>253
綺麗にまとまっているように見えるけど、モードのあるviでREPLって操作性があんまり想像できんわ
上のウィンドウで直接入力してEvalしたりとかもできるんだろうか?

Clojureつかったjettyサーバがトラブった時にemacs入れなくても現場デバッグできるからうれしいんだが。


258 :デフォルトの名無しさん:2011/10/30(日) 03:48:29.45
>>257
Ctrl-Wwでウインドウを移動して、モードを変える 書き込みはファイルをいじる時と同じ。
Clojureも対応してるし、実はClojureように細工して使ってる。笑

259 :デフォルトの名無しさん:2011/10/30(日) 12:46:20.68
windowsでもvmware playerでlinuxを別窓にして使ったほうが精神衛生上はるかにいい

260 :デフォルトの名無しさん:2011/10/30(日) 19:11:51.71
最近はもうVMware使ってないわ
VirtualBoxかqemuで充分だし

261 :デフォルトの名無しさん:2011/10/30(日) 19:22:19.92
Vimはモードがあると言ったって、モード毎にキーマップがあるから
挿入モードのキーマップで普通は入力しないようなキーに
評価コマンドを割り当てればいいんじゃね

Emacsのsexpと同じような「括弧の釣り合いが取れる」範囲指定も標準装備してるし
(範囲と操作を直交するものとして定義しているから
範囲を受け付けるように操作を定義すればどんな範囲指定とも組み合わせられる。
逆に新しい範囲を定義すれば範囲を受け付けるどんな操作とも組み合わせられる)

262 :デフォルトの名無しさん:2011/10/31(月) 08:17:52.34
おすすめの入門書てありますか?

263 :デフォルトの名無しさん:2011/10/31(月) 10:07:16.39
とりあえずANSI Common Lispじゃね?
実践Common LispもWebアプリとか現代的な例があっていいと思う

それはそうとだれかLand of Lisp読んでみた奴いない?
http://landoflisp.com/
なんだか楽しそうなんだがwww

264 :デフォルトの名無しさん:2011/10/31(月) 13:29:29.19
>>262
絶版だけど、すごい!Lisp


265 :デフォルトの名無しさん:2011/10/31(月) 13:30:05.90
あれ、これがLispだ!だったっけ。。。


266 :デフォルトの名無しさん:2011/10/31(月) 16:55:51.20
まさに!Lisp!

267 :デフォルトの名無しさん:2011/10/31(月) 19:15:09.27
>>263
あのイラスト一杯は行ってるけど普通にLispの本だったよ


268 :デフォルトの名無しさん:2011/10/31(月) 20:45:21.07
>>263
かなり良い本だから、そのうち邦訳されると思ってる。
小学校の指定教科書にしたいくらいだ。

269 :デフォルトの名無しさん:2011/10/31(月) 21:00:47.07
出版社も あのシリーズ(manga guide)を扱ってる関係で
押さえられててもおかしくないもんな。

270 :デフォルトの名無しさん:2011/10/31(月) 22:10:31.57
プログラミング初心者にお勧めのLisp入門書ありますか?

271 :デフォルトの名無しさん:2011/10/31(月) 22:34:19.71
little schemerのシリーズでいいんちゃう?

272 :デフォルトの名無しさん:2011/10/31(月) 23:42:40.19
The Common Lisp Cookbook - Using the Win32 API
http://cl-cookbook.sourceforge.net/win32.html

このページの初めのサンプルスクリプトが動かないのですが
(lispworks personal edition version 6.0)
どう改変すれば動くようになるのでしょうか

273 :デフォルトの名無しさん:2011/10/31(月) 23:45:37.76
scheme手習いシリーズは初心者が手にとるもんじゃない、Gauche本がいいって結論じゃなかったっけ。

274 :デフォルトの名無しさん:2011/10/31(月) 23:50:05.14
Gauche本をプログラミング初心者に勧める奴がいたら神経疑う。悪いけど

275 :デフォルトの名無しさん:2011/11/01(火) 00:01:18.48
とりあえずいろいろ厚手だしネット上で読めるし、いいんじゃね?
神経疑ってるひとの補足があればさらにいいが。


276 :デフォルトの名無しさん:2011/11/01(火) 00:19:57.98
common lisp 入門
http://www.geocities.jp/m_hiroi/xyzzy_lisp.html#abclisp
このぐらいの分量でちょうど良い

277 :デフォルトの名無しさん:2011/11/01(火) 00:23:37.47
>>275
まえがきの「対象読者」から引用

> 本書は、GaucheやSchemeについてはよく知らないけれど、他の
> プログラミング言語でなら開発経験があるという読者を
> 主な対象にします。

ずぶの素人に独習で読ませたらEmacs導入のところで放りなげるよ

278 :デフォルトの名無しさん:2011/11/01(火) 00:28:07.94
そう言う意味じゃemacs Lispの入門書がプログラミング自体が初心者という人には良いのかもな


279 :デフォルトの名無しさん:2011/11/01(火) 00:46:15.74
>>272
エラーメッセージ詳しく。


280 :デフォルトの名無しさん:2011/11/01(火) 00:47:09.38
そうなるのか

281 :デフォルトの名無しさん:2011/11/01(火) 00:50:52.09
>>279
CL-USER 1 > (require "win-header")

Error: Unknown module "win-header".
1 (abort) Return to level 0.
2 Return to top loop level 0.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

これです

282 :デフォルトの名無しさん:2011/11/01(火) 00:59:15.38
俺はグレアムのansi common lispで勉強したけど。あれで十分だった。
ただ、anti-loopistだからそのへんは理解しておいていいかも。
俺はいまだにloopは嫌いなくらい。

283 :デフォルトの名無しさん:2011/11/01(火) 01:24:00.78
>>281
LispWorks自体にはwin-headerなるモジュールは付属してない。
だから、"Unknown module"って言われてる。LispWorksのドキュメントにも、
Windows APIはサポートしてないから、自分でFLI使って定義してね、って書いてるし。

多分、そこのページにある、Appendix Aをwin-header.lispとか名付けてrequireして、
さらにdefpackageでwhを定義する必要がある。不完全なコードなので、即投げ捨てて良い。

こっちを読むべき。

http://www.lispworks.com/documentation/lw60/FLI/html/fli.htm

284 :デフォルトの名無しさん:2011/11/01(火) 01:29:34.27
>>283
なるほど、そういうことですか。
紹介して下さったfliのページを読んでみます
ありがとうございます

285 :デフォルトの名無しさん:2011/11/01(火) 01:40:38.22
Windows APIを直叩きしたいなら、Clozure CLが楽だと思う。
examplesのmswin.lispにウィンドウを表示するサンプルがある。

あとは、Doorsっていうライブラリが複数の処理系に対応してるけど、
ドキュメントないし、Quicklispにも収録されてないので、
ASDF知らないとインストールで引っ掛かるかも。

https://github.com/Lovesan/doors

286 :デフォルトの名無しさん:2011/11/01(火) 01:56:11.75
>>273
ごめん^^; 手習いシリーズは 詰将棋や 一人チェスの入門問題集みたいだったな。

287 :デフォルトの名無しさん:2011/11/01(火) 07:50:41.67
Little Schemer に一票 >> 初心者向け

しかも和訳でなく、原書の方。

英語版で読むと幼稚園児でも出来そうに見えるのに、
日本語版で読むと同じ内容でも小難しく感じる不思議。

288 :デフォルトの名無しさん:2011/11/01(火) 10:49:20.43
>>267>>268
そうかありがとう
どうしよっかな、買っちゃおうかな

289 :デフォルトの名無しさん:2011/11/01(火) 12:40:20.45
>>288
8章のサンプルは公開されてるから、それを読んでみて理解できるか確認すればよい。
平素な英語で書かれているので、初めての洋書としても向いてると思うけどね。

290 :デフォルトの名無しさん:2011/11/01(火) 13:33:19.95
英語でのある人のおすすめってこうらしい
http://carcaddar.blogspot.com/2011/10/common-lisp-is-best-language-to-learn.html
Between Land of Lisp, David Touretzky's Common Lisp: A Gentle Introduction to
Symbolic Computation (really great book for people new to programming,
available for free) and The Little LISPer (3rd edition, editions four and up
use Scheme) you have three really great resources to get started.

David Touretzkyの本はすでに絶版になっててオンラインでPDFで著者が公開してるくらい
しかない。金がなくて始めたいという人ならいいかもしれない。

291 :ミサワ:2011/11/01(火) 14:34:15.10
つれー 日本語訳が小難しいからつれーわー 日本語訳が小難しいからなー

292 :デフォルトの名無しさん:2011/11/01(火) 19:11:45.82
金がない場合は知恵がいる
知恵がない場合は金がいる

293 :初心者:2011/11/02(水) 02:28:47.09
レスさんくすです。

CLスレだけど、プログラミング初心者向けはschemeがいいみたいですね。

LispSchemeスレの過去ログみたらSCHEME餃子さんが、Gauche本、プログラミング言語 SCHEMEの後に
手習いシリーズ勧めてたみたいだけど、これはscheme初心者向けであってプログラミング初心者向け
の場合は逆になるって事ですね。

まずは>>276のサイトでCL勉強してみます。ありがとうございました。

294 :デフォルトの名無しさん:2011/11/02(水) 19:54:50.09
schemeならSICPは外せないだろ
英語版はWebで無料公開されてるし

295 :デフォルトの名無しさん:2011/11/02(水) 20:13:37.48
SICPはSchmeの勉強のためには書かれていない

たいして勉強しないでもSchemeを使えるような奴のために書かれている

296 :デフォルトの名無しさん:2011/11/03(木) 02:26:32.03
windowsでecl-11.1.1を使っています。
Unicodeが使えるそうなので、ためしに"あ"を表示するスタンドアロンのプログラムを作っています。
REPLでは以下の通り実行することで、"あ"を表示することができました。

> (setf (stream-external-format *standard-output*) :cp932)
> (write-char #\U3042)

しかし、これをそのままコンパイルしてもうまく動きません。
どうすればできるか教えてください。
あと、"#\U3042"ではなく"#\あ"と書いても動かせる方法があればそれも教えてください。

297 :デフォルトの名無しさん:2011/11/03(木) 04:18:23.74
どのように上手く動かないか、情報が足りないから何とも言えない。
多分、コンパイル後コンソールで実行したら文字化け、ってパターンだと思うけど。

ECLってexternal formatのサポートが不完全だったと思うんだけど、それは直ったの?
リファレンスマニュアルの"13.2. Input/Output model"の部分。

> - No support for external formats. Reading and writing is performed using the 8-bit code of the character.
> - No support for Unicode characters. The code of large characters is simply truncated.

これが直ってないなら、利用するエンコーディングのバイト列に自分で変換して、
write-sequenceとかで出力しないといけないけど。

とりあえず、コンソールで動かしたときのexternal formatの値をprintするとか、
出力されたデータを16進表示してどのエンコーディングか判断したりとか、
問題の切り分けから始めてみるのを勧める。

298 :296:2011/11/03(木) 15:57:48.85
external formatのサポートについては知りませんでした。
気長にやってみます。
ありがとうございました。

299 :デフォルトの名無しさん:2011/11/03(木) 23:30:38.58
ECLを使ってるのがコンパクトな実行形式を作るためなら、
SBCLに移行して、圧縮したコアイメージで実行形式を作るっていう手もあるよ。
SBCLならその辺りのサポートはきちんとしてるし、圧縮率も割と良いみたい。

300 :デフォルトの名無しさん:2011/11/05(土) 09:40:41.36
ポールグラハムの話で時折出てくるロバートモリスって、
sendmailワームの人?

301 :デフォルトの名無しさん:2011/11/05(土) 09:57:12.99
そうだよ。

モリスがその事故起こした時に相談受けていろいろ動いたりした「友人」ってのがポールグレアム。

302 :デフォルトの名無しさん:2011/11/05(土) 11:45:26.42
そうなんだ
ありがとう

303 :デフォルトの名無しさん:2011/11/05(土) 15:12:25.63
うちのVAX11感染したの思い出した


304 :デフォルトの名無しさん:2011/11/06(日) 12:47:58.86
>>303
おっさん乙

305 :デフォルトの名無しさん:2011/11/06(日) 13:10:18.71
マクロをapplyするにはどうしたらいいんでしょうか
こんな感じのことがしたいんですが。
(let((a '(true 1 2)))(apply if a))


306 :デフォルトの名無しさん:2011/11/06(日) 13:33:18.66
(let ((a '(true 1 2))) (eval `(if ,@a)))

307 :デフォルトの名無しさん:2011/11/06(日) 19:24:21.74
そういう風にevalを使うのは、某文書の言う所のレッドフラッグってヤツだと思う。
実行時にメタプログラミングをしてたりするなら話は別だけど。

質問自体が最初に結論ありきな感じだけど、>>305は本当にifをapplyしないといけないの?
実はifの上に単純なマクロを構築すれば良い話だったりしないかな。

308 :デフォルトの名無しさん:2011/11/06(日) 21:39:17.26
>>305
CLHSみるとifはoperatorであって、どんな実装になってるか規定されてないわけだが
なぜifがマクロだって思ったんだ?


309 :デフォルトの名無しさん:2011/11/07(月) 18:13:10.80
まさにこの話だと思う

apply-macroの話
ttp://e-arrows.sakura.ne.jp/2010/12/common-lisp-apply-macro.html

310 :デフォルトの名無しさん:2011/11/07(月) 18:34:52.87
関数とマクロとスペシャルフォーム
Lisp で一番ややこしい部分だと個人的に思っている。

311 :デフォルトの名無しさん:2011/11/07(月) 18:37:18.98
マクロあるいは特殊形式のapplyてどういときに嬉しいんだろ

312 :デフォルトの名無しさん:2011/11/07(月) 22:45:04.56
関数・マクロ・special operator の区別がついてないときに嬉しい

…と、昔の自分を思い出してそう思った。
ややこしい部分ではないんだけど落とし穴になりそうな概念だとは思う。


313 :デフォルトの名無しさん:2011/11/14(月) 08:17:17.68
Lisp中級ぐらいになるには
だいたいどの位の期間が必要ですか?

314 :デフォルトの名無しさん:2011/11/14(月) 08:41:17.56
計算機科学の素養があれば一ヶ月もあれば中級Lisperになれると思うけど、
プログラミング経験ゼロからのスタートなら数年はかかると思う。

315 :デフォルトの名無しさん:2011/11/14(月) 11:14:44.24
>>313のいう初級中級上級の定義はわからないけど、shiroさんところに”ネタ”として
10段階に分けたページがあったな。

316 :デフォルトの名無しさん:2011/11/17(木) 22:47:48.09
普段大学でcommon lispを習っていて、emacsでslimeを起動して勉強しています。
自宅でもやりたいなと思い、ubuntu11.10を導入してemacs23とslimeをインストールして
起動まではできました。

そこで大学で書いたプログラムをロードしようとしたら、
The value 1985828 is not of type (MOD 1114112).
[Condition of type TYPE-ERROR]
このようなエラーが出たのですがどういうことでしょうか?
大学では何も問題なく、動いてたプログラムです。
色々調べて見たのですが解決法がわかりません。
どなたか回答よろしくお願いします。

317 :デフォルトの名無しさん:2011/11/18(金) 00:01:03.56
>>316
大学の処理系は64ビットで、自宅の処理系が32ビットだったりしない?

http://www.lispworks.com/documentation/HyperSpec/Body/t_mod.htm

を読んでもらうと分かると思うけど、1114112より小さい正の整数しか許されない型に、
1985828を値として渡してエラーになってる。コードが変わっていないなら、
処理系やOSなどが原因で、リミットに引っかかっている可能性が高い。

とりあえず、SLIMEなら下にスタックトレースが出ると思うんだけど、
上から10個くらいはどうなってる? どっかで見た数なんだけど、思い出せない。

318 :デフォルトの名無しさん:2011/11/18(金) 00:04:47.80
ああ、分かった。Unicodeだ。#x110000。

ファイルやネットワーク通信のデータとかに、適切じゃないデータが入ってるとか、
code-charに変なデータ渡してるとか、external formatの設定が適正じゃないとか、
その変はどう?

319 :デフォルトの名無しさん:2011/11/18(金) 00:13:08.90
>>317
大学も自宅も32bitマシンです。

適切じゃないデータは入ってない・・・と思います。
code-charやexternal formatについてはよく分かりません。
すみません・・・。

320 :デフォルトの名無しさん:2011/11/18(金) 00:21:06.60
>>319
とりあえず、処理系の名前は?

それと、エラーが出たとき、「Restarts:」の下に「Backtrace:」ってのがあって、
そこに番号振ったS式が出て来るよね? それの0〜10くらいまで晒してくれない?
それによって、どういうコードでエラーが発生してるのか分かる。

10まで表示されてないよ、って場合は「--more--」までカーソル持ってくと、
次のが出て来る。

321 :デフォルトの名無しさん:2011/11/18(金) 00:24:04.98
>>320

処理系はどちらもSBCLです。

Backtrace:
0: (SB-KERNEL::OBJECT-NOT-TYPE-ERROR-HANDLER ..)
Locals:
SB-DEBUG::ARG-0 = :<NOT-AVAILABLE>
SB-DEBUG::ARG-1 = #.(SB-SYS:INT-SAP #XB5E0E470)
SB-DEBUG::ARG-2 = #<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #XB5E0E12C :TYPE (* ..)>
SB-DEBUG::ARG-3 = (399 16)
1: (SB-KERNEL:INTERNAL-ERROR #.(SB-SYS:INT-SAP #XB5E0E12C) #<unavailable argument>)
Locals:
SB-DEBUG::ARG-0 = #.(SB-SYS:INT-SAP #XB5E0E12C)
SB-DEBUG::ARG-1 = :<NOT-AVAILABLE>
2: ("foreign function: call_into_lisp")
[No Locals]

Backtraceにはこれしか書いていません。


322 :デフォルトの名無しさん:2011/11/18(金) 00:29:01.94
SBCLのFFI APIでエラーが起きてる。FFI使ってる?
Cのライブラリのバインディングか何か?
コードを晒すことって可能? エラーが起きる場所が把握できてるなら、
そこだけでも良い。

323 :デフォルトの名無しさん:2011/11/18(金) 00:35:36.75
>>322

FFIとはなんでしょうか?
コードは800行あるので全部は晒せません。
またエラーが起きてる場所も自分では把握できてないです。
何もわかってなくてすみません。

324 :デフォルトの名無しさん:2011/11/18(金) 00:47:26.79
>>323
Foreign Function Interface。LispからCの関数を呼んだりする仕組み。
分からないのは最初はみんなそうだから気にせんで良いよー。

単にコードの大きさが問題で貼れないなら、

http://paste.lisp.org/

とかGist(https://gist.github.com/)でも大丈夫。

エラーが起きてる場所は普通バックトレース(スタックトレース)とかで把握するけど、
それで分からないなら、(print "function-xx: in")みたいなのを関数の最初に追加しても良い。

実行はどういう風にしてるの? C-c C-c? C-c C-e? それとも*slime-repl sbcl*から?

325 :デフォルトの名無しさん:2011/11/18(金) 00:56:05.59
FFIというは多分使ってないと思います。
コードはこれで見れるでしょうか?
https://gist.github.com/1373494

実行は
emacs開く
M-x slimeでslime起動
C-c C-lで上のコードをロードする。
するとロード中に当初のエラーが起きます。

326 :デフォルトの名無しさん:2011/11/18(金) 01:03:32.25
>>325
こっち(Windows XP SP3、SBCL 1.0.52)で評価したけど、普通に通るコード。

原因が分かった気がする。保存したファイルの文字コードがEUC-JPじゃない?
EmacsでC-x RET fして、utf-8-unix指定した後で保存して、再度ロードするとどうなる?

327 :デフォルトの名無しさん:2011/11/18(金) 01:10:33.26
>>326
できました!!
ありがとうございます!
ファイルの文字コードが大学と自宅じゃ違ったということでしょうか?
これは自動で変換してくれたりはしないのでしょうか?
毎回指定して保存しなければならないのでしょうか?

328 :デフォルトの名無しさん:2011/11/18(金) 01:15:38.92
>>327
おめでとう。お疲れ様。

ファイル自体のエンコーディングが大学と自宅で違ったか、
処理系の標準のエンコーディングの設定が大学と自宅で違ったかだと思う。

sb-impl::*default-external-format*を.sbclrcで設定したり、
slime-net-coding-systemを.emacsで設定したりすることで、
自分の普段使ってるエンコーディングを標準で使うことができるよー。
これらのキーワードでグーグル先生に尋ねれば、色々出てくると思う。


329 :デフォルトの名無しさん:2011/11/18(金) 01:21:37.56
>>327
本当にありがとうございました。

エンコーディングについては自分で調べて努力してみます。

330 :デフォルトの名無しさん:2011/11/18(金) 17:23:12.67
dig 2ch.net | grep 2ch | tail -n 1 > get.dat
cat get.dat
2ch.net. 8 IN A 206.223.154.230

このget.datを読み込んでリスト化ってどうやりますか?

331 :デフォルトの名無しさん:2011/11/19(土) 00:10:57.50
>>329
ソースの一行目に";; -*- coding:utf-8-unix -*-"とかコメント行を入れるといいかも。

332 :デフォルトの名無しさん:2011/11/19(土) 00:27:26.94
SBCLもそれ解釈してくれるの?


333 :デフォルトの名無しさん:2011/11/19(土) 00:40:17.53
>>330
(with-open-file (s "get.dat")
(mapcar (lambda (x)
(ppcre:split "\\s+" x))
(loop for l = (read-line s nil) while l collect l)))
;=> (("2ch.net." "8" "IN" "A" "206.223.154.230"))


334 :デフォルトの名無しさん:2011/11/19(土) 01:36:27.02
>>333
ありがとうございます。lambdaとmapcarってこうやって使うんですね。

335 :デフォルトの名無しさん:2011/11/19(土) 02:12:07.73
(cadddr (with-open-file (s "get.dat")
(mapcar (lambda (x)
(ppcre:split "\\s+" x))
(loop for l = (read-line s nil) while l collect l))))
引き出せないのはなんで?
(cadddr (loop for x from 1 to 10
collect (loop for y from 1 to x
collect y) ))
;;=> (1 2 3 4)

336 :デフォルトの名無しさん:2011/11/19(土) 06:48:52.64
おはよう。1要素しかないのにcdrのcdrのcdrのcarを参照してるから。
(("2ch.net." "8" "IN" "A" "206.223.154.230"))のcdrはnil。
nilのcdrはnilで、そのcdrもnil。nilのcarはnil。

(defparameter *lines*
(with-open-file (s "get.dat")
(loop for l = (read-line s nil)
while l collect (ppcre:split "\\s+" l))))

(caar *lines*)
;=> "2ch.net."
(cadar *lines*)
;=> "8"

普通は頭が混乱するので、firstやsecond、eltなどを使う。

(let ((first-line (car *lines*)))
(values (first first-line) (second first-line)))
;=> "2ch.net.", "8"

(let ((first-line (car *lines*)))
(values (elt first-line 0) (elt first-line 1)))
;=> "2ch.net.", "8"

337 :デフォルトの名無しさん:2011/11/19(土) 06:55:42.53
個人的な好みとしては、最初から要素の数が分かってるときは、構造化代入。

(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
;=> "2ch.net.", "8", "IN", "A", "206.223.154.230"


338 :デフォルトの名無しさん:2011/11/19(土) 08:03:06.33
>>336-338
おはようございます。詳しい解説ありかどうございます。
ボーっとしていたのか、二重被りだと気づきませんでした。listpでTが返って来たので頭の中が
混乱しました。一回carでむけばよかったんですね。first, second関数は知りませんでした。eltは
勉強した気がするけど忘れていました。
答えなくても良いんですが、多値を返す関数の多値をリスト化する方法ってどうやるんですか?
(list-fn
(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
)
==> ("2ch.net." "8" "IN" "A" "206.223.154.230") ;;という結果が欲しい
あと多値を返す関数を少ない or 多い多値にするのはどうやるんですか?
(low-values
(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
)
;=> "2ch.net.", "8", "206.223.154.230" ;;という結果が欲しい
(round 8 3)の二番目だけをformatで出力することもできるんでしょうか?
あとリストで弄った方が楽な気がするんですが、多値で返すのとリスト内で多値を返すのと違いって
なんかあるんですか?

339 :デフォルトの名無しさん:2011/11/19(土) 08:31:19.07
(multiple-value-list (values 0 1 2))
;=> (0 1 2)

;; 使わない部分は単に無視する
;; そのままだと警告が出るので、ignore宣言で使わないことを明示する
(multiple-value-bind (a b c d e) (values 0 1 2 3 4)
(declare (ignore b d))
(values a c e))
;=> 0, 2, 4

(multiple-value-bind (_ remainder) (round 8 3)
(declare (ignore _))
(format t "~a" remainder))
;-> -1

多値の利点は主に速度と最初の値以外を単に無視できること。
あるいは、足りない値を自動的にnilで埋めてくれること。
リストの方が多くの場合で柔軟だと感じるのは正しい。

;; リストだと一度分解しないといけない
(+ (truncate 1.5) 2) ;=> 3

;; 返ってきた値が足りない場合nilで束縛される
(multiple-value-bind (a b c) (values t)
(list a b c))
;=> (T NIL NIL)


340 :デフォルトの名無しさん:2011/11/19(土) 08:44:51.16
自己解決しました。
(multiple-value-bind
(i1 i2 i3 i4 i5)
(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
(list i1 i2 i3 i4 i5))
(multiple-value-bind
(i1 i2 i3 i4 i5)
(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
(values i1 i3 i5))
(multiple-value-bind
(q r)
(round 3)
(format nil "~s" r))
ttp://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp17.html

間に合いませんでしたか。さーせん。

341 :デフォルトの名無しさん:2011/11/19(土) 09:10:25.20
いや、自己解決してくれた方が良いから気にしないで。
こっちの復習にもなるし。

あと、使わない変数には警告が出ると思うんだけど、
(declare (ignore ...))とかで消しておいた方が良い。
そうしないと、本当に変数を使い忘れてるのを見落とす原因になるし、
コードを読む人への手助けになるという利点があるから。

そこのサイトは良い入門なので、参考にすると良いよー。


342 :デフォルトの名無しさん:2011/11/19(土) 10:45:32.41
>>341
スクリプトの使い捨てない度はピンキリですが、(declare (ignore ...))もそうですが、他の警告文もすぐに消していますか?
あとdocumentationも書き始めから積極的に書いてますか?

(defun f (x)
"compute f value"
...)
> (documentation 'f 'function)
"compute f value"

というか、(documentation 'documentation 'function)で引けばよかったのか。わざわざWebにアクセスしていたw

343 :デフォルトの名無しさん:2011/11/19(土) 13:03:56.48
>>342
人によりけりだと思うけど、再利用するコードなら自分は警告は可能な限り消す。
バグに発展したら嫌だし、重要な警告が埋もれるし。

docstringは仕様が固まるまでは書けない。最初のうちはどんどん構造も変わるし、
その都度書き直しとか面倒に思えて。ただ、目的が明確なものなら最初に書いてる。

(deftype octet ()
"An octet. An alias of (unsigned-byte 8)."
'(unsigned-byte 8))

みたいなのとか。

あと、SLIMEならC-c C-d dとかC-c C-d fとか、シンボルの上でやってみると幸せだと思う。

http://common-lisp.net/project/slime/doc/html/Documentation.html#Documentation


344 :デフォルトの名無しさん:2011/11/19(土) 18:45:39.05
>>343
回答、ありがとうございます。
今まで仕様が固まっていないという理由で警告文もないがしろしていました。今日まで警告文の消し方を
知りませんでしたが。職業プログラマでもないし、長い行のブログラムを書いたことがないので不遜なん
ですがdocstringはprovisional(y)という単語を独自略語でPRVと書いて0.5秒考えてざっくり書いていけば
良いんではないのかなとちょっと思いました。現実世界の法律文もそうですが形骸化しちゃうのは割り切る
しかないのかなと思います。PRVも10段階ぐらいのレベル機能つけてどの程度の完成度を明示する。あと
"Mon May 23 23:41:00 JST 2011"みたいなのを付加して、弄るごとに"Mon May 30 15:41:00 JST 2011"みたい
なのを追記して、弄った履歴と最終更新日時で昇順・降順で飛んでいける機能、最終更新日時で指定日時から
指定日時までを昇順・降順で飛べる機能、人に見せたくないメモドキュメント機能、ソースを人に渡す時は人に
見せたくないメモドキュメント・日時関連を除去できる機能があると10年後に読むハメになったときに便利で読む
コスト低減につながるのかなあ。
10年、20年単位で保守・管理する代替ツールってあるんでしょうかね。

ttp://ejje.weblio.jp/content/%E4%BB%AE

345 :デフォルトの名無しさん:2011/11/19(土) 20:48:04.55
頑張ってる所に水を差すようで悪いけど
どの行を誰がいつ編集したのかは最近のSCMを使っていれば(大抵はblameという名前のサブコマンドで)調べられる
あまり凝ったルールは時間が経つと守られなくなっていく
docstringに全ての情報を詰め込む必要もない、コメントで書けばいい
「これから変わるかもしれない」目印は英語だとTBD(to be doneなどの略。探せば他にも出てくるが、大抵は「まだ○○してない」の意味)とか
Subject to changeと書く場合が多いから、無意味に独自ルールを作らない方が良い

346 :デフォルトの名無しさん:2011/11/19(土) 20:58:08.36
docstringは、その関数、スロット、クラスを使う人のために書くもんで、
開発する人のためにあるわけじゃないから。

347 :デフォルトの名無しさん:2011/11/19(土) 21:23:13.20
>>346が大前提だねー。メタ情報とかの諸々は外部で管理した方が良いと思う。
docstringが長くなると、画面あたりの情報量が減って、可読性が大幅に下がるし。

10年、20年単位で保守・管理するためのツールがSCMやissue trackerとかで、
情報の管理もそちらで行うのが常識になってる。

最近はみんな、趣味のコードの管理にはGitHubかBitbucket使ってるよね。


348 :デフォルトの名無しさん:2011/11/19(土) 21:30:20.61
>>347
たいてい何変えたよだけで、結局「ソース読め!!!」じゃん


349 :デフォルトの名無しさん:2011/11/19(土) 21:39:08.23
ソースコード読んでない関数は使わない人キタ━(゚∀゚)━!

350 :デフォルトの名無しさん:2011/11/19(土) 22:13:01.27
だれ?

351 :デフォルトの名無しさん:2011/11/19(土) 22:18:29.20
>>348
issue trackerやSCMを絡めて、変更の背景とか議論の経過とか、
付加的な情報も集約して管理しましょうよ、という流れがある。
今まで紙の書類とか、担当のコンセンサスで管理してたようなの。
CVSとかChangeLogの時代から運用もツールも大分前進したと思う。

そっち関連のスレとか見れば色々話してるんじゃないかな。


352 :デフォルトの名無しさん:2011/11/19(土) 22:30:04.62
>>351
「声のでかいやつが勝」的、要素も多分にあるけどな


353 :デフォルトの名無しさん:2011/11/20(日) 16:53:43.60
prin1みたいに奇妙な関数名の由来についてまとめたページはありませんか
と質問する前にぐぐってみたら

http://groups.google.com/group/comp.lang.lisp/msg/2cdc4d3323d979d4
http://cadr.g.hatena.ne.jp/g000001/20080116/1200413261

354 :デフォルトの名無しさん:2011/11/20(日) 20:12:02.07
>>345
所詮は文字なんて記号でしょ。容易に置換可能にしておけば用語変更は楽でしょ。
他人に渡すときに除去が容易でしょ。あとこれぐらいで凝ったルールとか言い出す
人は何も守れないでしょ。
個人開発のちょうど良い版管理システムってないのかね。git, subversionにも移行が容易な。
>>346
人に見せる予定がなかったら何ヶ月後、何年後かの自分しかみないし、docstringの
超変態的な使い方から新しいアイデアも生まれるんじゃないの。他人に迷惑かけて
いないんだからダイナミックなオナニーするのは自由だよ。
>>347
123/foo.lisp, 234/foo.lisp, foo/foo1.lispとかもGitHubを使っているの?
復数人開発前提みたいでシステムとして大きいし、ツールとして使い辛そうなんだけど。

355 :デフォルトの名無しさん:2011/11/20(日) 21:37:30.72
>>353
直接は関係ないけど...

大昔はキャラクターの幅が6bitで, ワードマシンのワードサイズが6Nだった.
当時の大型機が採用していたワード=36bit[1]基準だと6キャラ以下のシンボル
なら1ワードに収まる.

ってな理由で, 古くからある関数は名前が短いんだそうだ

[1] IBM, ハネウェル, GE, DECのPDP6系列あたり


356 :デフォルトの名無しさん:2011/11/21(月) 03:39:04.72
>>354
実際にGitとかMercurial、Bazaarとかを使ってみたことはある?
使って問題を感じるなら良いけど、「使い辛そう」って思ってるだけなら、
試してからでも遅くないんじゃないかな。個人的な印象では、そう悪くない。

あと、単に管理が不要でad hocにディレクトリで分けて管理しているのか、
そういう手法しか知らないから、それが良い手法と信じてそうしているのか、
そういった違いは区別した方が、より良い判断ができると思う。

ついでに、これは余計なお世話かもしれないけど、先人の存在を忘れない方が良い。
Lispはこれまで多くの人に何十年も使われてきた言語で、数多くの研究がされてる。
そういう手法が定着してないという事実の意味を考えてみても良いかもしれない。

まあ、最終的には個人の趣味だから、好きな結論を選んで好きにすれば良いと思う。
>>345>>346も、興味があるようだったから、Lispなどの一般的な文化を紹介しただけで、
実際は君がどこで何をしてても何も言わないから、気にしないで大丈夫。

357 :デフォルトの名無しさん:2011/11/21(月) 10:56:24.05
CVSやSubversionは個人で使うには少しやり過ぎな印象が強いが
DVCSはpull/pushの時以外は元々自分のマシンに閉じたツール

GitHub・BitBucket・Launchpadなども個人で使って何か不都合があるわけじゃない
$HOME内の設定ファイルという、複数人でいじることは滅多にないデータを突っ込んでる人もあちこちにいる

変更の理由を変更点と関連付けてメモしておいて、後からログを参照して巻き戻せる
ちょっとしたバックアップツールくらいの気持ちで使ってみたらいい
無理強いはしないし、できないが

358 :デフォルトの名無しさん:2011/11/21(月) 14:30:57.79
.emacsや.vimrc/.vimの管理にかなり重宝してるけどな。git
hgも悪くはないけど。小回りはhgのほうが聞くかも。

359 :デフォルトの名無しさん:2011/11/21(月) 20:32:21.09
>>358
hg良いんだけどちょっとリポジトリがでかくなると重たい感じする(グラフィックとかも突っ込んでるからなんだけど)
gitが今のところ楽なんだが、Windowsで手も足も出なくなる事がある(多バイトコード含むファイル突っ込まれた時)
そういう所見でだとsvnはまだまだ行けると思ってる


360 :デフォルトの名無しさん:2011/11/21(月) 22:00:38.42
githubが使いやすそうなんだけど、OSSホスティングってこんなにあるんだな。急成長率で言うと
githubの伸びが良いの?
あと無料会員はソース等のムーディストビーチみたいなんだけど、こういうのが流行っているの?

ホスティングサービスを3つアカウント作ると思うんだけど、他におすすめありますか? BitBucket、Launchpad?
ttp://en.wikipedia.org/wiki/Comparison_of_open_source_software_hosting_facilities
ttp://ja.wikipedia.org/wiki/OSSホスティングサービスの比較

361 :デフォルトの名無しさん:2011/11/21(月) 22:41:28.73
lispのプログラムをどうやって保持というか管理すればいいかとは
確かに悩んでいる
といっても趣味でやっているプログラムだし、仰々しいことはできないけど
やっぱり分散システムなのかね

362 :デフォルトの名無しさん:2011/11/21(月) 22:53:09.21
>>361
gitはリポジトリを落としてインストール専門なんだけど、git自体で管理したことない
からわからないけど調べた感じだと、githubはローカルで管理してnfsマウントして
コピーするみたいな手軽にできるバージョン管理みたいだね。付加情報もつけられる
困ることはないようだ。Webにあげるとヌーディストビーチというのを意識していれば
それ以外は気にすることはないんじゃないかな。
自分はブログラムもそうだけどTeXで物書きもしたいから良いバージョン管理がないかなと
漠然と探していたけど、これがベストとは思わないけどかなりベターではあるのかな。

363 :デフォルトの名無しさん:2011/11/21(月) 23:07:23.06
>>362
>Webにあげるとヌーディストビーチ
そうか、完全にクローズドな環境ではないんだね
人様に見せるのは恥ずかしいから出来るだけ表に出したく無かったんだけど
利点の方が重要かも
利用する方向で考えてみます

364 :デフォルトの名無しさん:2011/11/21(月) 23:12:26.53
>>363
一番安いので5個のプライベートリポジトリ作れる
無料のはまぁヌーディスとビーチだけど


365 :デフォルトの名無しさん:2011/11/21(月) 23:13:24.05
>>363
うん 個人情報が絡むgitなどでのバックアップはxreaやsakuraを使ったほうが
いいよ。お金を出してでもね。xreaでgitやhgを扱うのは少々トリッキーなこと
が必要だけどな。

366 :デフォルトの名無しさん:2011/11/21(月) 23:14:56.25
UBC(カナダの太平洋岸の大学)の近くにヌーディストビーチがあるのを思い出したわ。

367 :デフォルトの名無しさん:2011/11/21(月) 23:32:04.87
>>361 個人専用かつ大規模でない場合はrcsで十分だったりしないか?


368 :デフォルトの名無しさん:2011/11/21(月) 23:46:07.10
>>364
7ドル/月って高くない?
最低価格有料会員21ドル/年ぐらいでいいような気がする。
下で謳っている以外で有料会員と無料会員との差別化としてどういう機能があるの?
ttps://github.com/plans

369 :デフォルトの名無しさん:2011/11/21(月) 23:51:57.31
>>367
gaucheの中の人もgitに移行したし、navi2chもgitだよね。slimeもgitだっけ?
まあ、せっかくだしアカウント作ってちょっと触っておいて損はないかなと思っている。
化石ツールでも全然個人レベルだと全然管理できるポテンシャルを持っているのはわかって
いるんだけど、世の中に一度流されるのもありかな。


370 :デフォルトの名無しさん:2011/11/22(火) 00:10:59.88
公開するものはgithub、非公開のものはbitbucketと使い分けている。

371 :デフォルトの名無しさん:2011/11/22(火) 02:16:13.72
>>360
勢いで言えば、GitHubが一番だと思う。次いでBitbucketかなー。
少なくともCommon Lispの世界では。CL-PPCREとかHunchentootも移ったし、
SBCLのWindows forkとかもこっちだし。

GitHubとBitbucketの二者とLaunchpadは性格違うので注意。
前者はあくまでも個人にフォーカスしてて、後者はプロジェクトにフォーカスしてる。
Launchpadはどちらかというと、Google CodeとかSFの競合。

GitHubとBitbucketなら、片方ミラーにしつつ、両方同時に使う手もある。
BitbucketはGitに対応してるし、MercurialでもHg-Git経由でGitHubを利用できるので、
リポジトリは共通のまま両方にpushするだけ。

372 :デフォルトの名無しさん:2011/11/22(火) 02:28:58.29
ただ、issue trackerはLaunchpadがかなり高機能なので、
人一倍きめ細かいタスク管理が好きなら合うかもしれない。
例えば、SBCLの公式はバグの管理だけLaunchpadを使ってる。

分散SCMをCLで使ってて思うのは、SLIMEとREPLどっぷりなので、
機能ブランチとかissueブランチを細かく作りまくって作業すると、
今現在どのコードを使って作業してるか本気で訳分からなくなる。
code.lisp、code.lisp<1>、code.lisp<2>、code.lisp<3>とか何がどれよ、
みたいな。結局バッファ切り替えにC-x bじゃなくてC-x C-f使ったり。
この辺はひと工夫要りそう。

373 :デフォルトの名無しさん:2011/11/22(火) 02:59:43.45
GitHub, Bitbucket, Launchpadで学習コストは基本的操作マスターレベルで各何時間なのか、
中級者的使い方で各何時間なのかを想像でいいので教えてください。そして、基本的操作
マスターレベル、中級者レベルで恩恵(効果)の違いを100点で評価を教えてください。
GitHub, Bitbucket, Launchpadのアカウントを作って3つとも触る予定ですが、そこまで
調査コストをかけられずにサービス比べをやめてしまうかもしれません。

Launchpadの「かなり高機能なので、人一倍きめ細かいタスク管理」できるのはうれしいん
ですが、学習コストが他のサービスよりかける必要がありそうですし、管理コストが膨れ
上がりそうで怖いです。でも、会員数が200万アカウントでしたっけ。1人平均2アカ作って
いるとしても100万人は優秀ですね。杞憂なのかな。

374 :デフォルトの名無しさん:2011/11/22(火) 08:08:43.49
こういうサービスで2垢作るかな?
それはともかく、どのサイトも機能の概要ページがあるんだから、一通り眺めて決めればいい

基本はGitを使ってるならGitHubかBitBucket、Mercurialを使ってるならBitBucket、Bazaarを使ってるならLaunchpadだが
上にもあるようにBTSだけ使うとか、複数サイトにミラーを置くこともできる
(ミラーは興味を持つ人がある程度存在するプロジェクトでやることが多いが、
一つのサイトがダウンしている間も大きな支障が出ないという側面もある)
確か、Bazaarにもbzr-gitとかbzr-hgがあったよな

375 :デフォルトの名無しさん:2011/11/22(火) 08:16:05.70
>>372
そのエディタはモードラインやステータス行にブランチ名を表示できないのか?

376 :デフォルトの名無しさん:2011/11/22(火) 08:21:48.52
LunchpadはUbuntuとのつながりも深いしね。

377 :デフォルトの名無しさん:2011/11/22(火) 09:22:13.33
>>372
独自仕様でemacs lispを組んでemacsの下の2行の所に半角20文字ぐらいコメントできるようにして文字数制限のないコメントを
コマンド打つと出てくるようにするといいかもね。toggleで表示・非表示もできるようにすれば邪魔なときは非表示にすればいい。

378 :デフォルトの名無しさん:2011/11/22(火) 19:31:53.16
コード例plz

379 :デフォルトの名無しさん:2011/11/22(火) 22:36:11.95
なんとかmodeみればあるよ。的な?

380 :デフォルトの名無しさん:2011/11/23(水) 07:45:48.63
再帰処理てどう考えたら理解できますか?


381 :デフォルトの名無しさん:2011/11/23(水) 08:09:41.10
>>380
深く考えずに、単なる関数呼び出しだと理解すれば良い。

(defun fact (n)
(if (= n 1)
1
(* n (fact (- n 1)))))

単に呼んでる関数が自分自身だったっていうだけ。
イメージが掴みにくいなら、(trace fact)してから実行してみて。


382 :デフォルトの名無しさん:2011/11/23(水) 08:16:50.07
>>381
ありがとございました。

383 :デフォルトの名無しさん:2011/11/23(水) 08:29:34.76
そして上のfactの定義は忘れるんだ。

(defun fact (n)
(if (= n 0)
1
(* n (fact (- n 1)))))

こっちで。

0! = 1とか素で知らなかったんだよ! 中学生以来の衝撃だよ!
何でみんな0まで回してんのwwwとか思ってたよ!


384 :デフォルトの名無しさん:2011/11/23(水) 09:16:43.33
>>383
www

385 :デフォルトの名無しさん:2011/11/23(水) 23:31:43.68
ふとしたことで積ん読してたPAIPを読み始めたんだけど、
なかなか面白い本だね。

386 :sage:2011/11/24(木) 00:02:26.88
再帰は自分自身を呼び出しながら、終了条件になるまで深く潜っていくイメージかな?
終了条件になったら、呼び出した方の関数に値を渡しながら浮かびあがっていく感じ。
一直線に潜っていくのはいいけど、いくつかに枝分かれして潜っていくような式は
効率が悪いような気がする。

387 :デフォルトの名無しさん:2011/11/24(木) 00:04:36.21
ああ、まちがった。

388 :デフォルトの名無しさん:2011/11/24(木) 00:08:40.59
carとcdrに再帰するまではいいけど
相互再帰書ける人はエイリアンだと思う

389 :デフォルトの名無しさん:2011/11/24(木) 00:20:59.31
>>388
何で? ただの関数呼び出しじゃん


390 :デフォルトの名無しさん:2011/11/24(木) 00:34:43.86
loop表現では描けない再帰の表現ってあるのかな?
みんな、実コードだったら可読性の高いloopで書いちゃうんでしょ?

391 :デフォルトの名無しさん:2011/11/24(木) 00:50:29.14
再帰下降パーサーとかループでかく気は起きない


392 :デフォルトの名無しさん:2011/11/24(木) 00:58:31.93
グレアム教徒はloopを使わない。


393 :デフォルトの名無しさん:2011/11/24(木) 01:29:37.18
Common lispとC on Linuxで食っていけないかな?
断れない仕事なら便宜上多言語も読めるようにするし、他のOSにも使えるように努力する。
ttp://cruel.org/freeware/hacker.html

394 :デフォルトの名無しさん:2011/11/24(木) 02:05:30.95
>>388
書くことより,「それが相互再帰である」ということにどう気づくんだろう,とか思った.
ループ内で条件分岐して,分岐ごと別の関数を呼ぶ,みたいな場合は相互再帰か.

395 :デフォルトの名無しさん:2011/11/24(木) 02:31:04.41
>>393
仕事でLispを使うこと
http://blog.practical-scheme.net/shiro?20100214-when-you-should-use-lisp


396 :デフォルトの名無しさん:2011/11/24(木) 09:26:38.92
>>394
問題自体が相互再帰。

397 :デフォルトの名無しさん:2011/11/24(木) 10:40:35.04
do詳しく解りやすく説明お願いいたします。

398 :デフォルトの名無しさん:2011/11/24(木) 14:19:54.26
なぜかLispのソースがAA扱いになってる
括弧が多すぎるからかな

399 :デフォルトの名無しさん:2011/11/24(木) 18:19:47.73
Allegro CLの購入を考えたいんだけど、そんなに高いものなの?高い高いって書いてあるけど、20万とかするの?
Windows向けのアプリ作ってフリーソフトとして配布したいと思ってるのだけど。

400 :デフォルトの名無しさん:2011/11/24(木) 18:35:42.22
>>399
Runtimeパッケージの再配布にも金銭関係するからフリーソフトで使うのはムリじゃね?


401 :デフォルトの名無しさん:2011/11/24(木) 18:49:18.58
エンタープライズ版だと7桁か

402 :デフォルトの名無しさん:2011/11/24(木) 22:36:42.37
Windows向けのアプリをcommon lispで作ろうとは私も思っていろいろ調べてみたが、
英語でも情報があまりまとめられていない気がする
ソフトのマニュアルに最低限記述してあるだけ
わかりにくいのが残念
clispでもwindowsアプリを作れると思うよ

403 :デフォルトの名無しさん:2011/11/24(木) 22:56:10.19
実行ファイル形式にしたいだけならSBCLだかが出来たような?


404 :デフォルトの名無しさん:2011/11/24(木) 22:58:53.60
(sb-ext:save-lisp-and-die "application.exe"
:toplevel 'main-entry ; entry point function
:executable t )
これでexe出来たはずだけど、SBCLからclojureに浮気中なのでダメだったらゴメン


405 :デフォルトの名無しさん:2011/11/24(木) 23:36:14.06
特に聞かれて無い気がするが、
http://cl.cddddr.org/index.cgi?%bd%e8%cd%fd%b7%cf%3a%bc%c2%b9%d4%a5%d5%a5%a1%a5%a4%a5%eb%a4%ce%ba%ee%a4%ea%ca%fd
商用はマニュアルにあるのかな。
あとは、ECLみたいにCコード吐き出すやつもあるが。

406 :デフォルトの名無しさん:2011/11/24(木) 23:57:01.61
>>405
このページは初見だった
いいページを教えてくれてありがとう
ってすごいurlだな

407 :デフォルトの名無しさん:2011/11/25(金) 00:55:56.19
強いメリットを主張できないClojureってなんなんだ。

ttp://hibari.2ch.net/test/read.cgi/tech/1318498898/175-177
From: [175] デフォルトの名無しさん <sage>
Date: 2011/11/24(木) 23:43:11.28

質問です。
LinuxerのサンデープログラマLisperなんですがJava未学習者がclojureを
覚える強いメリットっありますか?
あとOSごとにソフトを作り込んだ方がヘビーなエンドユーザーは使いやすいと
思うんですが、実際の所はどうなんでしょうか?
_______________________________________

From: [176] デフォルトの名無しさん <sage>
Date: 2011/11/25(金) 00:46:13.24

こういうメリット云々ぬかす奴は嫌い。
_______________________________________

From: [177] デフォルトの名無しさん <sage>
Date: 2011/11/25(金) 00:47:09.55

JAVA嫌いなら出来ない おわり

408 :デフォルトの名無しさん:2011/11/25(金) 01:13:29.57
アホか。

409 :デフォルトの名無しさん:2011/11/25(金) 01:23:13.43
*Java未学習者に対して*強いメリットが主張できないだけだと思うんだ。

410 :デフォルトの名無しさん:2011/11/25(金) 01:25:56.39
>>407
Java見習熟者がってのを見て見ぬふりは良くないと思うぞ。
Clojureの魅力の半分はJVM資産の活用でもあると思うし、その場合Javaしらない子にはClojureをやる意味が半分は無いと言う事だもの

自分はJava見習熟でもClojureはオススメするけどさ(他のLisp族は環境依存の部分を知るために苦労するから)
RichがVM上にのせた理由を書いた文章とか一度は読むべきだとも思うし。


411 :デフォルトの名無しさん:2011/11/25(金) 01:28:03.92
>>407
もしかしてClojureスレで聞いた本人か?
もしそうなら回線切って以下略だわ


412 :デフォルトの名無しさん:2011/11/25(金) 01:46:30.46
RacketやClojureなら
どちらも不変データと関数型らしいが、
どちらもさらっとしかしらない立場からすると、
独学で初学のひとには日本語の資料やちょっとしたツールがすぐよよういできるClojureかなと思うよ。
例えば、compojureやnoirでWebやってみるとか、leiningen使ったりしてローカルで試したり、
VPSやクラウド環境にリリースするのも出来るし楽だし、
javaを意識しなくて出来るし、
DBも一応何とかなる。

413 :デフォルトの名無しさん:2011/11/25(金) 02:28:32.13
>>412
DBはClojureqlがオススメ


414 :デフォルトの名無しさん:2011/11/25(金) 03:26:09.06
何でLisp Schemeスレでやらないでここでやるんだよw


415 :デフォルトの名無しさん:2011/11/25(金) 06:41:33.57
>>410
各ディストリでそんなに環境依存ってあるもんなんですか?
>>395のリンクでもありますがCで触れるのは最後にチューニングできるのは強みのような気もするんですが。
Richちゃんのいつごろ書いた記事?
>>411
朝、起きて気づいた。こっちの方が書き込み多いのは驚いた。Clojureスレのヤツはウンコだな。
>>412
それならGaucheで良くね?
CLならsbcl, clisp。個人の日本語解説サイトもあるから日本語資料には困らんよ。
日本語資料では間に合わなくなったら辞書片手に読めば良い。以上。

416 :デフォルトの名無しさん:2011/11/25(金) 07:35:47.49
そもそも,何ができたらお前にとって強いメリットで,
環境に合わせたチューニングで何がしたいというのか.

417 :デフォルトの名無しさん:2011/11/25(金) 07:48:40.49
ディストリに依存する部分はパッケージメンテナじゃないから詳しくないが
処理系に依存する部分は少なからずある
ラッパーはあるが、学び始めた頃はどれが処理系依存かなんてすぐには分からないし

それにGauche/SBCL/CLISPって不変性(永続的なデータ構造)中心だったっけ?
「日本語資料の量」って部分だけに反応したのなら、>>412がパラダイムの近いLisp方言を比較した点を読めてないし
辞書を使えばいいというのも的を外してる。それはどの方言・処理系でも同じ

418 :デフォルトの名無しさん:2011/11/25(金) 07:52:40.94
(let ((myData '(1 2 3))
(myResult '()))
(do ((myList (rest myData)
(rest myList))
(myI (first myData)
(first myList)))
((null myI) myResult)
(do ((myRest (rest myData)
(rest myRest))
(myJ (first myData)
(first myRest)))
((null myJ))
(setf myResult `((,myI ,myJ)
,@myResult)))))
((3 3) (3 2) (3 1) (2 3) (2 2) (2 1) (1 3) (1 2) (1 1))
が理解できません。どなたか簡単に説明をお願いいたします。


419 :デフォルトの名無しさん:2011/11/25(金) 08:46:41.47
>>400
配布毎に金かかるのか。それだと厳しいってか無理だなぁ。

standard runtimeが付いてくるのがエンタープライスからみたいだけど、値段7桁? 高えな。

420 :デフォルトの名無しさん:2011/11/25(金) 09:02:36.95
>>415
失礼なやつだな。

CL <-> Clojure : ライブラリの扱い方の違い。日本語の取り扱い。
仕様の枯れ方。 仕様に含まれてるconcurrentな部分。google app/heroku
などweb系。

schemeは学習でしか使ってないから比較してないけど、正直いって、
この3つの言語のうち1つやってれば、あとの2つはいつでも、プ
ログラミングはできると思うかな。

この辺は大きな違いがあるから。個人的には、Clojureは年1バージョン
アップで仕様がまだ微妙に変更して行ってるから、web以外で使う場合、
慎重になってるところはあるけどな。CLの仕様の枯れ方は何かと安心できる
反面、仕様を決めた当時と今の時代の違いを埋めてくれと思うところはある。

421 :デフォルトの名無しさん:2011/11/25(金) 09:14:40.85
410が言ってる、環境依存の問題は、Clojureは少ないというのは事実かもな。
CL/schemeに限らないけど、オープンソース系の多くの言語はWindowsで
取り扱うのは、何かと問題が出てくるし、作ってる本人達にもどうでもよい
問題だったりして、放置されがちだしな。俺だってMSを使ってるんだったら
cygwinより仮想環境そろえてそこにubuntu入れて開発環境を揃えたほうが、
楽だろうにと思うもの。

俺も含めてここの人には余りメリットは感じないけど、IDEにこだわってる
メンツでlispを触りたいという人も向いてるよ。でも、その手の連中は、
ここじゃなくて他のところに生息してそうだ。

422 :デフォルトの名無しさん:2011/11/25(金) 10:09:47.13
>>419
その代わり、サポートとかも提供するからその値段ってことなんだってさ。
ちなみに、毎年保守契約に25%掛かるぜ。

LispWorks辺りはまだマシだけど、それでも良い値段するよ。
64ビットならEnterprise確定だし。商用は高い。

http://www.lispworks.com/buy/prices-1c.html


423 :デフォルトの名無しさん:2011/11/25(金) 10:30:31.56
>>418
どの辺が理解できないのか教えてくれないと、
こっちもどの辺を説明すれば良いか分からなくて困るよ。

とりあえず、

1: myList = (2 3) myI = 1 myRest = (2 3) myJ = 1
2: myList = (2 3) myI = 1 myRest = (3) myJ = 2
3: myList = (2 3) myI = 1 myRest = () myJ = 3
4: myList = (3) myI = 2 myRest = (2 3) myJ = 1
...

って具合にそれぞれの変数が変わっていく中で、

(... (myI2 myI2) (myI1 myJ1))

って感じで要素が追加されてくからそうなる。


424 :デフォルトの名無しさん:2011/11/25(金) 12:40:51.96
数年ぶりにcommon lispを触るようになったけど、忘れてることが多い
PAIPの3章よんでると良い復習になったな。手持ちは原著なんだけど、
数年前に買ったものの割には、誤植の訂正はされていないようだ。
和書版のほうはどうなのか知らない。

高い本だけど、評判だけのものがある。大学の図書館あたりで探して
読んでみればいい。

425 :デフォルトの名無しさん:2011/11/25(金) 18:56:57.16

>>422
サポート込みならしょうがないか。
まぁ商用は個人には無理っぽい。

Tree-shakingがフリーの実装にあるといいんだけどね。

イメージを小さくするっていうならsbclがcompressed coreをサポートしたみたいだけど、起動に時間がかかりそうね。試してみた人いる?

426 :デフォルトの名無しさん:2011/11/25(金) 19:35:10.83
>>423
ありがとうございました。

427 :デフォルトの名無しさん:2011/11/25(金) 22:00:13.29
enhancement: when built with :sb-core-compression, core files (regular or executable) can be compressed with zlib. Use the :COMPRESSION argument to SAVE-LISP-AND-DIE to specify a compression level.

gzipみたいに1-9とかなら1で良さそうだ。
lzo系統の要望は無かったのかな。
http://dayafterneet.blogspot.com/2011/05/google-snappy.html

428 :デフォルトの名無しさん:2011/11/25(金) 23:34:27.13
>>425
Tree-shaking? Clozure CL先生の次回作にご期待ください。
Android対応したし、DTraceにも対応する可能性がありそうだし、
SBCLとは違った魅力のある処理系になると良いよね。

http://trac.clozure.com/ccl/wiki/ToDo

圧縮コアはそこまで起動時間は変わらないとかついったーで見たような。
Zach曰く、43MBのコアが9MBまで縮むらしいから、常時圧縮してても良いんじゃないか。

>>427
そういう枠組みがソースツリーに入ったのが重要なので、
LZOとかSnappyとかに後から対応するのは楽だと思う。


429 :デフォルトの名無しさん:2011/11/26(土) 00:58:48.51
>>428
期待しとくわ。頑張ってね!428さん

430 :デフォルトの名無しさん:2011/11/26(土) 02:57:16.05
>>424
ありがとうございました。

431 :デフォルトの名無しさん:2011/11/26(土) 11:29:48.95
>>429
今コード見たらzlib決め打ちで全然プラガブルにはなってなかったw嘘吐きでサーセンw

他のライブラリ使わせるには、コアにアルゴリズムやオプションとかの情報を埋め込んだり、
APIでそれを選ばせるためのインターフェイスが要るから、結構変更が大きくなると思う。
その辺決めるための開発者とのコミュニケーションとかマジやりたくない。他の誰か頼む。


432 :デフォルトの名無しさん:2011/11/26(土) 22:35:43.12
sbclをwindowsで使っています
他のプログラム(.exe)をsbclのスクリプトから起動させる、ということはできますか?
xyzzyでいうところの以下の機能のようなものを探したのですが、
自力では見つけられませんでした。

shell-execute - refwiki
http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=shell-execute

execute-shell-command - refwiki
http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=execute%2Dshell%2Dcommand

make-process
http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=make%2Dprocess

sbclがだめでしたら、他のディストリビューションでは可能かどうかも伺いたいです

433 :デフォルトの名無しさん:2011/11/26(土) 23:22:33.07
>>432
sbcl で外部プログラムを実行するには sb-ext:run-program を使う。
ここに詳細が載っているよ。
http://www.sbcl.org/manual/Running-external-programs.html

例えば電卓を実行したいのであれば
(sb-ext:run-program "C:/Windows/System32/calc.exe" nil)
みたいにすればOK.

434 :デフォルトの名無しさん:2011/11/26(土) 23:36:57.97
>>433
ありがとうございます!
マニュアルを見落としていました。

435 :デフォルトの名無しさん:2011/11/27(日) 22:01:14.10
practical common lispの質問です
Programming in the Large: Packages and Symbols
http://www.gigamonkeys.com/book/programming-in-the-large-packages-and-symbols.html
実践common lispの

(defpackage "COM.GIGAMONKEYS.EMAIL-DB"
(:use "COMMON-LISP"))

の直前の文章の翻訳で、
「もちろん文字列そのものを使ってDEFPACKAGEすることもできる。
しかし、その場合にも文字列をすべて大文字で書かなければならない。
なぜなら大半のシンボルやパッケージの名前は読取器によってすべて大文字の真の名前に変換されるからだ」
とありますが、ここの「大文字の真の名前」というのがいまいちわかりません
どういうことなのでしょうか

436 :SCHEME餃子 ◆8X2XSCHEME :2011/11/27(日) 23:06:00.16
>>435
例えばシンボルを 'a と書いたとしても、それはリーダーが 'A と変換する。
表記上 'a と書いても内部的には 'A と扱われる。
この内部的な名前が「真の名前」ということ。
よって、そのパッケージの名前は "COM.GIGAMONKEYS.EMAIL-DB" ということになる。

文字列については大文字に勝手に変換するということはないので、 "com.gigamonkeys.email-db" で探せば
"COM.GIGAMONKEYS.EMAIL-DB" に一致しない。

437 :デフォルトの名無しさん:2011/11/27(日) 23:22:35.58
正確にいえば、リーダーの設定によって大文字に変換される、だな。
リーダーの設定は READTABLE-CASE で参照、設定できる。
> (readtable-case *readtable*)
モードには :upcase, :downcase, :preserve, :invert の4つがあり、
それぞれのモードでLispScheme というシンボルを読むと、内部的には
(case mode (:upcase "LISPSCHEME")
(:downcase "lispscheme")
(:preserve "LispScheme")
(:invert "lISPsCHEME"))
となる。この結果がシステムが管理してるシンボル「真の名前」だ。
symbol-name で調べられるよ。ほとんどのCLerは :upcase を前提として会話する。
小文字好きな人は *print-case* という印字側を司る設定を :downcase にしてたりする。

438 :デフォルトの名無しさん:2011/11/27(日) 23:28:43.15
ありがとうございます。
リーダーのモードの説明、とくに
>ほとんどのCLerは :upcase を前提として会話する。
を見て腑に落ちました。
そう思って本文を見ると、すんなりと読めました
真の名前とはそういうことだったのですね

439 :デフォルトの名無しさん:2011/11/28(月) 15:12:55.09
すげー分かりやすい、横トンクス。

440 :デフォルトの名無しさん:2011/11/28(月) 23:47:34.84
sb-ext:run-programがらみだと思うのですが、
windowsで関連づけしているブラウザで指定したurlを開かせる方法はあるのでしょうか
sb-ext:run-program を使えば指定したブラウザでurlを開くことはできますが、
いわばブラウザを自動的に指定させたいのです


441 :デフォルトの名無しさん:2011/11/29(火) 01:20:19.28
>>440
shellに紐づいているプログラムを実行させたいのであれば、Win32APIのShellExecute()をCFFIで
呼ぶしかないような気がする。

下は既定ブラウザでgoogleのURLを開く例。

(cffi:foreign-funcall ("ShellExecuteA" :library "shell32" :convention :stdcall)
:pointer (cffi:null-pointer)
:string "open"
:string "http://www.google.co.jp/"
:pointer (cffi:null-pointer)
:pointer (cffi:null-pointer)
:int 1 ;SW_SHOWNORMAL
:long)

442 :デフォルトの名無しさん:2011/11/29(火) 01:24:26.73
ぐぐると sh -c してるのが見つかった
Windows の cmd.exe でも -c だか -k でいけるかもしれない
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true

443 :デフォルトの名無しさん:2011/11/29(火) 02:06:52.63
>>441
cffi経由でwin32apiをたたくなら、
いろいろと操作できそうですね
これを使用させていただきます

>>442
そういう方法もあるのですか
cmd /c start http://www.google.co.jp/
これでページを開くことができましたので、こう書きましたら

(sb-ext:run-program "c:/Windows/System32/cmd.exe"
'("/c start http://www.google.co.jp/")
:wait nil)
googleのページは開けたものの、・不必要なことに、なぜかurlの最後に"がついてしまいました
The requested URL /%22 was not found on this server.

444 :デフォルトの名無しさん:2011/11/29(火) 09:12:15.20
cygstartェ……。

445 :デフォルトの名無しさん:2011/11/29(火) 10:13:00.97
実用 Common Lispて初心者でも理解できますか?

446 :443:2011/11/29(火) 11:28:14.54
>>443
(sb-ext:run-program "c:/Windows/System32/cmd.exe"
'("/c" "start" "http://www.google.co.jp/")
:wait nil)
と書き換えればokでした


447 :デフォルトの名無しさん:2011/11/29(火) 13:02:06.70
>>445
下手なLISP本やるよりわかりやすいから、とりあえずやれ。
あと2chのリンクは参考資料な。


448 :デフォルトの名無しさん:2011/11/29(火) 13:05:36.47
あと無料でhtml形式の英語版があるから辞書片手にやりなさい。
そして、その次にOn lisp.pdfかな。

449 :デフォルトの名無しさん:2011/11/29(火) 13:53:18.07
>>445
いきなりあの本に手を出すのは疑問かな。447さんと意見が違って来る。
やるならば3章まではなんども復習してじっくり鍛えてからそのあと
に進めばいいよ。ネットの勉強ブログを見てると4章くらいで挫折が
多い本だから。だからあの本はある程度身につけたlisperが更に腕を
磨く本という位置づけ。最初の2章の位置づけは、他の言語やってましたよ
という人にとっては良い入門だと思う。
on lispを初心者に勧めるのもどうかと思うな。
おれはANSI common lisp(グレアム)で最初勉強したほうだけどね。
竹内さんの本は見てないから評価できない。

450 :デフォルトの名無しさん:2011/11/29(火) 13:59:11.02
プログラムの洗練のさせ方やデバッグの技法などを身につけるにはうってつけなん
だけどね。
むしろ、lisp経験をある程度積んでるのにPAIPを読んでないのは不幸だと思うくらい
の本だよ。値段は高いからそれ相当の価値があるかと言われると、あるんだろうな。
買って損したって気分しないんだから。ただし和訳版は持ってないので、和訳の質
などわかりません。(洋書版で7千円ちょっと、和書で9千円ちょっと)

451 :デフォルトの名無しさん:2011/11/29(火) 20:49:32.97
>>445
初心者でもとりあえずまずは、公式HPをみとくべき
http://lisp.dive2ent.com/

452 :デフォルトの名無しさん:2011/11/29(火) 23:38:38.06
>>451
踏んでしまったw


453 :デフォルトの名無しさん:2011/11/29(火) 23:46:05.95
>>445-448ってPractical Common Lispのことでは?
日本語では『実践Common Lisp』と翻訳されているやつ

PAIPは無料配布されていなかったかと

>>451については俺もやられたw
音楽が流れてびくっとしてしまった

454 :デフォルトの名無しさん:2011/11/29(火) 23:46:15.45
むしろ赤(ry

455 :デフォルトの名無しさん:2011/11/29(火) 23:57:48.53
http://opac.ndl.go.jp/recordid/000009415975/jpn
人工知能 第二版 1108p,17000円とこっちも分厚いんだな。

456 :デフォルトの名無しさん:2011/11/30(水) 00:57:06.16
>>453
PCLのことか^^; 和書のタイトルがに過ぎてて混乱してた。
PCL萌え絵本ですね。(もええ本ですねと書いたんだが。)


457 :デフォルトの名無しさん:2011/11/30(水) 01:05:17.86
>>455
原著は第三版がでて11000円相当で売ってるけど、あんなでかいの
電子ブックじゃないと持ち歩く気がせんかも。
PAIP/AIMAコンボで漬物石だよな。(+ Introduction to Algorithms)


458 :デフォルトの名無しさん:2011/11/30(水) 01:14:35.37
実用(PAIP)は入門にはもったいないな。ある程度基礎を知ってからのほうが楽
しいし、役にたつよ。できれば、じっくり味わってほしい。
今なら実践(PCL)→実用(PAIP)が個人的オススメかな。Paul Graham のスタイル
はどちらかといえば Scheme 寄りだからね。ド入門よりは二冊目以降がいいような気がする。

459 :デフォルトの名無しさん:2011/11/30(水) 02:51:28.78
一冊目は?

460 :デフォルトの名無しさん:2011/11/30(水) 02:55:10.84
>>457
それハードカバー版じゃない?
ペーパーバックの国際版なら7kちょいだよ

461 :デフォルトの名無しさん:2011/11/30(水) 08:48:17.78
>>460
ホントだ、知らなかった。

462 :デフォルトの名無しさん:2011/11/30(水) 13:53:30.75
sbclのスクリプトを実行可能にするとき、

463 :デフォルトの名無しさん:2011/11/30(水) 13:59:40.00
途中で切れてしまいましたので、改めて書きます
sbclのスクリプトを実行可能にするとき、アイコンを埋め込むことはできますか?
sbclが作り出す実行ファイルにはアイコンが設定されていないと思うので、
ただそれに指定したアイコンを埋め込みたいです

windowsxpで、外部ツール(ReplaceVistaIcon.exe)を使ってアイコンをコマンドで書き換えましたが
書き換え後の実行ファイルが"can't find core file"となってしまいます
外部ツールなしに実行ファイルのアイコンを書き換えられればベストですが、
それができないとき、外部ツール(できればコマンドラインから扱えるツール)を使って書き換えれるでしょうか

464 :デフォルトの名無しさん:2011/11/30(水) 14:30:39.75
うーん。できるのかなー。コアファイルが見付からないってのは、
コアイメージ部分を外部ツールがパージ、あるいは変更しちゃったからだと思う。
ファイルサイズがスリムになってたりしない? stripとかしてもそうなるはず。

多分、そういうの考えた人自体があんまりいないと思う。
ウィンドウとかタスクバーに表示されるアイコンを変えたいだけなら、
Windows APIで動的に読み込めたと思うけど、そういうんでもないんだよね?
あとはショートカットに対してアイコンとかを設定しとけば、
実用上は気にならない気もするけども。

それ以外だと、手当たり次第に外部ツールを試すくらいしか思い付かない。


465 :デフォルトの名無しさん:2011/11/30(水) 20:52:14.00
たしかにファイルサイズが小さくなっていました
20MB台->1MB台
エクスプローラーでアイコン付きのexeファイルを表示させたかったのですが、
API経由でタスクトレイにアイコンを表示させるのがよさそうですね
やってみます


466 :デフォルトの名無しさん:2011/12/01(木) 05:49:59.47
ここは教えて君が許されるスレですよね?
始めてLISPでプログラムを書こうとしているのですが、うまく行きません。

'((A B C) A B C (A (B C)))

と言うリストに対して
A<=a
B<=b
C<=a b
として以下の様になるよう置換したいのです。

'((a b a b) a b a b (a (b a b)))


ところが以下の様にうまくいきません。
* (defun henkan(x)(
cond
((equal x 'A) (list 'a))
((equal x 'B) (list 'b))
((equal x 'C) (list 'a 'b))
(t nil)))
* (defun chikan(x) (if (atom x) (henkan x) (mapcar #'chikan x )))
* (chikan '((A B C) A B C (A (B C))) )
(((A) (B) (A B)) (A) (B) (A B) ((A) ((B) (A B))))

「括弧が増えないやり方」はありますか?
もしくは「一番内側の括弧を外す方法」でも構いません。
なお1つのアトムが最大2つのアトムに変換されるとは限りません。
よろしくお願いします。

ちなみにmultiple-value-bindと言うのも見つけたのですが
可変長とは相性が悪そうに思いました。違いますかね?

467 :デフォルトの名無しさん:2011/12/01(木) 10:01:07.58
>>466
(defun chikan (x)
   (labels ((hentai (x)
              (if (atom x)
           (case x
                    (a (list '|a|))
                    (b (list '|b|))
                    (c (list '|a| '|b|)))
                  (list (loop for y in x
                           append (hentai y))))))
     (hentai x)))

468 :デフォルトの名無しさん:2011/12/01(木) 10:56:40.51
>>465
Win用のexeファイルでは、コアイメージをWin32リソースに突っ込んでいて、
そのアイコン付加ツールはアイコンをリソースに突っ込んだ後、
知らないリソースを捨ててしまってるのかもね。

469 :デフォルトの名無しさん:2011/12/01(木) 11:07:05.60
木構造、全然わからんなあ。
car, cdrで原始的にゴリゴリやるしか思いつかん。

470 :デフォルトの名無しさん:2011/12/01(木) 11:52:07.48
map系を使おうとすることは筋がいいよ。

* (apply #'concatenate 'list '((a) (b c) (d)))
(A B C D)

これを応用させてみ。

471 :デフォルトの名無しさん:2011/12/01(木) 11:58:04.81
m-v-bは多値を返す関数の時に使うんだよ。
listをletで変数に分けるみたいなときにはdestructuring-bindを使う。
この辺はちょっと慣れてこないと感覚はつかめないかも。

472 :デフォルトの名無しさん:2011/12/01(木) 12:55:58.28
沢山の回答ありがとうございます。

>>467
動きました。labelsや縦棒で区切るとか勉強になります。
括弧が一つ多いみたいなんで
(car (chikan '((A B C) A B C (A (B C))) ))
とすれば大丈夫ですね。
所でlabels使わなくても行けませんか?
(defun chikan(x) (if (atom x) (henkan x) (list (loop for y in x append (chikan y)))))

>>470
ヒントありがとうございます。
(defun chikan(x) (if (atom x) (henkan x) (list (apply #'concatenate 'list (mapcar #'chikan x )))))
(car (chikan '((A B C) A B C (A (B C))) ))

>>471
リストで受けてfirst,second,thirdでばらすイメージですかね。

--
carで受けるのは格好悪いですね。labelsとか使う場面でしょうか。

473 :デフォルトの名無しさん:2011/12/01(木) 12:59:03.79
>>467
さり気なく痴漢と変態にしてんじゃねーよw

474 :デフォルトの名無しさん:2011/12/01(木) 13:47:32.64
簡単に言えば?次のような感じで使ったりする。
(defun translator (tr)
  (destructuring-bind  (in . out) tr
    (lambda(c)
      (if (eql in c) out in ))))

CL-USER> (funcall (translator '(c .'(a b))) 'b)
C
CL-USER> (funcall (translator '(c .'(a b))) 'c)
'(A B)

475 :デフォルトの名無しさん:2011/12/01(木) 13:54:32.26
'が一つ余分だったな。^^;

476 :デフォルトの名無しさん:2011/12/01(木) 14:38:19.17
よろしくお願いします。
sbclでclojureと同じようにソースを出したいんですが、どうやればいいんでしょうか?
あとソースを参照しているファイルの場所を知ることはできないでしょうか?
user=> (source first)
(def
^{:arglists '([coll])
:doc "Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil."
:added "1.0"
:static true}
first (fn ^:static first [coll] (. clojure.lang.RT (first coll))))
nil
あとemacs23で(first 3)を評価すると*Backtrace*が出て実際のソースに飛べて便利なんですが、
こういうことはsbcl+slime+linuxでできないのでしょうか?
Debugger entered--Lisp error: (wrong-type-argument listp 3)
first(3)
eval((first 3))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp nil nil)
あと公式リファレンスを読むのを前提ですが、clojure, sbcl, emacs lispのソースを直接読んだ方が
あるテーマの操作関数について関数の語彙が増えるんでしょうか?
"/usr/share/sbcl-source/src/code/list.lisp"を今日初めて見てソースを見ちゃった方がわかりやすい
じゃんと思ってしまった。

477 :デフォルトの名無しさん:2011/12/01(木) 20:11:09.54
>>472は急いで書いたんでぶっきらぼうな感じになってしまいましたが
皆様のお陰で何とかなりそうです。

>>473
触れるべきか考えたまま調べたりしてたら失念しました。
私が触れとくべきでしたね。「なに!変態ですと!!!」

>>474
機会があったら使ってみます。
「こんなのもある」みたいな抽出しを増やさないとダメですよね。

478 :デフォルトの名無しさん:2011/12/01(木) 23:49:07.05
次に、sublisもhyperspecで調べてみ。

479 :デフォルトの名無しさん:2011/12/01(木) 23:49:52.10
s式のテキストを読み込み評価して他のテキストデータを書き出したいのですが、
書き出す部分の処理がうまくいきません
読み込むファイルと書き出すファイルのパスは、
外部から与えるようにしたいです

(defun from-lisp-to (input-file output-file)
(with-open-file (stream output-file
:direction :output
:if-does-not-exist :create
:if-exists :supersede)
(eval
(read-from-string
(format nil "(progn ~A)" (parse-lisp-file input-file))))))

このような形で組み立てて
最終的にはinput-file内の(format stream "hoge")をoutput-file のstreamに書き出すよう処理させたいのですが
文字列内のstreamとして(with-open-file)のstreamを使わせる方法がわかりません
どこを修正すればよいでしょうか

480 :デフォルトの名無しさん:2011/12/02(金) 00:37:24.41
>>476
A1. function-lambda-expressionのこと?
A2. シンボルの上で M-. 。SBCLならdescribeでソースの位置とか表示される
A3. SLDB(SLIMEのデバッガ)については前に書いた物があるんで、下をどうぞ

http://cl.cddddr.org/index.cgi?SLIME%3ASLDB

A4. ソースは読むに越したことはないと思う。勉強になる

481 :デフォルトの名無しさん:2011/12/02(金) 00:59:07.46
>>479
HyperSpec曰く、

http://www.lispworks.com/documentation/HyperSpec/Body/f_eval.htm#eval
> Evaluates form in the current dynamic environment and the null lexical environment.

なので、evalでローカル変数を参照することはできません。本当にありがとうございました。

ちなみに、それは単に

(with-open-file (*standard-output* "out.txt" ...)
(load "code.lisp"))

みたいなのじゃ駄目なんでしょうか?

482 :デフォルトの名無しさん:2011/12/02(金) 01:14:08.56
>>477
(defun chikan (x)
(labels ((f (x)
(if (atom x)
(henkan x)
(list (mapcan #'f x)))))
(car (f x))))
mapcan 使うとこうなる。
labels 使うと (car (chikan hoge)) と呼ばなくてもOK.

>>479
(eval `(let ((stream ,stream))
,(with-open-file (s input-file)
(read s))))
parse-lisp-file が分からないけれど、みたいな感じで……。

483 :デフォルトの名無しさん:2011/12/02(金) 01:16:06.08
>>468
そういうことでしたら、無理にいじくらないようにしなくてはなりませんね
勉強になりました

484 :デフォルトの名無しさん:2011/12/02(金) 01:36:00.09
>>481
分かりました
道理でよくありそうな処理なのに
(eval (read-from-string という例がほとんど無いのですか
evalを使わずにできないものかと考えていましたが、
単に*standard-output*を利用するということを失念していました

>>482
eval外部のstreamをletを使ってeval内部に持ち込むのですか
ただ、そうなると>>481の説明に反してしまうような…

>>481が簡単というか簡潔なのでそちらを使うことにします

485 :デフォルトの名無しさん:2011/12/02(金) 02:00:11.93
>>484
えーと、>>482はローカル変数を参照してません。
リストを作る際に値(ストリームオブジェクト)を展開してるので、
>>481とは矛盾しないと思います。

486 :466:2011/12/02(金) 12:25:25.85
>>482
ぴったりな関数があったのですね。

487 :デフォルトの名無しさん:2011/12/02(金) 23:46:00.60
>>485
勘違いしていました
リスト生成後にevalで評価していますね
失礼しました

488 :デフォルトの名無しさん:2011/12/03(土) 13:10:38.61
> Evaluates form in the current dynamic environment and the null lexical environment.

Evalのこの制約は静的展開コンパイル最適化のため?

489 :デフォルトの名無しさん:2011/12/03(土) 22:30:55.64
evalはダイナミック変数ならその値を得られたような気がする
それを考えると、コンパイルを必要な限りにおいてコンパクトに行うようにする、というのはしっくりくるね

490 :デフォルトの名無しさん:2011/12/03(土) 23:46:10.74
実用common lispのp.427の

(with-open-file (out "foo.html" :direction output)
(with-html-output (out :pretty t)
(emit-html *some-foo-expression*)))

のoutputは:outputの誤表記でしょうか?

491 :デフォルトの名無しさん:2011/12/04(日) 00:19:44.66
>>490
typoだねー。原書の時点で間違えてるみたい。

http://www.gigamonkeys.com/book/practical-an-html-generation-library-the-interpreter.html
http://www.lispworks.com/documentation/HyperSpec/Body/f_open.htm#open

あと、そっちは実践Common Lisp(通称PCL)。実用Common Lisp(通称PAIP)とは違うので注意。

492 :デフォルトの名無しさん:2011/12/04(日) 00:21:13.21
>>491
たしかに実践の間違いでした。ご指摘ありがとうございます。

493 :デフォルトの名無しさん:2011/12/04(日) 01:19:20.11
>>492
正誤表提案よろしく
http://pcl.lispuser.net/wiliki.cgi?%E6%AD%A3%E8%AA%A4%E8%A1%A8.%E6%A1%88

494 :デフォルトの名無しさん:2011/12/04(日) 03:07:09.18
>>493
追加しておきました

495 :デフォルトの名無しさん:2011/12/04(日) 12:46:19.07
>>491の1つめのサイトトップページに
that book is dead sexy ?Xach on #lisp
と書いてあるのですが、どういう意味なのでしょう
xachという英単語は存在しないようですし

496 :デフォルトの名無しさん:2011/12/04(日) 12:55:21.24
>>495
Quicklispとか書いたり色々やってるLisperのZach Beane(ハンドルがXach)が、
IRCの#lispでそう言ってたってこと。

497 :デフォルトの名無しさん:2011/12/04(日) 13:32:00.48
>>496
なにそれ。
知らんがなって感じだな。

ハンドル名じゃなくて実名で書けよ。
pgってどれだけ浸透しているのか知らないけど、pgだけだと迷惑だな。

498 :デフォルトの名無しさん:2011/12/04(日) 13:59:39.95
何を過剰に反応してるか知らんけど、RubyでのMatzとか、日本のSchemeでのShiroさんとか、
別に通りの良いあだ名で人を識別するのなんて普通だろ。

そもそも、事情が分かる人向けに「あの有名人もこう言ってますよ」っていう宣伝なんだから。

499 :デフォルトの名無しさん:2011/12/04(日) 14:37:35.60
Matzだったら認知度高いと思うけど、非日本諸国でShiroだけでどれだけの人が認知できるのかね。
竹内関数の竹内さんの通り名知らないけど、その通り名で英語圏でどれだけ認知されているの?

ちゃんとその本人のリンクが貼ってあるならわかりやすいだがな。

500 :デフォルトの名無しさん:2011/12/04(日) 14:42:45.70
チョン鮮人乙

501 :デフォルトの名無しさん:2011/12/04(日) 14:52:50.60
>>500
Es lebe die koreanische

502 :490:2011/12/04(日) 15:15:45.19
sbcl最新版をwindowsで使っています
おかげさまで実践common lispを読み終えたのですが、
実際にコードを動かそうと思って
http://www.gigamonkeys.com/book/のDownload source codeを取得して
Chapter31の動作を確かめようとしたのですが、chapter31/ディレクトリにあるcss.lispをloadしようとすると

The variable COM.GIGAMONKEYS.HTML::CSS-STYLE is unbound.

というエラーが出てしまいます
当初.macro-utilitiesが見つからないと言われて (ql:quickload "com.gigamonkeys.macro-utilities")によって解決はしたのですが、htmlの方は
System "com.gigamonkeys.html" not found
となってしまいました
どうすればよいのでしょうか

503 :デフォルトの名無しさん:2011/12/04(日) 16:18:44.40
Warum bist du so serene?

504 :デフォルトの名無しさん:2011/12/04(日) 16:24:18.32
>>502
先にpackages.lispとhtml.lispを手動でロードするか、ASDF経由でロードしてください。

(asdf:initialize-source-registry
'(:source-registry
(:directory ("practicals-1.0.3/Chapter31")) ; コードのあるディレクトリを指定
:inherit-configuration))

評価してから(asdf:load-system :html)すればASDF経由でロードできます。

505 :デフォルトの名無しさん:2011/12/04(日) 16:35:46.21
>>499
別に全世界でどうこうとか知名度とか、そういうのはまったく関係ないわけよ。
「特定のコミュニティ」の中で十分に共通の認識がある通り名なら、
「中の人同士」でのコミュニケーションに使っても何の問題もないっしょ?

「この道では知る人ぞ知るアイツもこう言ってるぜ、買えよ」って売り文句に、
「俺は知らないんだけど」って言ってる状況なんだけど、不毛だと思わんか?
その広告のターゲットじゃないんだから、無理に分かろうとしなくていいんだよ。

506 :デフォルトの名無しさん:2011/12/04(日) 16:48:28.25
lispbox、emacsの操作だけ覚えれば使える感じだな。
これはかなり良い入門者向き環境かもしれない。

507 :デフォルトの名無しさん:2011/12/04(日) 16:53:40.02
>>505
ヌーディストビーチのWeb上でのコミュニケーションなんだから
腋毛、マン毛等を手入れしたりした方が良いんじゃないの。

部外者はみるなと立看板をわかりやすいところに立てているなら
勝手にすればいいよ。

508 :デフォルトの名無しさん:2011/12/04(日) 17:06:43.44
>>507
裸なのは君の方なんじゃないの?

509 :デフォルトの名無しさん:2011/12/04(日) 17:17:29.64
気に入らなくてどうにかしたいなら直接そのコミュニティに言えよ

510 :デフォルトの名無しさん:2011/12/04(日) 17:25:18.90
語学力不足で読み取れなかったのに、
コミュニティの閉鎖性にして誤魔化すのはみっともないと思います。

511 :デフォルトの名無しさん:2011/12/04(日) 17:25:26.19
言えないからここで自分の馬鹿さをひけらかしてる訳で

512 :デフォルトの名無しさん:2011/12/04(日) 17:54:21.06
>>506
Emacsを好きになれるかがLisp入門にあたっての鬼門だったりするね
自分はvimから入ったから正直きつかった
好きになったのはEmacs Lispを書くようになってからだ

513 :デフォルトの名無しさん:2011/12/04(日) 18:04:13.66
>>488
Common Lispはlexical bindingセマンティクスだからでしょう。
引数にquoteされた式が書かれた場合はlexical bindingではあるんだけど、
引数が一般の式の時には、外のlexical environmentをアクセスしにいくのは、
Common Lispのセマンティクス上まずい。
統一的にlexical environmentはアクセスできないようにしておけば
わかりやすい性質を持ったevalになる。

514 :デフォルトの名無しさん:2011/12/04(日) 18:27:48.47
>>512
pgはvi派だし、vimの方がサラッと書くときには便利じゃないのかな。
環境を整えて書いたことないけど。
emacs自体は強い支援環境とemacs lispを組む楽しさがあるぐらい。
emacsは四輪でいつも信号に捕まって渋滞。vimはバイクですり抜けして
信号に捕まらずに快適。良い景色があって停車してデジカメに収めよう
としても両者の違いは明らか。

515 :デフォルトの名無しさん:2011/12/04(日) 18:33:24.68
環境を整えなくても・・・viはもともとlispモードがついてるし、
screenと組み合わせれば、それとなく使い勝手の良いものになってくれる。

516 :デフォルトの名無しさん:2011/12/04(日) 18:39:07.08
操作がネックになってるvi使いはviper-mode使えば良いのに。

517 :512:2011/12/04(日) 19:01:30.40
言われてみてvimでも平気だったんじゃないかって気がしてきたよ
なんかくやしいわ

518 :デフォルトの名無しさん:2011/12/04(日) 19:09:15.80
Lisp向けのvim scriptたくさんあるよ。気に入ったものがあればどうぞ。

http://www.vim.org/scripts/での検索結果
http://www.google.com/cse?cx=partner-pub-3005259998294962%3Abvyni59kjr1&q=Lisp

519 :デフォルトの名無しさん:2011/12/04(日) 19:30:37.86
slimevよさげですね。もっと早く出てたらEmacsに移らなかったかも

520 :デフォルトの名無しさん:2011/12/04(日) 19:57:47.77
slimvは利用してるけど、emacs+slimeのほうが使い勝手はいい感じがした。
うちの.emacsをチューニングしてるからかもしれないが。
vim使っててよくわからんと思ってるのは自動的に括弧を閉じるようにした時に
括弧の外に移動する方法が矢印キー以外のことがよくわからん^^;ところ
vimも適当な書物をかって学んだほうがええんかなぁ。オライリーのvi/vim第7版は原著しか無いけd.

521 :デフォルトの名無しさん:2011/12/04(日) 21:37:08.33
emacs+slimeでcclを使っていますが、
common lispの閉じ括弧から開き括弧に移動するショートカットキーはあるのでしょうか?
逆に、well-formedなs式で、開き括弧から閉じ括弧に飛ぶということはどうでしょうか

522 :デフォルトの名無しさん:2011/12/04(日) 22:09:10.47
>>516
vipper-modeかと思った

523 :デフォルトの名無しさん:2011/12/04(日) 22:25:38.24
>>521
http://lispuser.net/emacs/lisphacking.html#sec-1.1

524 :デフォルトの名無しさん:2011/12/04(日) 22:30:23.11
>>523
まさに探していた機能が載っていました
ありがとうございます。

525 :デフォルトの名無しさん:2011/12/04(日) 22:50:47.85
>>504
できました!丁寧に解説して下さってすみません

526 :デフォルトの名無しさん:2011/12/05(月) 00:00:32.88
CLOSの:aroundメソッドがよくわかりません
:before と :afterのそれぞれのメソッドは説明を見ても分かるのですが…
どういう意味でaround(周囲)なのでしょうか

527 :デフォルトの名無しさん:2011/12/05(月) 00:15:03.95
中でcall-next-methodを呼び出せる。
call-next-methodで呼び出されるmethodを覆うように実行されるからaround。

528 :デフォルトの名無しさん:2011/12/05(月) 01:45:09.14
そういうことですか
周囲ではなくて覆うというイメージなら分かる気がします

529 :デフォルトの名無しさん:2011/12/06(火) 16:00:52.40
PAIPを読み続けてるけどNorvigのコードって抽象化力が際立ってるね。
惚れ惚れするコードを書くよ。

530 :デフォルトの名無しさん:2011/12/07(水) 07:41:56.65
doがどうも理解しずらいのですが
コツなどありますか?

531 :デフォルトの名無しさん:2011/12/07(水) 11:38:02.20
do*がCのforループと一緒。
doはbodyの実行順序が規定されてない。(依存してはいけない)

532 :デフォルトの名無しさん:2011/12/07(水) 12:31:47.74
>>531 紛らわしいかきかたすんな

DO : ループ変数の束縛がパラレルに行われる
DO* : ループ変数の束縛がシーケンシャルに行われる


533 :デフォルトの名無しさん:2011/12/07(水) 13:26:49.32
common lispのおおざっぱな内容はつかんだと思うのですが、
それからどういうものを作ればいいのかピンときません

できれば10~100行のソースの小さなプログラムで、
common lispの使いどころがよくわかるようなものを複数探しているのですが、
そういうものはありますか?

534 :デフォルトの名無しさん:2011/12/07(水) 15:10:13.11
>Webで読めるCommon Lisp情報まとめ
>Common Lispの情報を得られるWebサイトや書籍をまとめました。
http://matome.hatena.ne.jp/mt/761

paipが無いのが残念だけど、
いい感じにまとまっているね

535 :デフォルトの名無しさん:2011/12/07(水) 15:10:25.11
こういう複数の言語の実装と比較できるものを読んでみるとか。
http://shootout.alioth.debian.org/u32/benchmark.php?test=revcomp&lang=sbcl

536 :デフォルトの名無しさん:2011/12/07(水) 16:03:05.72
>>534
深町さんも頑張ってまとめたね。おっしゃるように、Norvigのpaipや
Norvig&Pitmanのlisp作法に書いたドキュメントがないのが残念。とく
に作法のは和訳もされてて読まれやすだけにな。
(*) http://www010.upp.so-net.ne.jp/okshirai/tutorial-on-good-lisp-programming-style-ja.txt

オレイリーの本って幻っぽい。あの作者が早く健康を取り戻すことをお祈りしておくよ。

537 :デフォルトの名無しさん:2011/12/07(水) 16:06:24.88
Pitman=Hyperspecの中の人。

538 :デフォルトの名無しさん:2011/12/07(水) 16:25:10.53
>>533
PAIPは100行程度でこんなことできるのかと驚かされるものはのってるけど
今の貴方の状況で進められるものかどうか判断できない。
Common Lispだけはいろんな人がいろんな個性のコードを書くから、それが
良いかどうかをみるポイントは>>536でも参考にしてほしい。柔軟性を上手に
使って、最適化も上手なものって案外センスが問われるから。
https://github.com/languages/Common%20Lisp にはいっぱいコードが転がっ
てるけど、お目当てのものが有りそうかどうかはわからん。
速いコードを書く人ならEdi Weitzさんを見るといいかも。でも100行程度じゃないな。^^;

539 :デフォルトの名無しさん:2011/12/07(水) 17:24:49.34
>>533
使いどころって高尚な使い方の話?

雑多な処理なら随時実装していけばいいんじゃないの。とりあえず、どう書く.org?は例文として
参考になるんじゃないかな。
ttp://www.amazon.co.jp/dp/4874084141/
実装するネタがないならこの名著から適当につまみ食いして実装すればいい。

lispのいい所は慣用句を覚えれば形にするの(実装)が速いことだと思うから、形にして動かして
必要性があれば不満な部分を1から再実装しても良いし、不満な部分を我慢して違う興味のあるモノを
作っても良いという気楽さがある。

540 :デフォルトの名無しさん:2011/12/07(水) 17:55:33.62
なんか文章捻れちまったなあww

lispのいい所は慣用句を覚えれば形にするの(実装)が速いことだと思う。形にして動かして必要性が
あれば不満な部分を1から再実装しても良いし、不満な部分を我慢して違う興味のあるモノを作って
も良いという気楽さがある。

541 :533:2011/12/07(水) 22:38:43.46
皆さん丁寧に教えて下さりありがとうございます。
>>538のgithubを見た感じでは読み進めるのに難がありそうなので、
paipとどう書く.orgを手がかりに勉強していきます

542 :デフォルトの名無しさん:2011/12/08(木) 07:32:22.36
>>532
簡単な用例などありますか?

543 :デフォルトの名無しさん:2011/12/08(木) 19:19:45.33
>>536
>オレイリーの本って幻っぽい。あの作者が早く健康を取り戻すことをお祈りしておくよ。
作者がどうかしたのですか?倒れたとか…

544 :デフォルトの名無しさん:2011/12/08(木) 20:09:49.07
>>543
http://lisp-book.org/
Nine months into the project my rubbish state of health forced me to abandon being an O'Reilly author and all work on the book ceased.

遠まわしな言い方も含まれてるけど、健康がガタガタでオレイリーの著者に
なるのを捨てさせられて、本を書くことを中止した

と書いてるのね。ひどい健康問題みたいね。

545 :デフォルトの名無しさん:2011/12/08(木) 22:59:01.24
>>544
そういうことですか
残念ですね

546 :デフォルトの名無しさん:2011/12/08(木) 23:11:54.76
< O'Reillyの著者になることは諦めざるを得なくなり、その本に関することは全てやめました。

547 :デフォルトの名無しさん:2011/12/08(木) 23:20:03.51
>>546
Thanks よく考えたら、 健康であきらめざる負えなくなったことが、
お礼リーかなんかにやめされられたと受け取れん書き方になってた^^;

548 :デフォルトの名無しさん:2011/12/08(木) 23:23:24.16
オレイリーって発音も許容されるの?

549 :デフォルトの名無しさん:2011/12/08(木) 23:27:54.90
研究社のリーダーズを調べた

O'・Reil・ly /ouraili/
ouでは英語で母音が連続するから、
オウライリーとオーライリーの中間?って感じか

550 :デフォルトの名無しさん:2011/12/08(木) 23:43:46.15
社名
株式会社オライリー・ジャパン
http://www.oreilly.co.jp/index.shtml

551 :デフォルトの名無しさん:2011/12/09(金) 00:13:08.63
aeだとおもってたけどaやった?

552 :デフォルトの名無しさん:2011/12/09(金) 00:15:39.80
http://ja.forvo.com/word/o%27reilly/ しらべた

553 :デフォルトの名無しさん:2011/12/09(金) 00:28:42.72
>>542
>>532じゃないけど、一例。あんま簡単じゃないかも。

(let ((x 0))
(do ((x 1 (1+ x))
(y x x))
((> x 5))
(print y)))
;-> 0
; 1
; 2
; 3
; 4

(let ((x 0))
(do* ((x 1 (1+ x))
(y x x))
((> x 5))
(print y)))
;-> 1
; 2
; 3
; 4
; 5


554 :デフォルトの名無しさん:2011/12/09(金) 05:48:22.25
>>553
doって何者だ?
CL-USER> (let ((x 9))
(do ((x 1 (1+ x))
(y x x))
((> x 5))
(print y)))
9
1
2
3
4 NIL
CL-USER> (let ((x 9))
(do* ((x 1 (1+ x))
(y x x))
((> x 5))
(print y)))
1
2
3
4
5 NIL

555 :デフォルトの名無しさん:2011/12/09(金) 09:53:45.07
lの二列目だけを抽出できないでしょうか?
CL-USER> (let ((l (ql:system-list))) (first l))
#<QL-DIST:SYSTEM 3b-swf / 3b-swf-20110110-git / quicklisp 2011-12-03>


556 :デフォルトの名無しさん:2011/12/09(金) 12:02:18.15
Pythonの対話式シェルで
> (import os)
エラーが出て、5分ぐらい悩んじまった。

557 :デフォルトの名無しさん:2011/12/09(金) 16:10:58.03
xachさんがhttp://l1sp.org/ を作ったみたい。便利 slimeのファジー補完と同じ事を使って検索もできる。

558 :デフォルトの名無しさん:2011/12/09(金) 16:47:22.71
オラ入り

559 :デフォルトの名無しさん:2011/12/09(金) 22:35:20.44
カツマーが高校時代にlisperだったというんだけど、

勝間和代さんと語る─キャリア形成にSNSをどう使う?/Tech総研
http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=002018

日本の高校生が扱うことの出来たlispってどういう種類があるの?
16歳のときに1984年だから高校時代とcommon lispの制定とかぶると思うんだけど、
そのときに一般人(かどうか知らないけど)がlispの環境をどれくらい触れたのか知りたい
common lispはその中でもレアだったのかも

560 :デフォルトの名無しさん:2011/12/09(金) 22:38:40.20
パソコンだとmuLisp86、SLISPとか。
大型やオフコンが大学にあればUtiLisp、SLISPとか。
SLISPはREDUCEが実装されていたからあちこちにポートされていた。

561 :デフォルトの名無しさん:2011/12/09(金) 22:45:46.16
>>554
マクロでしょ

562 :デフォルトの名無しさん:2011/12/09(金) 22:46:39.38
あ、そうか
>隣にある大学の校舎にあるコンピュータ室まで行くんですが、当時はまだパソコンじゃなくてマイコン。パンチカードの時代でした。
wikiで確認したら、慶応の高校に通っていたみたいだから、
慶応にあったlispシステムを使っていたのか

563 :デフォルトの名無しさん:2011/12/10(土) 00:17:23.52
KOとlispなら本を出してる人おったよな。お盛んだったんじゃない?

564 :デフォルトの名無しさん:2011/12/10(土) 00:18:52.00
べちとかかつまーとかうっさんくさいひともリスパか。べちは掲示板作ってたんじゃなかったっけ?

565 :559:2011/12/10(土) 00:31:03.78
>>560
ありがとうございます
mulisp86がよく分からないのですが、ciniiから見れる昭和64年の情報処理学会の報告を見ると
ms-dosで動くのかということは分かりました
どういう処理系だったのでしょうか

566 :デフォルトの名無しさん:2011/12/10(土) 00:42:45.46
>>555
二列目ってその例だと3b-swf-20110110-git?
それで良いなら、

(let ((list (ql:system-list)))
(mapcar (lambda (system)
(let ((release (ql-dist:release system)))
(ql-dist:prefix release)))
list))

データ構造を調べたいなら、C-c Iしてインスペクタで調べると良いよ。

567 :デフォルトの名無しさん:2011/12/10(土) 00:50:38.36
>>557
それ前からあるよ。
逆引きCLとか、Common LISP users jpとかで使ってる。
HyperSpecへのリンクとか全部そこ経由。超便利。

> You knew about l1sp.org, right? The redirect site I made a few years
> ago to make it easy to share links to Common Lisp documentation?

公開されたのはコード。

> Well, I just released its source code on github. Enjoy!

568 :デフォルトの名無しさん:2011/12/10(土) 06:23:40.94
>>566
回答、ありがとうございます。
言葉足らずですいません。(ql-dist:name release)で3b-swfの列をゲットできました。
C-c Iで#<QL-DIST:SYSTEM 3b-swf / 3b-swf-20110110-git / quicklisp 2011-12-03>でエラーになるんですが、
どうやって調べるんでしょうか?
CL-USER> (lambda (x) (+ x x))
#<FUNCTION (LAMBDA (X)) {1002B4983B}>
また#<FUNCTION (LAMBDA (X)) {1002B4983B}>も調べられるんでしょうか?

569 :デフォルトの名無しさん:2011/12/10(土) 16:37:11.64
>>578
ほんとだ 訂正ありがと。

570 :デフォルトの名無しさん:2011/12/10(土) 16:48:22.12
>>578 に期待 age

571 :デフォルトの名無しさん:2011/12/10(土) 18:18:33.01
>>568
名前なら、releaseじゃなくて(ql-dist:name system)でも大丈夫なはず。
ASDFで定義してるシステムの名前が取れると思う。

それと、#< ... >ってのは、REPLがCLOSオブジェクトをwriteで印字したもので、
オブジェクトそのものじゃないから、それ自体はインスペクトできないんよ。
で、(lambda (x) (+ x x))という式が返す値をインスペクトすることはできる。
SLIMEのREPLなら、最初か最後の括弧の上、slime-modeのバッファなら、
その式の直後でC-c Iすれば、

> Inspect value (evaluated): (lambda (x) (+ x x))

って表示される。Enter押すとインスペクタに入ってゴニョゴニョできるよー。
色んな所で試してみると楽しいぜー。

>>578
お前優しいな。

572 :デフォルトの名無しさん:2011/12/10(土) 18:22:05.97
ちょっと訂正。

「CLOSオブジェクトをwriteで」→「オブジェクトをwriteで」

573 :デフォルトの名無しさん:2011/12/10(土) 23:15:47.81
いま皆既月食中だお! お空を見てみ

574 :デフォルトの名無しさん:2011/12/10(土) 23:53:43.96
みたお!

575 :デフォルトの名無しさん:2011/12/11(日) 13:42:10.26
paip3章の演習3.6で、
let形式の値が
(LOCAL-A LOCAL-B LOCAL-B GLOBAL-A LOCAL-B)
となるのですが、このうちglobal-aになる理由が分かりません

letの(a ' local-a)の影響を受けてlocal-a になるのかと思ったのですが、そうないのは何故なのでしょうか

576 :デフォルトの名無しさん:2011/12/12(月) 01:52:31.15
>>575
89ページのsymbol-valueの説明を見ること.
(symbol-value 変数)でスペシャル変数の現在の値を取得する。
レキシカル変数じゃないよ

577 :デフォルトの名無しさん:2011/12/12(月) 07:50:42.44
ubunto11.04 sbcl slimeでなぜかmapがエラーになるのは
何故でしょうか

578 :デフォルトの名無しさん:2011/12/12(月) 08:54:50.86
>>577
詳しく。コードとエラーメッセージなど。

579 :デフォルトの名無しさん:2011/12/12(月) 10:13:20.36
(let ((myA (make-array 3
:initial-contents '(1 2 3))))
(map 'array #'(lambda (myX)
(+ myX 5))
myA))
ARRAY is a bad type specifier for sequences.
[Condition of type SIMPLE-TYPE-ERROR]

Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [ABORT] Return to sldb level 6.
2: [RETRY] Retry SLIME REPL evaluation request.
3: [ABORT] Return to sldb level 5.
4: [CONTINUE] Continue from break.
5: [ABORT] Return to sldb level 4.
--more--

Backtrace:
0: (SB-KERNEL:%MAP ARRAY #<FUNCTION (LAMBDA #) {AF5978D}> #(1 2 3))

580 :デフォルトの名無しさん:2011/12/12(月) 10:16:45.56
>>578

581 :デフォルトの名無しさん:2011/12/12(月) 10:52:16.49
ARRAY is a bad type specifier for sequences.
と書いてあるようだが…

582 :デフォルトの名無しさん:2011/12/12(月) 11:14:34.31
>>579
配列はシーケンスじゃねーです。

http://www.lispworks.com/documentation/HyperSpec/Body/t_array.htm
http://www.lispworks.com/documentation/HyperSpec/Body/t_vector.htm

ベクタ(1次元の配列)はシーケンス。

(map 'vector #'identity (make-array 3 :initial-contents '(0 1 2)))
;=> #(0 1 2)


583 :デフォルトの名無しさん:2011/12/12(月) 13:22:01.17
>>582
小学3年生ぐらいでもsbclを使うようになったのか。なんかすごい時代になったなあ。
>>579
ご両親に英和辞書の引き方を習うとLispの勉強がはかどるよ

584 :デフォルトの名無しさん:2011/12/13(火) 00:09:59.48
ありがとうございました。

174 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)