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

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

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

1 :デフォルトの名無しさん:2012/03/05(月) 04:06:46.71
Lisp Schemeスレでは恥ずかしくて聞けないようなことを質問したり、
Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。
それ以外でもCommon Lispについての話題なら歓迎します。

ま、ゆっくりやりましょう。

「いいものの本質は、いかなる時代においても変わらない」byパワーズ

■前スレ
【入門】Common Lisp その8【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1309940115/

■Wiki
http://wiki.fdiary.net/lisp/ (id:guest pass:cl)
http://cl.cddddr.org/
http://tips.lisp-users.org/common-lisp/

2 :デフォルトの名無しさん:2012/03/05(月) 05:04:54.94
アセンブリとCommon Lispの関係は?

3 :デフォルトの名無しさん:2012/03/05(月) 05:26:00.37
Common Lispでウェブアプリ書いてる人いる?

4 :デフォルトの名無しさん:2012/03/05(月) 05:38:24.33
>>2
質問の内容が良く分からないけど、ネイティブコードにコンパイルする処理系なら、
内部でアセンブリ言語を中間形式として使ってたりするよ。SBCLとかCCLとか。

>>3
事例があるか、って話ならGoogleに買収されたITAが商売でやってたし、
日本でいるか、って話ならpaserveとかHunchentootとか使ってやってる人はいる。

5 :デフォルトの名無しさん:2012/03/05(月) 10:11:56.10
ポール・グラハムおじさんを忘れちゃいけない

6 :デフォルトの名無しさん:2012/03/05(月) 11:21:39.40
グラハムの話はウェブ黎明期の話だからな
今から新規にウェブアプリを開発するときにCommon lispを
使うのはかなりの冒険だろ

7 :デフォルトの名無しさん:2012/03/05(月) 11:49:41.83
clackを忘れたら可哀そうだよー。
深町さん、はてなをLispに染めてくれんかな。

8 :デフォルトの名無しさん:2012/03/05(月) 16:13:57.08
Lucid Common Lispはよくできていたな。

9 :デフォルトの名無しさん:2012/03/06(火) 16:57:33.54
***でSTGを作りますが何か?:いで庵
http://www.usamimi.info/~ide/programe/stg_doc/index.html
common lispでGUIシューティング・ゲームを動かすみたい
land of lispはCUI上のゲームだったっけ

10 :デフォルトの名無しさん:2012/03/06(火) 17:34:44.27
>>9
これFFIなのかな
FFIで呼び出した先で落ちたりすると結構涙目なデバッグする羽目になることあると思うのだけど頑張ってほしいな


11 :デフォルトの名無しさん:2012/03/07(水) 02:29:23.17
Lisp界隈の進歩が亀のようにノロい理由として、
すぐに俺実装を作りたがって開発リソースが分散しがちというのが
大きな理由としてあると思っている。例えば clojure-py を見ろ。

12 :デフォルトの名無しさん:2012/03/07(水) 07:14:56.04
何度目だこれ

13 :デフォルトの名無しさん:2012/03/07(水) 12:06:07.77
俺実装を作るってのもニーズの一つだから良いんよ。
あとスレチなんよ。

14 :デフォルトの名無しさん:2012/03/07(水) 19:21:02.62
自分はcommon lispの初心者にPAIPやCLtL2など限られた書籍をまず読ませる、
とどなたかわかりませんが書いていた覚えがあるのですが、
ご存じの方はいらっしゃいますか?

15 :デフォルトの名無しさん:2012/03/07(水) 22:46:19.82
CPUがi7の場合
並列実行できると高速になるはずなのですが
sbclはスレッドが不安定とも聞きます
i7で一番高速な処理系はどれになるのでしょうか

16 :デフォルトの名無しさん:2012/03/07(水) 23:05:05.36
>>15 OSは?


17 :デフォルトの名無しさん:2012/03/07(水) 23:24:39.36
>>15
>sbclはスレッドが不安定とも聞きます
ソースはどのあたり?

18 :デフォルトの名無しさん:2012/03/08(木) 00:42:35.40
>>15
突っ込みどころは捨て置くとしても最速はFranzだと思うぞ
高いけど

19 :デフォルトの名無しさん:2012/03/08(木) 00:42:49.56
OSはlinuxです
ソースは以前にいろいろブログみてまわってた時の印象です

20 :デフォルトの名無しさん:2012/03/08(木) 00:47:43.94
1.0.54のリリースノートで

> We still don't consider threads on non-Linux platforms good enough to enable
> them by default, but they're in a clearly better shape now.

って書いてるし、Linux以外の環境ではあながち外してもないんじゃいか。
とはいえ、>>15のソースは別口だとは思うけど。

この所SBCLはリポジトリに動きがない。みんな忙しいんだろうか。

21 :デフォルトの名無しさん:2012/03/08(木) 00:52:29.17
>>18
残念ながらAllegro CLはWindows以外ではネイティブスレッド非対応。
ユーザレベルスレッドだから、マルチコアでスケールしたりしないはず。

http://cl.cddddr.org/index.cgi?Allegro%20Common%20Lisp
http://common-lisp.net/~dlw/LispSurvey.html
http://www.franz.com/support/faq/#s-mp

22 :デフォルトの名無しさん:2012/03/08(木) 01:02:18.88
>>21
Windows だけでってのは珍しいな。

23 :デフォルトの名無しさん:2012/03/08(木) 01:17:04.26
androidでcommon lispを使った開発してる人
いますか?

ググってみたところecl,abcl、cclあたりが候補になるのかな?
 
あとsl4aというスクリプト実行環境を
利用する手もあるみたいです。

どれも敷居がたかそうだけど、lispで
android開発できたら素敵だなっと。




24 :デフォルトの名無しさん:2012/03/08(木) 04:30:03.42
>>23
CommonLispでなくて良いならClojureがswank丸ごと動くのでSlime使って開発できたりするよ


25 :デフォルトの名無しさん:2012/03/08(木) 23:34:50.53
数値を受け取り、
1桁なら0を10の位に挿入して文字列として、
そうでなければそのまま文字列として返す処理はどう書けばよいですか?

(defun num->string (i)
(if (<= 10 i)
(princ-to-string i)
(format nil "0~A" i)))

こう書いてみたのですが、princ-to-string と format が似たようなことをしているので
他の書き方は無いかと気になりました
princ-to-stringとformatのどちらかを書かずに同じ結果を取得できないものでしょうか

26 :デフォルトの名無しさん:2012/03/08(木) 23:42:34.89
formatの書式指定で出来る。

27 :デフォルトの名無しさん:2012/03/08(木) 23:49:19.25
~2,'0d

28 :デフォルトの名無しさん:2012/03/08(木) 23:49:48.10
(format nil "~2,1,,'0@A" 1)
かな。

29 :デフォルトの名無しさん:2012/03/09(金) 00:19:45.06
>>26-28
ありがとうございます。>>28でOKでした。


30 :デフォルトの名無しさん:2012/03/12(月) 19:48:12.32
CLAZY: Lazy Calling in Common Lisp
http://common-lisp.net/project/clazy/
ここでthunkというものが出てくるのですが、なぜthunkというものを
使おうとするのでしょうか?

31 :デフォルトの名無しさん:2012/03/12(月) 20:54:29.68
>>30
delayとforceが何をするものかを考えれば
簡易的な実現の一つとして、例えば

(defmacro delay (expr) `(lambda () ,expr))
(defun force (thunk) (funcall thunk))

というのもありだと分かるだろう。

32 :デフォルトの名無しさん:2012/03/12(月) 21:01:55.71
http://en.wikipedia.org/wiki/Thunk_(functional_programming)
最初の方だけ読めばいいよ

33 :デフォルトの名無しさん:2012/03/15(木) 15:53:53.81
>>31-32
ありがとうございます。理解できました。

34 :デフォルトの名無しさん:2012/03/17(土) 01:20:38.04
(defun hoge ()
"
ここにコメントを書く
"
foo)

コメント部分に"とかを含めたい時ってどうやるんでしょ?
Pythonみたいに"""みたいなことって出来るんでしょうか?

35 :デフォルトの名無しさん:2012/03/17(土) 05:53:51.52
評価されるならいくつか逃げ道思い付くけど、docstringは「not evaluated」だし、
\でエスケープするしかないんじゃなかったっけ。

奥義のリーダーマクロを使えばどうとでもなるとは思うけど。
CL-INTERPOLに望みの機能があった気が。

http://weitz.de/cl-interpol/

36 :デフォルトの名無しさん:2012/03/20(火) 10:07:11.65
関数の途中で処理をstopさせたいのですが。
C言語のreturnのように、途中で処理を戻す方法はありますか?

(defun test-func ()
<中略>
(if flag
(message ”stop”)
(message ”continue”))
<中略>
)


37 :デフォルトの名無しさん:2012/03/20(火) 10:26:15.55
>>36
(defun f ()
(dotimes (n 10)
(when (= n 5)
(return-from f))
(print n)))

多分、return-fromが期待してるものだと思う。

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

ただ、最近は、loop以外ではあまりreturn-fromって使わないと思う。

38 :36:2012/03/20(火) 14:01:04.14
>>37
ありがとうございます。助かりました。

39 :36:2012/03/20(火) 21:26:44.25
>>37
すいません。以下をEmacsの上で実行したのですが、
(defun temp (x) (if x (return-from temp 'dummy)) 44)

(temp nil) => 44 はうまく行くものの、
(temp t) のほうは、以下のようにエラーが出てしまいます。
Debugger entered--Lisp error: (no-catch --cl-block-temp-- dummy)
正常終了してくれると助かるのですが。

40 :デフォルトの名無しさん:2012/03/20(火) 22:17:01.66
>>39
GNU Emacs Lispリファレンスマニュアル: Catch and Throw
http://www.geocities.co.jp/SiliconValley-Bay/9285/ELISP-JA/elisp_127.html
>Common Lispに関した注意: Common Lispを含むほとんどの他のLispには、
>非逐次的に制御を移す方法がいくつかある。
>たとえば、return、return-from、go。
>Emacs Lispにはthrowしかない。

common lispの関数がemacs lispにあるとは限らない一例だね


41 :デフォルトの名無しさん:2012/03/20(火) 22:21:45.26
Lispでオブジェクト指向プログラミングをやるときのスタイルについて質問です。

CLOSでオブジェクト指向をやろうとすると、オブジェクトのスロットの値の変更が必要になったりしますが、
Lisper的には普通にsetfで代入してしまうのか、あるいは変更する度に新しいオブジェクトを作ってそれを渡したりするのでしょうか。

そもそも関数プログラミングとオブジェクト指向やクロージャって相容れないように思えます。

42 :デフォルトの名無しさん:2012/03/20(火) 22:40:53.03
>>39
(require 'cl)
でreturn-fromを使えるようになるけれど、
elispのdefunはブロックを作らないので、
(defun temp (x)
(block temp
(if x
(return-from temp 'dummy))
44))
とするか、Common Lispのdefun互換のdefun*を使って
(defun* temp (x)
(if x
(return-from temp 'dummy))
44)

ここまで書いといてなんだけれど、elispに関してはこっちで
Emacs Lisp 3
http://toro.2ch.net/test/read.cgi/tech/1191875993/

43 :36:2012/03/20(火) 23:15:25.05
>>40
>common lispの関数がemacs lispにあるとは限らない一例だね
あー、なるほど。

>>42
何から何まで親切にありがとうございました。

44 :デフォルトの名無しさん:2012/03/20(火) 23:19:46.67
いいってことよ!

45 :デフォルトの名無しさん:2012/03/20(火) 23:25:16.97
>>41
CLOSは普通に代入するスタイルですねー。
ただし、仰るような、関数的なオブジェクトシステムも存在します。
自分は以前Schemeで書かれたものをちらっと見掛けた程度ですが。

それと、OOPはさておき、クロージャは関数プログラミングでは不可欠な概念だと思います。
これがないと、例えばHaskellでもモナドのbindができなくて困るんじゃないでしょうか。

46 :デフォルトの名無しさん:2012/03/20(火) 23:28:00.07
被るし、良く分からんのだけど、聞いた話の受け売りで。
>41
CLの基本データ構造はミュータブル。
racket,clojureはイミュータブル。
・・・らしい。
イミュータブル(純粋な関数型)とオブジェクトの話は、CLではあまり関係ないかも。
またイミュータブル中心でも、ocamlやscalaみたいに、直交させてるのもあるし、clojureみたいに別の方法で代用させたりしてるのもある。
クロージャーはウィキぺさんに書いてあるみたいに言語によって扱いが違うかも。
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3
そして純粋な関数型でも、限定継続みたいな手法で、複雑な制御構造を復活させたりしてる。

47 :はちみつ餃子 ◆8X2XSCHEME :2012/03/20(火) 23:51:13.61
>>41
例えば C++11 に導入される lambda 構文を見てみると、
実態はオブジェクトに過ぎない。
http://cpplover.blogspot.com/2009/12/lambda.html
クラス定義をちょろっと省略できるだけの構文糖だ。
C++ は GC を前提としていないので変数キャプチャのルールが少しばかり面倒だが、
要するにクロージャとオブジェクト (レコード) は抽象化の仕方が違うだけで
変数の束を閉じ込めるという意味では同じとも言える。

C++ で lambda が導入できるなら逆に Lisp でオブジェクト (レコード) とメソッドで
オブジェクト指向するのも別にアリじゃね?

クロージャとオブジェクトの関係を説明した面白い記事があるので紹介しておく。
http://www.ibm.com/developerworks/jp/opensource/library/itm-progevo3/index.html
http://www.ibm.com/developerworks/jp/opensource/library/itm-progevo4/index.html

48 :デフォルトの名無しさん:2012/03/21(水) 01:18:50.29
CLじゃ、標準だから当たり前だけど、CLOSは普通に使われてるんだよね。
自作オブジェクト指向システムも良いかもしれないけど、
自作ライブラリには、もれなく自作オブジェクト指向システムも付いてくることになったら正直辟易

49 :デフォルトの名無しさん:2012/03/21(水) 01:53:19.98
クロージャは評価される度に内部状態が変わるような例題のイメージが強かったので副作用必須かと思ってけど、実際はそうでもないのか

50 :デフォルトの名無しさん:2012/03/21(水) 06:06:37.80
>>49
(let ((n 0))
(defun f ()
(print (incf n))))

とかのことですか?

この手のコードは、変数のエクステントが分かりやすいから良く例に使われますけど、
関数fに参照透明性がない(副作用がある)のは、単に破壊的変更のせいです。

(let ((n 0))
(lambda () n))

のような形でもクロージャは良く使われますが、この式が返す関数に副作用はありません。

51 :デフォルトの名無しさん:2012/03/21(水) 06:27:42.40
>>50
流石に例が不親切だった気がするので、もう少し実際のコードに出てきそうな例を。

(defun x+-all (x l)
(mapcar (lambda (y) (+ x y)) l))

こんな感じで、レキシカル変数を参照することは多いです。

52 :デフォルトの名無しさん:2012/03/21(水) 10:23:39.39
これくらいじゃないとクロージャーっぽくないと思う
(defun x+-all (x l)
(mapcar (lambda (y) (lambda () (+ x y))) l))

53 :デフォルトの名無しさん:2012/03/22(木) 08:34:48.40
>>49
λ式の評価器に必要なのがクロージャですから。
funarg問題のために。

54 :デフォルトの名無しさん:2012/03/23(金) 21:01:06.44
任意の数の引数を取る関数に、一個一個引数をつけるのではなく、
リストか何かでまとめて渡したいのですが、どう記述すれば良いですか?

(setq item1 '(item ”1”))
(setq item2 '(item ”2”))
(setq item3 '(item ”3”))
(widget-create 'radio-button-choice item1 item2 item3)
の代わりに、

以下のように記述したいのですが。
(setq itemList '(item1 item2 item3))
(widget-create 'radio-button-choice 'itemList);; //NG


55 :デフォルトの名無しさん:2012/03/23(金) 21:19:50.26
apply?

56 :54:2012/03/23(金) 22:42:16.67
>>55
applyとwidget-createの組み合わせだとうまく行きませんでした。
(apply 'widget-create 'radio-button-choice '(item1 item2 item3)) ;;NG
(widget-create 'radio-button-choice item1 item2 item3) ;;OK

以下だとうまく行ったのですが。
(defun seki3 (x y z) (interactive ”r”) (eval (* x y z)))
(apply 'seki3 '(2 3 4)) ;;OK
(apply 'seki3 2 '(3 4)) ;;OK

widget-create関数の使い方として以下を参考にしています。
なんとかリストで渡して選択画面を作りたいのですが。
http://www.dina.kvl.dk/~abraham/custom/widget.html#SEC16

57 :デフォルトの名無しさん:2012/03/23(金) 23:01:52.31
>>56
Emacs Lisp 3
http://toro.2ch.net/test/read.cgi/tech/1191875993/

(setq itemList '(item1 item2 item3))
だと item1などが評価されない。
(setq itemList (list item1 item2 item3))
(apply 'widget-create 'radio-button-choice itemList)

58 :54:2012/03/23(金) 23:33:47.68
>>57
できました。ありがとうございます。

59 :デフォルトの名無しさん:2012/03/24(土) 06:22:34.52
ごく基本的に質問ですみません。
リストのn番目の要素の値を変更はどのように書けば良いのでしょうか?
たとえば、
(setq x '(”a” ”b” ”c” ”d”))
というリストがあった場合に、"c"の値を"C"と変更するにはどう書けば良いのでしょうか?

60 :デフォルトの名無しさん:2012/03/24(土) 06:28:40.96
>>59
http://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp10.html#chap20
とか参照

61 :59:2012/03/24(土) 06:57:45.55
>>60
ありがとうございます。

62 :デフォルトの名無しさん:2012/03/24(土) 19:47:28.72
>>59
(setf (car x) "1") とか (setf (nth 2 x) "2") とか…
function ではなく accessor と分類されているオペレーターは setf と組み合わせて
破壊的操作に使用可能

詳細は以下の 5.1.1 と 5.1.2
http://www.lispworks.com/documentation/HyperSpec/Body/05_a.htm


63 :デフォルトの名無しさん:2012/03/26(月) 16:47:20.88
emacsのslimeでcommon lispのソースを編集している際、
slime-eval-last-expressionで任意のs式を評価した結果(返り値)を
そのs式の直後に改行して結果を貼り付けることはできないでしょうか。

今はソースのs式をコピーしてslimeのreplで評価し、
その結果をソースに手作業で貼り付けおり、面倒です

たとえば(ceiling 1.1)とあるとき
(ceiling 1.1)
;; result: 2
;; result: -0.9
こういうふうに結果をs式の後に追記したいのですが、何か方法はありますか。

64 :デフォルトの名無しさん:2012/03/27(火) 07:09:50.36
C-u M-x slime-last-expression

65 :デフォルトの名無しさん:2012/03/27(火) 07:14:32.67
slime-eval-print-last-expression

66 :デフォルトの名無しさん:2012/03/27(火) 07:15:22.35
間違えてageた上に遅れたorz

67 :デフォルトの名無しさん:2012/03/27(火) 17:15:23.32
>>64-66
ありがとうございます。捗るようになりました。

68 :デフォルトの名無しさん:2012/03/27(火) 17:32:57.87
M-x slime-scratch っていう手もある

69 :デフォルトの名無しさん:2012/03/27(火) 22:16:40.23

CommonLispでclojureの -> みたいな関数ありましたでしょうか?


70 :デフォルトの名無しさん:2012/03/27(火) 23:04:33.45
http://www.lispworks.com/documentation/HyperSpec/Front/X_Master.htm
で確認する。
もしくは、slimeで、 -> の上にカーソルを持っていき、M-x slime-hyperspec-lookup すると
ミニバッファに->が表示され、スペースや、リターンでは、[No match]になる。
つまり標準にはないということが分かる

71 :デフォルトの名無しさん:2012/03/27(火) 23:16:01.18
>>69
同じような機能のものってことなら、CommonLispにはないんじゃないかな
Clojureのはメタ情報を活用してるから、同じ使い勝手のものを再現するのはなかなか難しいかも

72 :デフォルトの名無しさん:2012/03/27(火) 23:49:05.61
Clojureの -> (arrow macro) を使うと
(list (int (Math/sqrt 25))) を (-> 25 Math/sqrt int list) と書けるのか

73 :デフォルトの名無しさん:2012/03/28(水) 17:20:39.81
paipとpclを読み終わってcommon lispでたいていのことはできるようになったと思います
そこで質問しますが、common lispのスキルを上げるというかステップアップするには
どういうものに取り組めばよいでしょうか?
2,3年で廃れてしまうかもしれない流行に左右されるよりも、
10年20年先でも通用するような新しい試みが何かあれば知りたいです

74 :デフォルトの名無しさん:2012/03/28(水) 17:58:32.17
単にCommon Lispの知識が得たいなら、リーダーマクロやコンパイラマクロ、
パッケージやCLOS、MOPなどの細かい機能について調べれば良いと思うけど、
そういうこと? あとはマクロの応用とか。好みから微妙に外してる気がするけど。

現在のLispの世界では、あまり先進的な言語機能って研究されてないと思う。
Common Lispは今進化が止まってるし。Schemeのhygienic macroくらい?

75 :デフォルトの名無しさん:2012/03/28(水) 18:30:00.45
処理系の実装やハック。有名なソースの読解やオープンソースやブログでの公開。
他には計算機科学系の論文でも漁ってCommon Lispの機能で実装してみるとか?
数年先にどんな技術が通用するかなんて分からんよ。
それに言語は目的があって使うものだから、言語自体のスキルアップの意味が分からん。

先進的な機能はライブラリとして実装されるから、言語自体の進化には見えないだけ。

76 :デフォルトの名無しさん:2012/03/28(水) 19:03:10.94
さっき思い付いたけど、限定継続とかは割とLisp方面でも積極的に研究されてる気がする。
元ネタはFilinskiの論文? まあこっちもSchemeなんだけども。

言語自体を深く知ってもあまり意味がないことには同感。
他の言語で基礎はもうできあがってて、単にCommon Lispに親しみたいのか、
言語の機能は把握したので、次にアルゴリズムやデータ構造を知っていきたいのか、
その辺も教えてもらえれば、みんなもっと適切な助言をしてくれるんじゃないかな。

77 :デフォルトの名無しさん:2012/03/28(水) 20:32:25.56
73です 皆さんありがとうございます
>>74 処理系自体を改変することよりも、使い方を磨こうと思っています。うまく言えなくてすみません。
>>75
>先進的な機能はライブラリとして実装されるから、言語自体の進化には見えないだけ。
これは盲点でした。たしかにそうですね
そして、paipを読んで強く思ったのですが、
>>76さんのおっしゃるところのアルゴリズムやデータ構造が知りたい内容だとわかりました。
それらを体系的に(試しながら)勉強できる、(common)lispを使う教材があれば知りたいです。

78 :デフォルトの名無しさん:2012/03/28(水) 20:50:13.66
ちょっと目標が遠大すぎる気もするし
まあこんなとこから始めて様子を見たらどうだろう
http://www.geocities.jp/m_hiroi/xyzzy_lisp.html

79 :デフォルトの名無しさん:2012/03/28(水) 23:48:51.63
いまさらアルゴリズムやデータ構造を知りたいのはプログラム自体の初心者か。
言語毎の差異は小さいから、アルゴリズム系の本を買ってCommon Lispで実装すると良いよ。
逆引きCommon LispやCommon Lisp CookBookのコード例も参考になる。
あとは定評のあるソースをたくさん読んで、とにかく何か自前で書く。
どの言語でも入門がすんだ後の本はあまりない。他人のソースを参考に自前で書くのが一番。

あとOn Lispは必読。

80 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 08:10:18.10
限定継続の勉強ならSchemeのほうがいいんじゃないかな。
限定じゃない継続を使ってさくっと実装できるし。

81 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 23:04:37.03

>>70
>>71
無いですか。わかりました。ありがとうございました。



82 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 14:57:12.70
(setq allList '(("a" . ("a1" "a2" "a3")) ("b" . ("b1" "b2" "b3")) ("c" . ("c1" "c2" "c3"))))

上のような連想リストallListのなかの、"b"に対応する配列を差し替えたいのですが、
以下の(1)のように直書きするとうまく行くのですが、(2)のように(setf (nth 1 allList) '("b" . bList));と実行すると、
(3)以降を実行するのに、Wrong type argument: sequencep, bListとエラーが出ます。
どのように記述すればできますか?

(setf (nth 1 allList) '("b" . ("b01" "b02" "b03" "b04")));;(1)OK
(setq bList '("b01" "b02" "b03" "b04"))
(setf (nth 1 allList) '("b" . bList));;(2)NG

(setq myList (cdr (assoc "b" allList)));;(3)bの内容の表示
(setq i 0)
(while (< i (length myList))
(message (concat "myList(" (int-to-string i) "):" (nth i myList)))
(setq i (+ i 1)))

83 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 15:13:17.35
>>82
(assoc "b" allList :test #'equal)

http://www.lispworks.com/documentation/HyperSpec/Body/f_assocc.htm#assoc
http://www.lispworks.com/documentation/HyperSpec/Body/17_ba.htm

84 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 22:59:57.73
concatで怒られてるんじゃね?

'("b" . bList) だと bListが評価されないから (list "b" . bList)に置き換えてみ。

85 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 23:15:35.66
>>84
間違えたorz
(cons "b" bList) か。

86 :82:2012/03/31(土) 23:15:56.58
>>83
ありがとうございます。

>(setf (nth 1 allList) '("b" . bList));;(2)
(2)のbListになにか符号をつけるなりして、(1)と同じかたちで読み込ませることはできるのでしょうか?

87 :82:2012/03/31(土) 23:17:18.54
あ、ちょうどタイムリーに回答いただけました。試してみます。ありがとうございました。

88 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 11:55:56.24
herokuでsbclで動くのかな?
http://www.slideshare.net/mtraven/lisp-in-the-cloud

89 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 12:01:58.56
https://github.com/mtravers

90 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 12:12:50.47
>>88
buildpack使って書いたみたいね。
https://devcenter.heroku.com/articles/buildpacks

91 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 12:18:17.88
>>89
これはClozure CLベースで、それを元に作った
https://github.com/jsmpereira/heroku-buildpack-cl
がSBCLベースだな。

92 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 18:41:37.93
hunchentootについて教えて下さい。
複数のサブドメインを一つのサーバで扱おうと考えています。
cc.bb.com://AA/BB.html => cc.bb.com://cc/AA/BB.html
の様にしてサブドメインをディレクトリに変換したいのです。
hunchentoot:hostでドメイン名が取得出来る事は分かったのですが、
うまくフック出来ません。
(defmethod handle-request :before ((*acceptor* hunchentoot::acceptor)(*request* hunchentoot::request))...)
(defmethod hunchentoot:process-request :before ((*request* hunchentoot::acceptor))...)
共に全く引っかかりません。(一度も実行されないって事です)
あと、この変換後の値で通常のディスパッチをさせたいのですが、そのやり方も教えて頂けませんでしょうか。
ググってもうまくサンプルが見つけられません。HUNCHENTOOTのドキュメントは簡単過ぎて私には全く役に立ちません。
ちなみにLISPもCLOSもWEBアプリケーションも初心者ですんで見当外れな事を書いてるかもしれませんので
目的が達成出来るなら手法にはこだわりません。ヒントで構いませんのでお願いします。

93 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 19:48:07.09
Apacheやnginxをリバースプロキシに仕立てた方が楽な気がする。
コンテンツごとに別々のacceptor作って。

94 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 20:51:44.84
>>93
ありがとうございます。
それも検討してみます。Apacheなんかで受けて各々振り分ける形ですよね。

あとは全てのアクセスを引き取って自分でディスパッチャー実装しちゃうとかも考えています。
レンタルVPSなんでメモリーがタイトなんですよ。出来たら裏で重い処理を走らせたいし。
アクセスはほとんど無いんで勿体ないってのもあります。

やり方さえ分かれば数行で出来る処理だと思うんだけどいかんせん資料が見つからないんですよ。
全称関数に:beforeを付ければ処理に割り込めるってのはあってます?
hunchentootのソースコード読めば理解出来るものでしょうか?
googleコードサーチも終わっちゃったんで、サンプル探すのに
koders上でhunchentootで検索しても25(重複入れても59)件しか無いとかどうしましょう。

あと、PORT指定なんかしてたんで混乱してました。
http://cc.bb.com/AA/BB.html => http://cc.bb.com/cc/AA/BB.html
ですね。自分でも笑っちゃいます。

95 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 22:28:50.87
なるほど。じゃあ、hunchentoot:acceptor-dispatch-requestの特殊化は?
適当にacceptorを継承したクラスを作って、それ用のacceptor-dispatch-requestを定義して、
そのメソッドの中でrequestのホストを見て処理を分岐すれば良さそうな気がする。
acceptor.lispとかeasy-handlers.lispに書いてる既存の定義を見ればやり方は分かると思う。

流し読みなんで外してたらごめん。

96 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 22:36:28.40
hunchentoot-vhost.lispってのがある。

97 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 22:43:35.76
これか。

> (ql:system-apropos "vhost")
#<SYSTEM hunchentoot-vhost / hunchentoot-vhost-20110418-git / quicklisp 2012-03-07>


98 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 23:34:26.97
>>95
流石です。発想が柔軟ですね。
私の中ではまだどうもLISPとオブジェクト指向が繋がっていないんですよ。
コードまで参照して下さったのですか?
理屈の上ではそれで行けそうです。あとは私の努力次第ですかね。
ありがとうございます。

>>96
ありますね。これは用途的にはバッチリみたいなんですが
使い方が簡単には見つかりませんね。探してみます。
ソースは短いんですけど私には難しいです。

>>97
お陰様でQLでロードまでは出来ました。

99 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 00:27:47.14
>>98
サンプルコード書いたよー。

http://paste.lisp.org/display/128721

hunchentoot-vhostは~/quicklisp/dists/quicklisp/software/hunchentoot-vhost-20110418-gitに
READMEがあるので、そこに使い方書いてるよー。

100 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 00:40:29.33
script-nameの変更ミスってたので修正。

http://paste.lisp.org/display/128725

101 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 01:52:24.31
>>99
vhostのそれをずっと見ていたのですがserverに何入れるのかとか
ずっと悩んでいました。hunchentoot:serverってあるのに。。。
LISPのドキュメントやエラーメッセージなんか今一つコツが掴めません。
エラーなんかもパラメタの数が違うとかは見つかるのですが
どこのエラーだか見当もつきません。書いてあるのですかね?

>>100
素晴らしい!
localhostと127.0.0.1で切り替わりました。これで行きたいと思います。
わざわざサンプルまでありがとうございます。
hunchentoot:acceptor-dispatch-requestなんですね。
もう一つ下だったか。。。

102 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 03:15:19.72
>>100さんのお陰さまで思い通りのものが出来ました。
要望はありませんが、嬉しいので勝手にあげます。

以下を追加するだけで今までのコードを一切変更する事なく
ttp://cc.bb.aa/AA/BB.html => ttp://cc.bb.aa/aa/bb/cc/AA/BB.html
として扱う様になります。(仕様が変わっていますが、当初の目的はこれです)
ASPECT指向(って言うのかな?)万歳???
---
(defmethod hunchentoot:acceptor-dispatch-request :before ((acceptor hunchentoot:easy-acceptor) request)
(flet ((add-prefix (x)
(format nil "~{/~a~}~a" (reverse (split-sequence:split-sequence #\. (hunchentoot:host))) x)))
(setf (slot-value request 'hunchentoot::uri)
(add-prefix (hunchentoot:request-uri request))
(slot-value request 'hunchentoot::script-name)
(add-prefix (hunchentoot:script-name request))))
)
---
fletやらadd-prefixなんかの意味は分かっていないのですが、動いたのでOKです。

103 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 03:52:19.47
おめっとー。

fletはローカルな関数を定義する特殊形式で、
件のコードではadd-prefixってローカル関数を定義してる。
似たような処理が複数あるけど他では使わない、ってときに使うと便利。

104 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 18:56:29.74
>>103
ありがとう!
LISPすごいよ!他の言語じゃこうはならないんじゃないかな。
LISPもっと早く始めていればよかったな。
LISPERの人に怒られそうだけど、括弧がキモくて避けていたんですよね。
UNIXシェル程度にLISPのREPLが使えてたら生産性が段違いだったろうに。

fletも一応軽くネットで調べたんですけどよく分からなかったのですよ。
>似たような処理が複数あるけど他では使わない、ってときに使うと便利。
と言われてみると何となくやってる事がわかりますね。
ありがとうございました。

105 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 01:48:02.07
(flet ((test (x)
(not (pathname-match-p x #p"~/quicklisp/dists/**/"))))
(cl-fad:walk-directory "~/quicklisp/" #'print :test #'test))

106 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 02:04:25.45
ちょっと訂正。多分これで大丈夫な気がする。

(flet ((test (x)
(not (pathname-match-p x #p"~/quicklisp/dists/**/*"))))
(cl-fad:walk-directory #p"~/quicklisp/" #'print :test #'test))

107 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 21:50:35.95
paul grehamのon lispにmappendというユーティリティ関数が出てきます。
mapcarした物をappendで繋げるという関数です。その実装がこうなっています。
(defun mappend (fn &rest lsts)
(apply #'append (apply 'mapcar fn lsts)))

なぜ&restを使っているのでしょうか?
可変長にした所で可変長の引数を使うとエラーになりますし ex: (mappend #'identity '(asdf zxcv) '(asdf zxcv))
applyを使いたいがためにしか思えません。(applyを使うと周りの括弧が一つ外れるが、&restは副作用で周りに括弧が一つつくから)

↓なぜこうしないのでしょうか?
(defun mappend (fn lsts)
(apply #'append (mapcar fn lsts)))

108 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 22:07:14.32
>>107
2引数以上取れる関数を使えや
ex: (mappend #'list '(asdf zxcv) '(asdf zxcv))

109 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 22:09:35.99
>>107
エラーが出てるのはidentityがひとつの引数しか取らないからだと思う。

(mappend #'list '(0 1 2) '(3 4 5) '(6 7 8))
;=> (0 3 6 1 4 7 2 5 8)

後者の場合、多くのケースでわざわざリストを一度作って渡さないといけなくて不便。

(mappend-2 #'identity '((0 1 2) (3 4 5) (6 7 8)))


110 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 22:28:23.29
>>108,109
なるほど!2つ以上の引数を取る関数について考えていませんでいた。
その際&restが生きてきますね。御二方レス有難うございました

111 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 22:30:18.29
あと書き忘れたけど、>>107の後者のは意味変わっちゃってる。mapcarの部分で。

112 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 23:12:38.27
意味が変っちゃってるというのは後者で(mappend #'list '(asdf zxcv) '(asdf zxcv))
というような事ができないという事を言いたいのですか?

113 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 01:57:15.50
試せばすぐ分かるのに。データの渡し方を別としても、関数の挙動が変わってる。

(mappend #'list '(asdf zxcv) '(asdf zxcv))
;=> (ASDF ASDF ZXCV ZXCV)

(defun mappend-2 (fn lsts)
(apply #'append (mapcar fn lsts)))

(mappend-2 #'list '((asdf zxcv) (asdf zxcv)))
;=> ((ASDF ZXCV) (ASDF ZXCV))

(defun mappend-3 (fn lsts)
(apply #'append (apply #'mapcar fn lsts)))

(mappend-3 #'list '((asdf zxcv) (asdf zxcv)))
;=> (ASDF ASDF ZXCV ZXCV)

114 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 20:37:11.59
その事でしたか。&restを使わない + applyを使わない で
&restもapplyも使っている関数を再現しようとした所でした。
(mappend #'list '(asdf zxcv)) ;=> (asdf zxcv)
(mappend-2 #'list '(asdf zxcv)) ;=> (asdf zxcv)

引数を2個取る関数について考慮していなかったのでダメでしたが。
では、これにて失礼します。ありがとうございました。

115 :デフォルトの名無しさん:2012/04/11(水) 20:59:50.24

MacOSX(LION) の CLISPにASDF-INSTALL を導入したいのですがやりかたがどうにもわかりません。
いちばん普通のやりかたはどうやればいいのでしょうか。

116 :デフォルトの名無しさん:2012/04/12(木) 01:58:54.87
今はASDF-InstallよりもQuicklispを使った方が良いと思う。
インストールもquicklisp.lispをロードして画面の指示に従うだけだし。

http://www.quicklisp.org/beta/
http://cl.cddddr.org/index.cgi?Quicklisp

117 :デフォルトの名無しさん:2012/04/12(木) 21:15:14.31
Gauche-tkとな?

118 :デフォルトの名無しさん:2012/04/12(木) 21:37:40.36
もっと波動を送りたい。


119 :デフォルトの名無しさん:2012/04/12(木) 21:58:44.01
ここはCLだぜ

120 :デフォルトの名無しさん:2012/04/13(金) 00:05:59.70
>>116 
ありがとうございました。おかげさまですんなり行きました。
いいですねQUICKLISP。


121 :デフォルトの名無しさん:2012/04/13(金) 00:48:11.62
>>120
上手くいったようで何より。楽だよね。

122 :デフォルトの名無しさん:2012/04/13(金) 20:48:17.87
>>119
Lisp Schemeスレと間違えてたw

123 :デフォルトの名無しさん:2012/04/20(金) 01:31:19.33
http://www.sbcl.org/platform-table.htmlからリンクされているsbclのwindows forkを使って居ます
外部プログラムを動かそうとして
CL-USER> (sb-ext:run-program "ls" '())
こう書いたら
Couldn't fork child process: No error
[Condition of type SIMPLE-ERROR]
となりました
どうすればよいのでしょうか


124 :デフォルトの名無しさん:2012/04/20(金) 07:46:52.34
>>123
こうすれバインダー。

(sb-ext:run-program "ls" nil :search t)

> :search
> Look for program in each of the directories in the child's $PATH environment variable.
> Otherwise an absolute pathname is required.

125 :デフォルトの名無しさん:2012/04/20(金) 09:22:21.47
>>124
できました!ありがとうございます。

126 :デフォルトの名無しさん:2012/04/20(金) 11:05:46.73
同じ引数の取り方をする違う関数を効率よく作成したいのですが方法が分かりません
たとえば
(defun foo1 (arg1 arg2)
(princ (+ arg1 arg2)))

(defun foo2 (arg1 arg2)
(princ (- arg1 arg2)))

(foo1 1 2)や(foo2 3 4)とする動作を単純化して、
(foo #'+ 5 6) や (foo #'- 7 8)でokにする方法はありますか

127 :デフォルトの名無しさん:2012/04/20(金) 11:55:38.46
>>126
うほほーい。

(flet ((f (fn &rest rest)
(princ (apply fn rest))))
(values (f #'+ 5 6) (f #'- 7 8)))

個人的には畳み込み。

(ql:quickload :alexandria)
(let ((fx (alexandria:compose #'princ #'+))
(fy (alexandria:compose #'princ #'-)))
(values (reduce fx '(5 6))
(reduce fy '(7 8))))

128 :デフォルトの名無しさん:2012/04/20(金) 19:48:28.18
>>126
(defun foo (fn x y)
(princ (funcall fn x y)))

もしくは可変長引数を使って
(defun foo (fn &rest args)
(princ (apply fn args)))

呼び出し方はどっちも (foo #'+ 5 6) とかでおk

129 :デフォルトの名無しさん:2012/04/20(金) 21:06:36.46
リストのatomの一文字目をもとにグループ分けする処理を書きました。
(remove-if (lambda (x) (string= "@" (subseq (string x) 0 1))) '(t1 t2 @t3 t4 @t5 t6 @t7 t8 t9))
これでremove-ifとremove-if-notで@がついているグループとついていないグループに分けられました。

つぎに、@が出現したらその直後のatomを
((@t3 t4) (@t5 t6) (@t7 t8))
のようにまとめて、残った物は
(t1 t2 t9)
とリストにまとめて最終的にvaluesで両方を返したいです。
リストの先読み?が必要そうだと思っているのですが処理を思いつきません。
よろしくお願いします。

130 :デフォルトの名無しさん:2012/04/20(金) 21:40:38.36
>>129
'(@t1 @t2 @t3)の場合はどうなってほしいの?

131 :デフォルトの名無しさん:2012/04/20(金) 21:54:16.68
>>129
@つきシンボルの直後がatomでない場合は?

132 :129:2012/04/20(金) 22:06:04.23
説明不足ですみませんでした
>>130
((@t1 @t2) (@t3 nil))
こういう風にまとめたいです
つまり左から走査して@~のつぎはとりあえずまとめてしまい、
尻切れトンボになっているときはnilで補完する、ということです

>>131
その場合も強制的にまとめてしまいたいです
たとえば
'(@t1 (test) @t3 '())
これは
((@t1 (test)) (@t3 nil))
こういう風にです

133 :デフォルトの名無しさん:2012/04/20(金) 23:03:36.25
動きがなんか、キーワード引数っぽいね

134 :デフォルトの名無しさん:2012/04/20(金) 23:33:41.06
>>129
fare-matcherを使いたくない場合は頑張って条件分岐書いてくだしあ。

(ql:quickload :fare-matcher)

(defpackage :fare-matcher.use (:use :cl :fare-matcher))
(in-package :fare-matcher.use)

(labels ((@-p (x)
(match (coerce (string x) 'list)
((cons #\@ _) t)
(_ nil)))
(rec (rest acc)
(match rest
(() (values (nreverse (car acc)) (nreverse (cdr acc))))
((like-when (list x) (@-p x))
(rec nil (cons (cons (list x nil) (car acc)) (cdr acc))))
((list x)
(rec nil (cons (car acc) (cons x (cdr acc)))))
((like-when (list* x y rest) (@-p x))
(rec rest (cons (cons (list x y) (car acc)) (cdr acc))))
((cons x rest)
(rec rest (cons (car acc) (cons x (cdr acc))))))))
(values (rec '(t1 t2 @t3 t4 @t5 t6 @t7 t8 t9) (cons nil nil))
(rec '(@t1 @t2 @t3) (cons nil nil))
(rec '(@t1 (test) @t3 '()) (cons nil nil))))

135 :デフォルトの名無しさん:2012/04/20(金) 23:47:06.52
あと@かどうかを調べるときの処理は、subseq使うより、

(defun @-p (x) (eql (position #\@ x) 0))

とかのが効率良いと思う。subseqは新しくシーケンス作るので、
それが必要な場合以外では効率悪いで。

136 :デフォルトの名無しさん:2012/04/20(金) 23:50:47.76
>>127-128
ありがとうございます
ご指摘のとおりfuncallかapplyを使うことでokでした
http://common-lisp.net/project/alexandria/draft/alexandria.html
alexandriaの存在は知っていましたがcompose関数をこう使うとは分かりませんでした
大変勉強になります

137 :デフォルトの名無しさん:2012/04/20(金) 23:51:36.57
出遅れた… orz
Scheme版書いてみて、移植。
Common Lisp的にはどうやるのがフツー?

(defun test (lst)
(labels
((myloop (r1 r2 lst)
(if (null lst)
(values r1 r2)
(if (and
(symbolp (car lst))
(string= "@" (subseq (string (car lst)) 0 1)))
(myloop (append r1 `((,(car lst) ,(if (null (cdr lst)) '() (cadr lst))))) r2 (if (null (cdr lst)) '() (cddr lst)))
(myloop r1 (append r2 (list (car lst))) (cdr lst))))))
(myloop '() '() lst)))

138 :デフォルトの名無しさん:2012/04/21(土) 00:02:42.63
remove-if 使って書こうとして挫折して、自力でコード書いたら
キショいコードが出来上がったという、どうしようもない結果になったでござる
http://ideone.com/1JVva

139 :デフォルトの名無しさん:2012/04/21(土) 00:11:52.06
脳内ステレオタイプCommon Lisper曰く、

* Common Lispの文化ではnullで空リストかどうか判別しない(() = nil)
* よって、'()とかないわー。nil以外使ったことないわー
* 再帰を使わずにloopやiterateを使うことが多い
* lstという変数名はScheme文化なので堂々とlistと書け
* 気が利いた奴はcarやcdrではなくdestructuring-bindを使う
* appendは甘え

だけど、そんな非実在Common Lisperとか気にせず好きなスタイルで良いのではないかと思う。

140 :デフォルトの名無しさん:2012/04/21(土) 00:57:18.84
>>139
>* appendは甘え
ここ詳しく聞きたい

141 :デフォルトの名無しさん:2012/04/21(土) 00:58:18.08
>>135
それだと最初の文字以外も調べちゃうから

(defun @-p (x) (eql (elt (string x) 0) #\@))
(defun @-p (x) (eql (char (string x) 0) #\@))

の方が良くね?

142 :デフォルトの名無しさん:2012/04/21(土) 01:37:53.52
>>140
Schemeでもそうなんだけど、consで逆順に繋いでいって、最後に反転した方が効率が良いんだ。
appendで繋げていくと、最終的に不要な中間データが複数作られるのでかなり効率が悪い。

;; ある処理系でのappendの実装
(defun append (&rest lists)
(declare (dynamic-extent lists))
"Construct a new list by concatenating the list arguments"
(if lists
(let* ((head (cons nil nil))
(tail head))
(declare (dynamic-extent head)
(cons head tail))
(do* ()
((null lists) (cdr head))
(let* ((list (pop lists)))
(if (null lists)
(rplacd tail list)
(dolist (element list)
(setq tail (cdr (rplacd tail (cons element nil)))))))))))

これは、Lispでリストに要素を追加していくときに良く使われる定番の手法なので、
覚えておくと、他人のコード読むときなんかでも便利だと思う。

143 :デフォルトの名無しさん:2012/04/21(土) 06:49:28.22
prognて何の略ですか

144 :デフォルトの名無しさん:2012/04/21(土) 07:40:00.28
prognて何の略ですか

145 :デフォルトの名無しさん:2012/04/21(土) 09:54:14.37
(string :test)で"test"が得られますが
(x :test)で":test"を得るような関数xは作成可能でしょうか?

146 :デフォルトの名無しさん:2012/04/21(土) 10:03:00.28
>>145
(format nil "~S" :test)

147 :デフォルトの名無しさん:2012/04/21(土) 11:10:19.18
>>146
formatでできるのですか。盲点でした。
ありがとうございました。

148 :デフォルトの名無しさん:2012/04/21(土) 14:34:41.30
>> 142
解説してるテクニックが前半と後半で違くね?
cons+nreverseと、cdrを繋いでいく方法の2種紹介ってことだったらわかりづらい説明だね
あと、なんでもappendってのはSchemeでも駄目でしょ

149 :デフォルトの名無しさん:2012/04/21(土) 19:57:11.58
>>148
最終的には 「tconc とか queue って呼ばれてるものを使え」 になるような気が…


150 :デフォルトの名無しさん:2012/04/21(土) 22:13:44.75
素人すぎて申し訳ないんですが、人工知能の勉強がてらlispを初めてみたいのですが、sbclをダウンロードしたところで
ギブアップしてしまいました。どなたかこのページを解説していただけませんか。http://www.sbcl.org/getting.html

151 :デフォルトの名無しさん:2012/04/21(土) 22:15:06.19
>>150ちなみにOS Xです

152 :デフォルトの名無しさん:2012/04/21(土) 22:27:11.15
>>150ちなみにOS Xです

153 :デフォルトの名無しさん:2012/04/21(土) 22:48:12.74
解説もくそも書いてあるまんまなんだけど。
とりあえず何がわからんのか質問してみそ。

154 :デフォルトの名無しさん:2012/04/21(土) 23:16:41.58
>>153まずここが分からないです!
unpack the tarball:
bzip2 -cd sbcl-1.0.56-x86-linux-binary.tar.bz2 | tar xvf -
replacing sbcl-1.0.56-x86-linux-binary.tar.bz2 with the name of the tarball you downloaded. Then enter the directory which was unpacked, and run the installation script to install SBCL in your /usr/local directory:
cd sbcl-1.0.56-x86-linux
sh install.sh

155 :デフォルトの名無しさん:2012/04/21(土) 23:17:34.35
>>154
ターミナルから入力するコマンドだから
しばらく一般的なcui操作に慣れた方がいいかと

156 :デフォルトの名無しさん:2012/04/21(土) 23:25:19.71
質問です。
指定した文字を複数個連続して作りたいのですが、
(defun repeat-string (num string)
(format nil "~{~A~}" (loop repeat num collect string)))
(repeat-string 100 "?")
これで一応はできるのですが、
loopを使わずに出来ないものでしょうか。

157 :デフォルトの名無しさん:2012/04/22(日) 00:02:49.72
>>156
(make-string 100 :initial-element #\?)

158 :デフォルトの名無しさん:2012/04/22(日) 00:06:08.17
>>148
流石にそんなアクロバティックな誤読されても困る。最初のコメントに書いてあるように、
斯様にappendは非効率的だから、使う場合に注意を要するって意味なんだけど。

159 :デフォルトの名無しさん:2012/04/22(日) 00:08:46.28
最初のコメントに書いてあるっていうのは語弊があったな。
つまり「例えばある処理系ではこういう実装をしているけど、非効率的でしょ?」って話。

160 :デフォルトの名無しさん:2012/04/22(日) 00:11:08.50
>>156
文字を連続ってことなら157の方法だね。
文字列ってことなら
(defun repeat-string (num string)
(format nil "~V@{~A~:*~}" num string))
とか

161 :デフォルトの名無しさん:2012/04/22(日) 00:15:19.23
ああ、ごめん。理解したわ。俺が悪かった。「これは」って代名詞が混乱させたのか。
「cons+reverseは」って置き換えてくれるとありがたい。

162 :デフォルトの名無しさん:2012/04/22(日) 00:30:44.49
>>157 >>160
ありがとうございます。



163 :デフォルトの名無しさん:2012/04/22(日) 20:14:48.90
>>155
CUI勉強してやってみましたが、sh install.shを打ち込むと、
mkdir: /usr/local: Permission deniedとなります。次はどうすればいいでしょうか

164 :デフォルトの名無しさん:2012/04/22(日) 20:38:50.28
まずMac OS X用のbinary持ってこいよ。そしたら、

$ sudo sh install.sh

165 :デフォルトの名無しさん:2012/04/22(日) 21:36:18.49
>>164
mac os x用のbinaryとはなんでしょうか

166 :デフォルトの名無しさん:2012/04/22(日) 21:46:46.84
http://www.sbcl.org/platform-table.html
ここ読め。テーブルをクリックできる。

167 :デフォルトの名無しさん:2012/04/22(日) 21:53:52.94
>>166

WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.

To proceed, enter your password, or type Ctrl-C to abort.

Password:

ってなりました

168 :デフォルトの名無しさん:2012/04/22(日) 22:01:19.53
Common Lisp スレで Mac の使い方説明せないかんの?

169 :デフォルトの名無しさん:2012/04/22(日) 22:08:23.79
>>167
Mac OS Xの初心者スレ、CUIスレ、ターミナルスレのどれかに行って。
(後ろ二つはまだあるかどうかしらんけど)

170 :デフォルトの名無しさん:2012/04/22(日) 22:30:48.43
>>166

WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.

To proceed, enter your password, or type Ctrl-C to abort.

Password:

ってなりました

171 :デフォルトの名無しさん:2012/04/22(日) 22:34:22.07
ターミナルの宿命はよ

172 :デフォルトの名無しさん:2012/04/22(日) 22:37:20.84
>>169
ありがとうございます
そっちに行ってみます

173 :デフォルトの名無しさん:2012/04/22(日) 23:16:41.98
うまくいくといいです

174 :デフォルトの名無しさん:2012/04/22(日) 23:20:49.53
とりあえずmanとグーグル先生を調べてから質問しような

175 :デフォルトの名無しさん:2012/04/22(日) 23:44:56.05
>>174
わかりました。 ありがとうございます。
それについてもターミナルスレで聞いてみます。

176 :デフォルトの名無しさん:2012/04/23(月) 13:32:13.32
>>167 のものです。今度は
GNU Make not found. Try setting the environment variable GNUMAKE.
と出てきました。これはこちらで聞いていい質問ですか?

177 :デフォルトの名無しさん:2012/04/23(月) 13:50:28.56
>>176
おおざっぱに言えば処理系を起動してからがこのスレの話題。

初心者ってのはそういうもんだというのはわかってるが、
このスレの住民からするとたいそう「もどかしい」状態。

178 :デフォルトの名無しさん:2012/04/23(月) 14:10:34.44
人工知能とのやり取りみたいだ

179 :デフォルトの名無しさん:2012/04/23(月) 14:22:34.94
>>176
lispworks試用版のmacosx版でもつかったら良いんじゃないかな
http://www.lispworks.com/downloads/index.html
とりあえず処理系動かすだけならフリーの処理系も試用版も同じかな五時間の時間制限あるけど

180 :デフォルトの名無しさん:2012/04/23(月) 16:02:49.26
lispworksはmacosxにも対応していたのか

181 :デフォルトの名無しさん:2012/04/23(月) 18:46:12.05
>>176
エラーメッセージ(の一部)でググレ。
さすがに釣りに思えて来た。

182 :デフォルトの名無しさん:2012/04/24(火) 10:41:13.06
数行のコードを試しに動かすだけなら
http://ideone.com/
とかでも。

183 :デフォルトの名無しさん:2012/04/26(木) 23:16:09.72
すぐ使えるLisp環境ならLispboxを使えばいいのでは。
ttp://common-lisp.net/project/lispbox/
WindowsとMacとLinuxに対応していて、
ダウンロードして解凍してダブルクリックすればすぐ使える。
処理系はSBCLじゃなくてCCLだけど、初心者からしたら違いはない。

184 :デフォルトの名無しさん:2012/04/26(木) 23:28:21.60
clispってcommon lispではないのですか?
On Lispの例がそのままでは動かなかったりするのですが

185 :はちみつ餃子 ◆8X2XSCHEME :2012/04/26(木) 23:39:21.30
Common Lisp の規格に沿った処理系はいくつもあるけど、規格の不明瞭なところをそれぞれの解釈で実装してたり、
そもそも規格では未定義にされていたり、規格以上の機能を提供しようと拡張されていたりすることもある。
そういった言語の微妙なところに依存してしまっている記述はあるかもしれない。
あと、定義を書く順番が関係してくる箇所もあるので、動かないという箇所を具体的に提示すればこのスレで何らかの助言を得られるかもしれない。

186 :デフォルトの名無しさん:2012/04/26(木) 23:50:21.73
>>184
CLISPは代表的なCommon Lisp処理系のひとつですよ。
オープンソースだとSBCLやCCLに次ぐくらいには使われている。
On Lispの著者のお気に入りの処理系のひとつでもあります。

>>185の言うように、書籍のミスなのか、あなたのミスなのか、
>>184の情報だけではわれわれとしても何とも言えません。

187 :デフォルトの名無しさん:2012/04/27(金) 14:33:07.78
(6 4 0 4 8 3 7 4 5 7)
このリストの各要素を逐一足し合わせて
(6 10 10 14 22 25 32 36 41 48)
こういうリストを作るにはどうすればいいですか?
reduceを使えばいいのかと思ったのですが、
reduceに#'+を渡す例を考えると最終的な値はリストではなく一つの値になってしまいます

188 :デフォルトの名無しさん:2012/04/27(金) 15:54:04.53
(loop for x in list for y = x then (+ y x) collect y)

189 :デフォルトの名無しさん:2012/04/27(金) 16:02:39.06
ありがとうございます。ばっちりです。
for ... then を使えばこんなにすっきりと書けるんですね。

190 :デフォルトの名無しさん:2012/04/27(金) 16:56:48.09
(loop for x in '(6 4 0 4 8 3 7 4 5 7) sum x into y collect y)
--> (6 10 10 14 22 25 32 36 41 48)
でもいけるね

191 :デフォルトの名無しさん:2012/04/27(金) 18:44:37.15
相変わらずloopは黒魔術

192 :デフォルトの名無しさん:2012/04/28(土) 00:04:03.22
>>187
reduceでの解ということでひとつ。

(nreverse (reduce (lambda (r x) (cons (+ (or (car r) 0) x) r))
'(6 4 0 4 8 3 7 4 5 7)
:initial-value nil))

こういうのはloopやiterate、Seriesとかの方がすっきりできる感じがする。
あるいは内包表記とかもこういうの得意分野な感じ。

https://github.com/g000001/srfi-42

CLだとこの辺とか。

193 :デフォルトの名無しさん:2012/04/28(土) 00:46:01.06
>>192を見て疑問に思ったんだけど
schemeの世界のsrfiってcommon lisp向けに移植されていないのかな

194 :デフォルトの名無しさん:2012/04/28(土) 00:59:24.42
上に書いてる

https://github.com/g000001

に大半のSRFIがあるよ。

195 :デフォルトの名無しさん:2012/04/28(土) 02:11:38.34
本当だ。ありがとう。地道にもやっていたのか。

196 :デフォルトの名無しさん:2012/04/28(土) 17:07:30.76
>>187
CL詳しくないのでHaskellで

sumlist xs = sumlist' 1 xs
where
sumlist' n xs | n > length xs = []
sumlist' n xs = sum (take n xs) : sumlist' (n+1) xs

CLにも同じ機能あると思うので、参考までに


197 :デフォルトの名無しさん:2012/04/28(土) 17:23:23.52
CLですでに回答済なのに、場違いに出て来るHaskellerって・・・。

198 :デフォルトの名無しさん:2012/04/28(土) 17:33:40.75
Haskellならscanl1を使えば一発

199 :デフォルトの名無しさん:2012/04/28(土) 17:38:35.50
Lisp で scanl を使うならこのあたりの流れが参考になるかも。
http://valvallow.blogspot.jp/2010/08/lispscanl.html

200 :デフォルトの名無しさん:2012/04/28(土) 18:09:48.51
>>197
haskellスレじゃ初心者の質問が無くて暇なんじゃよ


201 :デフォルトの名無しさん:2012/04/28(土) 19:46:36.42
>>200
某人の話題で揉めたばかりなのに、場を読まないと嫌われるぞ。

202 :デフォルトの名無しさん:2012/04/28(土) 19:49:17.40
リーダーマクロを勉強するにはどういうものを読めばいいのでしょうか?

203 :デフォルトの名無しさん:2012/04/28(土) 20:01:19.53
PCL

204 :デフォルトの名無しさん:2012/04/28(土) 20:52:48.87
某人ってよく見掛けるけど最近出てきたネットスラングだよね。

205 :デフォルトの名無しさん:2012/04/29(日) 00:46:24.19
(let ((pat '(T F)))
(dolist (n1 pat)
(dolist (n2 pat)
(fresh-line)
(format t "~A-~A" n1 n2))))
T-T
T-F
F-T
F-F

このようなdolistを100個以上重ねようと思うのですが、
短縮して書く方法は何かあるでしょうか。

206 :デフォルトの名無しさん:2012/04/29(日) 02:16:38.52
(defmacro nested-dolist (bindings &body body)
"1. ネストした dolist"
(if (null bindings)
`(progn ,@body)
`(dolist ,(car bindings)
(nested-dolist ,(cdr bindings)
,@body))))

(defmacro with-pattern-comb ((var pat ntimes) &body body)
"2. nested-dolist をつかってパターンを N 段ネストで呼ぶ"
(let (($pat (gensym "PAT"))
($vars (loop for n below ntimes
collect (gensym "VAR"))))
`(let ((,$pat ,pat))
(nested-dolist ,(mapcar (lambda (x) (list x $pat)) $vars)
(let ((,var (list ,@$vars)))
,@body)))))

CL-USER> (with-pattern-comb (x PAT 3) (format t "~{~A~^-~}~%" x))
T-T-T
T-T-F
T-F-T
...

207 :206:2012/04/29(日) 02:19:13.34
しかしたとえ2要素のリストでも、100段重ねると 2^100 回。ループおわらんよ。
目的がよくわからんからアレだけど、別の作戦を考えたほうがいいのでは?

208 :デフォルトの名無しさん:2012/04/29(日) 10:48:44.82
>>206-207
ありがとうございます。ご指摘のとおりで、少ない回数ならその処理で回せますが
大きくなるとお手上げですね。
考え直します。

209 :デフォルトの名無しさん:2012/04/30(月) 21:48:35.92
俺リーダーマクロを定義すると他のライブラリをコンパイルするときにしょっちゅう衝突を起こして困る。
例えばデバッグプリントをGauche風に#=expressionに割り当ててたらcl-annotと衝突したし。

210 :デフォルトの名無しさん:2012/05/04(金) 18:34:41.69
汎変数を用いる関数は関数名の末尾にfが付いている場合があるのですが
(incfやconcfなど)
これは何の頭文字なのでしょうか?

211 :はちみつ餃子 ◆8X2XSCHEME :2012/05/04(金) 18:41:45.26
form じゃね?

212 :デフォルトの名無しさん:2012/05/05(土) 16:51:50.29
setfが元祖です。

213 :デフォルトの名無しさん:2012/05/05(土) 22:06:19.63
LISPの長年の疑問

なんでたかが式の評価結果となるシンボルの値を設定するのにsetfみたいなしかけが必要なんだろう?
いや、現状そうせざるを得ないのはわかるが、言語仕様の修正でなんとかならなかったのだろうか?
式言語なのに、LISPだけがこんなしかけを必要とするのが不思議だ。

214 :デフォルトの名無しさん:2012/05/05(土) 22:35:16.55
普通にsetとかsetqだけでいける気が。setfは汎用のセッタってだけで。

215 :デフォルトの名無しさん:2012/05/05(土) 22:37:38.28
ん? Lisp界隈では setf の対象は *単純なシンボルの値ではなくなった* からだけど。
lexical-scope が導入されたりして、 「評価結果のシンボルの symbol-value の値を更新」すればいい
時代は過ぎ去った。 HyperSpec の 5.1 Generalized Reference を参照。
(set 'foo 100) ;; シンボルの値設定しちゃうぜヒャッハー
(setq foo 100) ;; ヤベェ。quote 分セルが節約www 俺天才www <--- この頃までは「シンボルの値」モデル
(setf foo 100) ;; ついでに field 一般の更新用に拡張!!
…という話ではないのかな?
何をどう「修正」すれば何がどう「なんとかなる」のかよくわからんので外してたら補足して。

216 :デフォルトの名無しさん:2012/05/05(土) 23:19:31.09
自分も>>215の流れだと思ってた。
symbol-valueを設定するためにsetfがあるのではなくて、
setfがsymbol-valueの設定にも対応してる、みたいな関係。
なので、>>213がどういうことを主張してるのか良く分からない。

217 :デフォルトの名無しさん:2012/05/05(土) 23:24:40.05
CやMLでは、代入先の式がいくら複雑になっても特別なセッタが必要になったりしませんよね?
たぶんそれは「左辺値」という概念があるからで、LISPにも同等の概念があれば
いちいちデータの種類ごとにセッタ(それも任意の式をとれるわけでない不完全な)を用意しなくてもすむのでは? と思った。

218 :デフォルトの名無しさん:2012/05/05(土) 23:49:34.71
まあ、通常の評価の一歩手前で止める構文を導入すれば良かったのかもね。
ただしそれは式の意味領域を拡張することになるので、結構大掛かり。

219 :デフォルトの名無しさん:2012/05/05(土) 23:56:00.80
>>213
Cだって&演算子がある。Perlにも。
ある式の結果が収められる場所を知りたいこと、
場所に対する演算を行いたいことは結構ある。
C++なんて&&渡しまで出来たし。

>>217
define-setf-methodに相当する機能がある言語なんて皆無に等しい。
たぶんあなたはCLtLは理解できてないんじゃないか?
Lisp系だがTaoは結構エレガントにまとめたと思う。

220 :デフォルトの名無しさん:2012/05/06(日) 00:04:12.97
その左辺値的なものを実現するのがsetfなんだと思うよ。
そして、defsetfで任意の式に対応することができる。

あと、データの種類というか、式(place)の種類だよね?
汎変数のplaceをその都度定義するのが面倒という話は、
高機能さとのトレードオフと考えれば良いんじゃないか?

221 :デフォルトの名無しさん:2012/05/06(日) 00:04:17.77
define-setf-expanderなりなんなりで
(setf (if x y z) a)
とかやればいくらでもsetfの設定できる

222 :SCHEME餃子 ◆8X2XSCHEME :2012/05/06(日) 00:08:50.70
>>217
それはどうかな。
C++11 を見ればそのあたりの区別を考察してしまったがために更に区別が必要になって複雑なことになってるぞ。

Scheme はお前の望む形にちょっと近いかも。

223 :デフォルトの名無しさん:2012/05/06(日) 00:21:10.43
みなさんありがとう。

>220
> 汎変数のplaceをその都度定義するのが面倒という話は、
> 高機能さとのトレードオフと考えれば良いんじゃないか?

まさにこれが疑問の核心でした。
つまり
・Cの&演算子のような構文を導入することで左辺値の参照は汎用的に行えるようになる
・しかしそれではC#のプロパティのような、参照時の処理を自由に追加する機能は実現できない
という対立があって、LISPは自由度を選んだということですね。
(別の機能としてもよかったかも知れませんが)


224 :デフォルトの名無しさん:2012/05/06(日) 00:23:04.59
>>210
215のいうようにfieldっていうのが定番の説
http://lambda.s55.xrea.com/20040216.html

225 :デフォルトの名無しさん:2012/05/06(日) 00:25:58.31
>>222
schemeの該当機能は知らないのですが、私もなんとなくそんな気がします。
(e1 e2)で、e1の評価結果が関数値であれば任意の式が取れるあたり
設計思想的に自分の直感に近そうです。

226 :デフォルトの名無しさん:2012/05/06(日) 00:27:27.41
言語設計についてとかは本スレでやれば?

227 :デフォルトの名無しさん:2012/05/06(日) 00:38:59.73
馬鹿じゃねえの?
Common Lispがそんな間抜けな設計のわけねえだろ。
ちゃんと計算されてる。角度とか。

228 :デフォルトの名無しさん:2012/05/06(日) 00:46:57.81
λ職人の朝は早い
「まぁ好きではじめた仕事ですから」
最近は良い型が取れないと口をこぼした
まず、λの傾きの入念なチェックから始まる。

229 :デフォルトの名無しさん:2012/05/06(日) 00:57:42.89
こちとら傾くのが商売。
言語機能の直交性などは犬にでも喰わせちまえってんだ!

230 :デフォルトの名無しさん:2012/05/06(日) 01:01:21.13
assocとsetfの食い合せが悪い。
assocのちょっとした工夫が、後のsetfのあだとなった。

231 :デフォルトの名無しさん:2012/05/06(日) 01:06:31.23
横レスだけど>>215のような話はほかにもあるのかな
歴史を知ることでその関数やマクロ作者の意図を知ることが出来るような。


232 :デフォルトの名無しさん:2012/05/06(日) 01:40:55.74
setfってMacLisp由来でしょ?
shallow bindingだから>>215の説は誤りで、
(setf (car x) y)みたいな代入の汎化がしたいためでしょ。
replacaみたいな関数を個々に用意するのは馬鹿らしいし。
探索系の関数にも使えるし。

233 :デフォルトの名無しさん:2012/05/06(日) 02:04:16.82
setfの元ネタはこれ
http://www.softwarepreservation.org/projects/LISP/interlisp-d/Deutsch-3IJCAI.pdf
元ネタにインスパイアされて実装したのは、70年代MITのLispマシーングループ
Lispマシーンに導入された時もダイナミックスコープなのでレキシカルスコープ採用が契機というわけではなし
ちなみに、MacLispには、Lispマシーンからポートされたという流れ

234 :デフォルトの名無しさん:2012/05/07(月) 16:05:18.97
関数適応ではそれぞれの要素が一度評価されてるので、こういうことができるのでは
ないかと思ったのですが出来ませんでした。(評価されるのは引数だけでした)

((if t '+ '*) 3 5)

なぜ出来ないようになっているのでしょうか?

235 :デフォルトの名無しさん:2012/05/07(月) 16:16:58.39
steeleも過去の互換性は切り捨ててそうすればよかったと後に語ってる。
まあ簡単に切り捨てられるものではないが。

236 :デフォルトの名無しさん:2012/05/07(月) 20:32:39.61
scheme だとできたりしなかったけ?


237 :デフォルトの名無しさん:2012/05/07(月) 20:48:56.90
Schemeのように変数と関数の名前空間が分かれていないlispでは全部評価するのが自然な流れだけど、CLのように分かれていた場合、式として評価しない方が自然に思う
評価したとして、
(let ((car 'cdr)) (car '(a b c))) ==> a ?
(let ((f (if t '+ '*))) (f 3 5)) ==> error?
などはどう解釈すれば良いかはっきりしないし、はっきりさせたとしても今より不恰好になると思う

238 :デフォルトの名無しさん:2012/05/07(月) 21:20:09.08
なるほど。関数と名前空間が分かれていて、
同じシンボルでも引数としての評価時と関数としての評価時で参照する所が違うから、
関数部分を引数部分と同じように評価するとややこしい事になるんですね。
なんだか名前空間の分かれていないschemeのほうが整然としている気がしました。(触ったことはないのですが)
そういった整然さを捨ててまで名前空間を分けた理由とは何なのでしょうか。

(let ((+ 10) (- 5)) (* + -))
仕様の選定人の中にこういう趣味の人がいたのでしょうか?

239 :デフォルトの名無しさん:2012/05/07(月) 21:22:13.85
(let ((+ 10) (- 5)) (+ + -)) すみません訂正です。(こうしたほうが例として適切でした)

240 :デフォルトの名無しさん:2012/05/07(月) 21:28:13.96
>>238
互換性です。

241 :デフォルトの名無しさん:2012/05/08(火) 00:06:36.88
Lisp1.5からそうなんだっけ?

242 :デフォルトの名無しさん:2012/05/08(火) 00:35:45.32
つ 7.3 Property Lists
http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf

243 :デフォルトの名無しさん:2012/05/09(水) 00:08:25.25
http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/computationAtCompileTime.html
この下の方にあるgenbezマクロなのですが、
x2 y2だけgensym使って過評価保護していないのは理由があるのでしょうか?
と質問しようとしたのですがx2 y2だけ一度しか評価されないからでした。
隅まで神経が行き届いていますね。

244 :デフォルトの名無しさん:2012/05/09(水) 07:00:22.69
(defmacro aaa (x-a)
 `(defmacro bbb (x-b)
  (case x-b
   ,@(mapcar (lambda (d) ...)
      (リスト x-a の展開)))))

みたいなコードの、(リスト x-a の展開) をどのように書けば良いのでしょうか?

x-a では間違い、,x-a でも文法エラー、`,x-a も間違い、、、。
`(...,(... の中でマクロの引数の利用方法が分からないとも言えると思うのですが。

245 :デフォルトの名無しさん:2012/05/09(水) 07:58:46.65
そりゃあ、そのコードだとmapcarの中はバッククォートの外になってますし。

その(リスト x-a の展開)がどういうことをやりたいのかいまいち分かりませんが、
別のリストとつなげたいとかそういう話なら、appendやconcatenateでくっ付けるなり、
`(0 1 2 ,@x-a)とか(apply #'list 0 1 2 '(3 4 5))みたいにするなりすればいいじゃないですか! やだー!

246 :デフォルトの名無しさん:2012/05/09(水) 08:22:03.17
…なんで最後にふざけた。

247 :244:2012/05/09(水) 08:41:03.09
>> 245 (質問の書き方が悪かったです)
(リスト x-a の展開)というのは、単に
(defmacro aaa (x-a)
`(mapcar (lambda (d) d) ,x-a))
みたいに、,x-a を mapcar の2番目の引数として
ループのために利用したいといった意味です。でも上のコードでは、
,@( の内側のmapcar にて x-a を利用したいので
既にコンマの中になっていて ,x-a では使えないので困っています。
実際のコードはおおよそ以下のようになっています。 ?x-a? の書き方が?です。

(defmacro generate-data-table (x-a)
 (let ((g!arg (gensym)))
  `(defmacro query-data (,g!arg)
    (case ,g!arg
     ,@(mapcar (lambda (lst-c)
                  (setupcaselist lst-c))
         ?x-a?)))))


248 :デフォルトの名無しさん:2012/05/09(水) 08:54:04.05
普通にx-a渡せば良いじゃないっすか。

249 :244:2012/05/09(水) 08:54:18.15
>>245 の回答を読んでると、どうも、
バッククォートとカンマとマクロの関係の基本が
何もわかってないということが分かった。。。う〜。
もうちょっと自分で考えてみた方が良いかも。です。

ちなみに、Let Over Lambda の日本語版の p.128、
dlambda について、自分なりにアレンジしてみようと思いました。

250 :244:2012/05/09(水) 09:13:06.60
>>248
それだと文法ミスにはならないのですが、
(generate-data-table *DATA*)
The value *DATA* is not of type LIST.
と、*DATA* としてリストを渡しているにもかかわらず
エラーメッセージが表示されてしまうのです。

251 :デフォルトの名無しさん:2012/05/09(水) 09:15:25.49
マクロは単にコンパイルする際に定義したコードが評価されるってだけですよ。
(aaa '(0 1 2))というコードがあったら、aaaに'(0 1 2)という式を渡して評価し、
返される式がコンパイラに解釈されるだけ。

バッククォートも基本は単純で、基本はクォートと同じでリストのリテラルだけど、
中に , や ,@ といったアンクォートされる部分があったら、そこは評価する。それだけ。

どうも、その本の該当する場所で前提とされる基礎知識が足りてない気がします。
復習して基本を押さえてからの方が結果的に近道になると思います。

252 :デフォルトの名無しさん:2012/05/09(水) 09:21:04.31
>>250
そりゃあ、シンボル渡してるんだから、それをmapcarに渡してもエラーになりますよ。
マクロに渡してる*DATA*っていうのは実行時のデータじゃないんですか?
実行時に計算して初めて得られるデータとかを、コンパイル時に利用できると思いますか?

あるいは、*DATA*が最初から用意されている定数だとするなら、マクロに渡す必要はありますか?
マクロの定義内で直接使えば良いのではないですか?

253 :244:2012/05/09(水) 09:39:48.52
>>251-252
なるほど。実行時にリストになるシンボルをコンパイル時に評価しろと言っているから
問題なんですね。
ちなみにこの *DATA* については、そのうち入力から読み取って作成予定
なので、このマクロではダメですね。わかりました。

少なくとも、"読み込み時","コンパイル時","実行時" の区別が
ちゃんと理解できていないのが問題ですね。まずはそこらへんを復習します。



254 :デフォルトの名無しさん:2012/05/09(水) 23:57:54.48

http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/anaphoricMacros.html
|Norvigは,ifを次のように再定義したら便利だろうと述べたが,

|(defmacro if (test then &optional else)
| `(let ((that ,test))
| (if that ,then ,else)))

|参照透明性を侵すという観点からこのマクロを却下している.

|しかし問題は組み込みオペレータを再定義したことに因るもので,アナフォラを使ったことに因るのではない.
|上の定義のb)節は,式が「任意のコンテキスト内」で必ず同じ値を返すことを要求している.


この文章がどういう事なのか分かりません。参照透明性を侵すとありますが具体的にどのような場合に侵されるのでしょうか。
「上の定義のb)節は,式が「任意のコンテキスト内」で必ず同じ値を返すことを要求している.」とはどういう事なのでしょうか。
b節とは(if that ,then ,else)の事?
また上記のdefmacro ifは無限ループに陥りますが、あくまでifが現在の物と比べてこういう風にあれば、という理想の話だからですよね。?

255 :デフォルトの名無しさん:2012/05/10(木) 01:24:27.53
仮に if を再定義したら、
(let ((that 10)) ;; that は 10
(if (+ 5 3)
(print that) ;; 再定義版の if だと、ここで that が 8 になってる!!
...))
となる、ってのが「参照透明性を壊す」ということ。参照透明であるなら、 that の値は
10 でなければならない。 b) というのは、もう少し上のこの文章の部分。
> 参照の透明性が保たれているプログラミング言語とは,\\ a) どの部分式も,値の等しい別の式に置き換えることができ,\\
> b) 式は任意のコンテキスト内のどこで何回使われても同じ値を返す,ようなものだ.


256 :デフォルトの名無しさん:2012/05/10(木) 02:56:14.47
SBCLを使っているものですが
ASDFとquicklisp同時に使って問題ないものなのでしょうか?

257 :デフォルトの名無しさん:2012/05/10(木) 04:00:22.56
>>256
QuicklispはASDFの上に作られたものなので、ASDFないと機能せんと思いますよ。
さておき、QuicklispとASDFと同時に使うというのはどういうことを指していますか?
質問が抽象的過ぎて何とも言えません。

258 :デフォルトの名無しさん:2012/05/10(木) 06:37:18.49
>>255
レスありがとうございます。
b節とはその事だったのですね。

(if (+ 5 3)
(print that)
...)
の式はどこで使われても同じ 8 が表示されるので参照透明性を侵していないと言えませんか?

259 :デフォルトの名無しさん:2012/05/10(木) 10:37:51.84
どうして、that=8の状態を基準に考えようとするんだろう
式を普通に読む限り、字面ではthat=10と読める筈
that=10の一貫性を崩してifの中だけで有効な、字面からだけでは読み取れないルールが導入されている方がイレギュラーだとは思わないだろうか
255がわざわざ (let ((that 10)) ;; that は 10 って書いてる意味も考えよう

260 :デフォルトの名無しさん:2012/05/10(木) 11:17:08.89
ifは本来は別のコンテキストを作らないのでアウト。書いてあるだろ。

261 :デフォルトの名無しさん:2012/05/10(木) 11:41:23.64
>>257
ありがとうございました。

262 :254:2012/05/10(木) 15:12:39.09
>>259,260 レスありがとうございます。

モヤが晴れました。要点は、ある関数やマクロが元来新しいコンテキストを生成するものなのかどうかという点と
違うコンテキストであれば式の値は異なってよいという点でした。

letは元来新しいコンテキストを生成するものであるから
(let ((that 10))
  (let ((that 8))
     (print that)) ; 8
  (print that)) ; 10
の中の2つの式thatは異なるコンテキストの中の式であり値が異なっていても参照透明性は壊れていない。

ifは元来新しいコンテキストを生成するものでないから
(let ((that 10))
  (if 8 (print that)) ; 8
  (print that)) ; 10
の中の2つのthatは同じコンテキストの中にあり、しかしながら値が異なるので参照透明性が壊れている。
私は上記ifの再定義によってifも新しいコンテキストを生成するものに存在が変わった、だから
これはletのケースと同じで参照透明性を壊していないじゃないかと思ってしまいました。これがモヤでした。

しかし元来ifは新しいコンテキストを生成するものではないということが重要なのですね。
既存のコードはifがそのように変わった事など知らないので>>254のように再定義すると
変数が上書きされて今まで正常に動いていたものがうまく動かなくなる場合があるから
危険―つまり参照透明性が壊されると分かりました。

263 :デフォルトの名無しさん:2012/05/10(木) 15:53:19.12
ifの実装の都合でthen部、else部の参照の透明性が破壊されていることが問題になってる。
ifではないコンテキストを生成するような構文、
例えばletでも間違った実装をすれば同じようなことは起きうる。


264 :デフォルトの名無しさん:2012/05/10(木) 16:02:19.61
aifの話?

265 :デフォルトの名無しさん:2012/05/11(金) 15:13:00.93
http://pmeta.net/projects/cltl3/index.html
CLtL3って話があったとは知らなかったんだけど、
この動向はどうなっているの?

266 :デフォルトの名無しさん:2012/05/11(金) 15:16:14.73
死んだプロジェクトです。

267 :!256:2012/05/12(土) 23:15:44.14
ポシャってるのか。そこにも書いてあるけど、
現代風の標準ライブラリみたいのが欲しい。
もしくは、asdf みたいなライブラリインストールツールの標準化とか。
あと、マルチプロセス、マルチスレッドについてのなんらの仕様が欲しい。
コンパイラやメタオブジェクトまで仕様に含まれているのに
並列化サポートについては遅れているとしか思えない。

268 :デフォルトの名無しさん:2012/05/13(日) 01:23:55.34
http://ja.reddit.com/r/lisp/comments/tbvpe/what_happened_to_cltl3/

ASDFは事実上の標準になってるから、別に良いんじゃないかな。
マルチスレッドは、標準に入れようとすると、SchemeのR6RSどころじゃなく揉めそうな予感。

ところで、現代風の標準ライブラリって、どういうの欲しい?

269 :267:2012/05/13(日) 02:45:05.50
>>268
そうか〜。やっぱり心変わり。
並列化の仕様化については確かに揉めそう、というか不可能な感じもするので
問題なく使えるライブラリ実装があればいいか。
となるとまぁ、現状でもいいことになるか。

現代風の標準ライブラリについては、とりあえず、Ruby に有るようなもの、
って言おうと思ったけど、これは常時開発中で標準ライブラリとは言わないのかな。
計算機やネットワーク、種々のプロトコルについては日々進化してるわけだから、
仕様に入れるのはやっぱり不可能そう。

270 :デフォルトの名無しさん:2012/05/13(日) 03:48:49.09
>>269
具体的にこういう物が欲しい、欠けてる、みたいな話は良いと思う。
既存の物を知っている人が紹介できるかもしれないし、作る動機になるかもしれない。
抽象的だと議論が発散して得るものがない場合がほとんどで不毛だけど。

Rubyではないけど、Pythonにあるようなもの、というコンセプトなら

https://github.com/garaemon/clap

というのがあるけど、開発は滞りがちみたい。

271 :1/2:2012/05/13(日) 11:11:35.97
非常に簡単な DSL を作る作業についていつも困っています。
例えば、分子構造について標準入力等から読み取った1次元リストデータを、
別の入力である構造化用ルールツリーデータに従って構造化したいといった問題とか。

例:水分子: H2O
入力1:
(setf struct-mol
'("H2O"   ;分子名
 "3"    ;構成原子数
 "O" "1.35200" "2.02600" "-0.16900" ;酸素、X, Y, Z 座標値
 "H" "0.85000" "2.18800" "-0.96800" ;水素、X, Y, Z 座標値
 "H" "1.46300" "1.07500" "-0.14500" ;水素、X, Y, Z 座標値
 ))

入力2:tree で記述された構造化用ルール
(setf rule-mol
'((str 1 name nil)    ;文字列として読んでシンボル name に対応付け。
 (int 1 natom nil)   ;整数として読んでシンボル natom に。
 (nlist natom atoms   ;以下を natom 個のリストとして読んで、シンボル atoms に。結果もリストに。
  (str 1 atom nil)   ;1つの文字列を読んでシンボル atom に。
  (float 3 xyz nil)))) ;3つの浮動小数点数を読んでシンボル xyz に。

出力:
((NAME ("STO-3G"))
(NATOM (24))
(ATOMS
((("O") (1.352 2.026 -0.169))
(("H") (0.85 2.188 -0.968))
(("H") (1.463 1.075 -0.145))))

272 :デフォルトの名無しさん:2012/05/13(日) 11:12:13.32
私にとって難しいところは以下です。
1.構造化用ルールのところの natom の様に、
  一旦対応付けられたシンボルを下のルールを読むところで
  利用できるようにすること
2.struct-mol、rule-mol について2重ループ以上にする必要が有るのですが、
  基本的にどういう構造にするのか分からない。
  struct-mol 要素を rule-mol に従って読み進める時に、例えば (float 3 xyz nil) について
  処理する等、幾つかのデータをいっぺんに読むことになるのですが、どこまで読んだかを
  レキシカルスコープ変数に保存しておくのか、大きな関数内のグローバル変数に置いておくのか、
  どのようにするのがスマートなのか分からない。
3.マクロってどこらへんに出番があるの?

誰か見本のプログラムを下さい。と、いうのは甘いですか?
自分で書いたのだと70行くらいになってて、とても可読性が低い感じです。

273 :デフォルトの名無しさん:2012/05/13(日) 13:18:19.92
既にできでるっていう70行のプログラムを添削するってのなら誰かやってくれるんじゃない?

274 :デフォルトの名無しさん:2012/05/13(日) 13:29:56.92
paste.lisp.org pastebin
http://paste.lisp.org/
ここを使うとか

275 :デフォルトの名無しさん:2012/05/13(日) 14:13:12.89
(defun rule-interpreter (rules)
(lambda (data)
(labels ((take (n)
(prog1 (subseq data 0 n) (setf data (subseq data n))))
(parse-float (str)
(read-from-string str)) ;; you should use parse-number library
(apply-rule (result rule)
(destructuring-bind (type arg varname &rest subrules) rule
(let* ((num (etypecase arg
(number arg)
(symbol (caadr (assoc arg result)))))
(node (ecase type
(str (list varname (take num)))
(int (list varname (mapcar #'parse-integer (take num))))
(float (list varname (mapcar #'parse-float (take num))))
(nlist (list varname
(loop for i from 0 below num
collect (nreverse
(reduce #'apply-rule subrules :initial-value ()))))))))
(cons node result)))))
(nreverse
(reduce #'apply-rule rules :initial-value ())))))

276 :デフォルトの名無しさん:2012/05/13(日) 14:27:45.75
自分としてはこういう方が使いやすいかと思った。

http://paste.lisp.org/display/129423

277 :275:2012/05/13(日) 14:29:16.84
たぶん、文面から察するに、↑みたいなルールを解釈するプログラムを作ってるんじゃないかな?
1. ルールで表現する => コレはすごくいい考えだとおもう。状況はわからんが、ルールはもうちょっと改善できそうな…
2. 内部的に二重ループになるのはある程度はしかたない。NATOMの回数は事前にわからないんだからね。ループを一個にしても、対して性能に影響ない感じ。
3. なんでもマクロに出番があるわけではない。
私は高階関数が珍しい世代だったので、 rule-interpreterを隠蔽して、 (def-mol-parser h2o <<ルールのリスト>>) にするとか思いつくけれど
最近の Scheme の流行具合をみると、別に不要な気がしますね。

278 :275:2012/05/13(日) 14:35:17.22
自分は分子の定義がファイルにどばーっと書いてあって、それを一行ずつリストにするところまでやってあって、
ルールに従ってロードするというような場面を想像をしたけれど。データ表現なら、個人的趣味からいえば、
構造体にしたいし、分子はリストではなく配列で持ちたいなぁ。

279 :デフォルトの名無しさん:2012/05/13(日) 15:51:36.16
マルチスレッドはCLtLの頃は雑多なLispマシンがあって、
それぞれタスク/プロセス/スレッドのモデルが違ったから標準化出来なかった。
今はほぼMac OS Xを含めたUNIX/POSIX/Mach系とWindows系に絞られてきたから、
標準化しやすいのではないか?

問題はCLtLの全てをMT safeかどうか、どのようにMT safeか決めないといけないこと。
野心的にやろうとするとかなり大変。コンサバにやってもそう簡単なことではない。

280 :デフォルトの名無しさん:2012/05/13(日) 17:13:33.23
マルチスレッドは色んな路線があるから、標準化には早いでしょ。
ライブラリで十分。

281 :デフォルトの名無しさん:2012/05/13(日) 17:31:56.14
標準化と良くいうけど、標準化してユーザーや産業での採用が圧倒的に増える込みありますか?
Schemeみたいにインプリメンター主導な頭で仕様大事と考えててもCommonLispは衰退するだけだと思いますね
Quicklispみたいなものをプッシュしてユーザーが増えてからで遅くない

282 :デフォルトの名無しさん:2012/05/13(日) 17:35:55.28
プログラマの視点ならそうかもしれんが、
企業でその手の決定を下せる立場にある人にとっては
仕様が確定していることの安心感も必要だったりするぞ。

283 :デフォルトの名無しさん:2012/05/13(日) 18:17:04.62
これまでもansi仕様がありますよ。現在のansi仕様の範囲しか使わない縛りの案件今後どれだけあるんですか
どの言語を採用するかを決定する企業も大きくみてユーザーでしょう
CommonLispの言語仕様改訂を強く望んでいる大口ユーザーってどこですか
Franz位しかないのであれば、Franzのlispに機能を組み込んでおけば良いってことになりますね

284 :272:2012/05/13(日) 18:40:53.15
>>273-278 おおお。ありがとうございます。

上の課題は例ですが、私が実際に今のプログラムに必要としているものです。
275 のコードはまだ理解出来ていないのですが、
をもうちょっと読み込んで、適宜コピペさせて頂きます。(ペコリ)

他にも、私のプログラムで問題になっている
バイナリ/テキストファイルに対しての中間データの読み書きについても
すぐさま利用出来て助かります。

私一人が開発しているプログラムなので、ルールの書式についても
より良い方法が無いのか、模索中です。だからこそ、将来のルール変更に
耐えられる様に、ルールを DSL として与えるプログラム形式に
なっている必要があります。

285 :デフォルトの名無しさん:2012/05/13(日) 21:54:57.13
最終的にはXML/XSLTのS式表現になりそうな

286 :275:2012/05/14(月) 00:34:57.04
マクロなDSLがしたいという話もあったから、ほぼ同じ仕様で、
出力をマクロにした例を無理矢理つくってみた。

;; 展開形: http://paste.lisp.org/display/129423
(define-mol-rule standard-mol
(name :type string)
(natom :type fixnum)
(atoms :type list
:count natom
:children ((atom :type string)
(xyz :type float :count 3))))

CL-USER> (standard-mol data)
#S(STRUCT-STANDARD-MOL
:NAME "H2O"
:NATOM 3
:ATOMS (("O" (1.352 2.026 -0.169)) ("H" (0.85 2.188 -0.968))
("H" (1.463 1.075 -0.145))))

287 :275:2012/05/14(月) 00:35:48.06
展開形: http://paste.lisp.org/display/129428 でした…ゴメン…

288 :デフォルトの名無しさん:2012/05/24(木) 13:00:13.40
(defun first-item (item)
(first item))
(first-item '(mr, hoge))
こうすると当然のことですがComma not inside a backquote.と出ます
mr,の部分を文字列にせずに処理する方法は何かありますか

289 :デフォルトの名無しさん:2012/05/24(木) 13:08:30.93
>>288
(first-item '(mr\, hoge)) --> |MR,|
文字列にせずに処理する方法 っていう意味は分からなかった

290 :デフォルトの名無しさん:2012/05/24(木) 13:12:57.01
>>289
'("mr," hoge)とせずに、という意味でした
エスケープするということをすっかり忘れていました
ありがとうございます。

291 :デフォルトの名無しさん:2012/05/24(木) 13:17:20.68
シンボル名にcommaは使えないんじゃなかった?

292 :デフォルトの名無しさん:2012/05/24(木) 13:18:21.54
と思ってたらエスケープすれば使えたのかorz

293 :デフォルトの名無しさん:2012/05/26(土) 15:13:44.83
次のように動作する関数wanted-fnを作りたいのですが、うまくいきません。
お力を貸して頂けると大変ありがたいです。

(wanted-fn '((a 0 1 (b 2 3) 4 5)
(c 6 (d 7) 8 9 (e 10) 11)
(f 12 13 (g 14 (h 15) 16) 17 18)
(i 19 20) ...))
=>
((B 0 1 2 3) (A 4 5)
(D 6 7) (E 8 9 10) (C 11)
(H 12 13 14 15) (G 16) (F 17 18)
(I 19 20) ...)

アルファベットの部分には任意のシンボルが入り、
数値の部分には任意の数値または任意の文字列が入ります。
したがって、上の例のアルファベット順や数値順を定義に利用することはできません。
また、'...'は同じような式が任意の数(ただし有限個)続くということを表しています。

294 :デフォルトの名無しさん:2012/05/26(土) 15:59:11.01
どう「うまくいかない」のか説明がないんだが…?
(defun wanted-fn (data &aux fn args)
(labels ((push-fn (x) (push x fn))
(push-arg (x) (push x args))
(flush-unit (result)
(prog1 (append result
(list (cons (car fn) (reverse args))))
(setq fn (cdr fn)
args ())))
(parse-unit (lst &aux result)
(dolist (e lst)
(etypecase e
(symbol (push-fn e))
(string (push-arg e))
(number (push-arg e))
(list (setq result (append result (parse-unit e))))))
(flush-unit result)))
(apply #'append (mapcar #'parse-unit data))))

295 :293:2012/05/26(土) 16:26:08.44
>> 294さま
ありがとうございます!!
再帰を使って関数を定義しようとしたのですが、
どういう手順で考えれば、このような再帰関数を作ることができるのか、
うまくいかなかったのであります!!
感激であります!!
これから関数の動作を理解すべく、じっくりコードを読み込む所存であります!!

ペコリ。

296 :294:2012/05/26(土) 16:41:14.32
再帰がわかんなかったのか?なら、そーゆう疑問を最初にいわねーと。
(defun wanted-fn (data)
(labels ((parse-unit (data fn args result)
(if (null data)
(cons (cons (car fn) (reverse args)) result)
(destructuring-bind (x . xs) data
(etypecase x
(symbol (parse-unit xs (cons x fn) args result))
(string (parse-unit xs fn (cons x args) result))
(number (parse-unit xs fn (cons x args) result))
(list (parse-unit xs fn nil (parse-unit x fn args result))))))))
(apply #'append (mapcar (lambda (x) (reverse (parse-unit x nil nil nil))) data))))


297 :294:2012/05/26(土) 16:48:15.29
*考え方*
1. 結果が (fn arg1 arg2 ...) のリストになる。
2. リストを一個ずつパースすることから、終了条件は (null ...)
3. 返す値は (cons (fn arg1 arg2 ...) result) になる。
4. fn はその階層のリスト?をたどった先頭要素 -> (car fn)
5. args はリスト終端時に木をたどったもの全部 -> (reverse args)
=> これで (if (null data) (cons ....) ....) の形が完成
6. あとは、 car / cdr を分解して、関数呼び出しに変換する。


298 :293:2012/05/26(土) 16:58:52.92
>> 294さま
再び、ありがとうございます。
美しいコードなので、動作の構造がすごくわかりやすくて、ためになります。
再帰でdestructuring-bindをこのように使い、リストを小さくしていく手法は初めて見ました。
大変勉強になります。

299 :293:2012/05/26(土) 17:00:24.62
>> 294さま
ああ、考え方まで、参考になります。

300 :293:2012/05/26(土) 17:19:31.84
>> 294さま
今気づいたのですが、「ああ」の意味は二義的ですね。
正確に言うと、ここでの「ああ」は感嘆の「嗚呼」であって、
ついでに「ああ、どーもね」という意味ではありません。
細かなことですが、せっかく教えていただいたのに無礼な態度は取りたくないので、
取り急ぎ。


301 :デフォルトの名無しさん:2012/05/26(土) 23:26:05.76
いいってことよ!

302 :デフォルトの名無しさん:2012/05/26(土) 23:28:18.72
実用common lispの1章に
(defun first-name (name)
"Select the first name from a name represented as a list."
(if (member (first name) *titles*)
(first-name (rest name))
(first-name)))
こういう関数が出てくるのですが(p.15)、(first-name)は(first name)のタイポでしょうか

303 :デフォルトの名無しさん:2012/05/27(日) 01:02:48.97
そだね。 (first name) が正しい。日本語版の typo かな?
手元の英語版ではちゃんと (first name) になってる。

304 :302:2012/05/27(日) 10:19:37.27
ありがとうございます。

305 :デフォルトの名無しさん:2012/05/28(月) 00:12:31.69
rplacdは何を略したものですか?

306 :デフォルトの名無しさん:2012/05/28(月) 01:18:09.48
replace cdr

307 :デフォルトの名無しさん:2012/06/01(金) 17:16:29.28
``内で,,@lstとするとlstが展開された後さらに,が付くのですが、何か簡単な方法で
,をつけないようにすることは出来ないのでしょうか?

(defmacro make-short (short long &rest rest)
`(defmacro ,short (x) `(,',long ,x ,,@rest))) ; あまりいい例ではないと思いますが
(DEFMACRO SHORT (X) `(LONGLONGLONG ,X ,ASDF ,ZXCV ,QWER)) ; macroexpand-1するとこうなります
(DEFMACRO SHORT (X) `(LONGLONGLONG ,X ASDF ZXCV QWER)) ; こうしたいのですが,',@では実現されませんでした

(defmacro make-short (short long &rest rest)
`(defmacro ,short (x) (list ',long x ,@(mapcar (lambda (x) `',x) rest))))
(DEFMACRO SHORT (X) (LIST 'LONGLONGLONG X 'ASDF 'ZXCV 'QWER)) ; 無理やりするとこうですが

308 :デフォルトの名無しさん:2012/06/01(金) 17:23:46.23
(defmacro make-short (short long &rest rest)
`(defmacro ,short (x) `(,',long ,x ,@',rest)))

これで出来ましたw
おもしろいですね

309 :デフォルトの名無しさん:2012/06/05(火) 11:11:40.28
これはどのプログラミング言語にも当てはまることだろうからここできくべきではないのかもしれないが、
初中級者から上級者へのアップグレード方法がわからない。
特にLispはコミュニティーを見つけるのも大変だしプロジェクトを見つけるのも大変。
このスレで充分だろと言われればそれだけだけどもCL上級者とコンタクトをとれる場所ってないものかな
それとどこに行けばCLのプロジェクトが見つかり、参加することができるのか…

310 :デフォルトの名無しさん:2012/06/05(火) 11:30:00.62
こちらは?
https://github.com/languages/Common%20Lisp

311 :デフォルトの名無しさん:2012/06/05(火) 11:38:54.41
>>310 さんくす
だが英語が苦手な俺にとってはできれば日本人がいるところがよいのだが…

312 :デフォルトの名無しさん:2012/06/05(火) 12:32:13.78
カンファレンスとか勉強会にでも行かないと会えないんじゃないかなー。
ネット経由ならTwitterとか使う手もあるかもしれないけど。

プロジェクトとかは日本発のもの自体が少ないから、英語無理だと選択肢が少ない。
逆に辞書引きながらでも良いなら、今の時代ならGitHubとかで交流余裕。
あとxyzzy界隈なら割と賑わってる印象。

313 :デフォルトの名無しさん:2012/06/05(火) 12:56:42.67
http://ja.reddit.com/r/lisp_ja/
https://www.google.com/reader/shared/user/09041986761111907232/label/Planet%20CL%20%E8%B6%85%E6%89%8B%E6%8A%9C%E3%81%8D%E7%89%88

とか見れば日本語のLisp情報割と見付かるよ。

314 :デフォルトの名無しさん:2012/06/06(水) 00:29:53.76
カンファレンスなら丁度、
http://international-lisp-conference.org/2012/index.html
International Lisp Conference 2012
Miyakomesse Kyoto Japan
October 21-24, 2012
というのがあるらしい。

315 :デフォルトの名無しさん:2012/06/06(水) 07:26:02.21
初中級者から上級者のトピックが不足してるのは確か.
ドキュメント的なものをアウトプットするのが楽しいという人が少ないのでしょうがない.

しかし, アプリ作ることになると結局clだけで完結するわけでもないし,
また, clが他の言語に比べて, それほど突出したり変ったりしてる訳でもないので,
(cl抜きに)中から上級のプログラマであれば, そんなに困らないのではないだろうか.
そんな風にあまり困ってない人がgithubなどで色々作って公開してるんじゃないかな.
意見交換する場があったら活発に意見交換するかというとそうでもないのですぐ廃れてる..

316 :デフォルトの名無しさん:2012/06/06(水) 08:15:51.34
http:/cl-www.msi.co.jp/solutions/knowledge/lisp-world/
http:/jp.franz.com/base/seminar-2011-11-18.html
数理システムのユーザーカンファレンスにlispセミナーというのもある。

317 :デフォルトの名無しさん:2012/06/07(木) 09:04:19.09
>>309
309みたいな質問をする人が情報収拾の主力としてるメディア、知りたい
common lispでググってる範囲なのか2chでスレ眺めてるのか
ついでにこのスレの住人御用達の主力メディア、興味ある

318 :デフォルトの名無しさん:2012/06/07(木) 09:08:54.93
ルーク、ソースを読むんだ

319 :デフォルトの名無しさん:2012/06/07(木) 12:32:59.47
>>317
309じゃないけど、おいらはGoogle readerでPlanet lispとlispを眺める程度でしかないなぁ


320 :デフォルトの名無しさん:2012/06/07(木) 13:28:38.54
Reddit、Planet Lisp、Planet SBCL、CCL WikiとCLikiのフィード。
あとはGitHubのフィードで大体話題になってる情報は入ってくる感じ。
たまにcomp.lang.lispとかも見てるけど、あんま面白いネタない気がする。

321 :デフォルトの名無しさん:2012/06/07(木) 21:24:32.51
Lispくらい上級者向けの本が多い言語も珍しいんじゃないか?
後はC++くらい?

322 :デフォルトの名無しさん:2012/06/09(土) 18:46:13.11
そんなことはない。

いろんなテーマの上級者向けの専門書で、ソースコードが載ってる場合、
シェアに比例してC言語のことが多いから、結果としてC言語が書かれた
上級者向けの本も多い。

323 :デフォルトの名無しさん:2012/06/09(土) 19:25:33.19
上級っていっても何を指すかで違ってくるんじゃない?
多いっていえば、lispはAI関係の昔の本はほんとう沢山あるね
ウェブプログラミングが近頃のプログラミングで大きな需要を占めるとすると、その辺りで上級なものっていったらほぼ0だよね
セマンティックウェブとかはあるかな
言語機能の解説でいえば、clos、コンディションシステムなどのAIブームが消える前には標準化されてなかった機能達を詳しく説明してる本は少ないね
実践CommonLisp位かな。ここいらの解説は入門書で説明するにはそこまで辿り着くのが大変だし、単体で本になっても売れるもんでもないだろうしってところで空白地帯だね

324 :デフォルトの名無しさん:2012/06/09(土) 22:02:36.95
テーマといっても言語を使い熟すということと
ある言語を使って複雑なことをするということはベクトルが違う。
>>312のいう、C++の上級者向けの本というのはC++の使い方の本のことでは?

325 :デフォルトの名無しさん:2012/06/09(土) 22:46:12.10
OnLispが初級、LetOverLambdaが中級としたときの上級は?

という感じかな

326 :デフォルトの名無しさん:2012/06/09(土) 22:55:13.67
>>325
OnLispが初級なのか、、、

327 :デフォルトの名無しさん:2012/06/10(日) 05:23:25.87
Land of Lispてどうなんですか?

328 :デフォルトの名無しさん:2012/06/13(水) 18:25:00.26
(setf test '(1 2 3 4 5 4 3 2 1 0))
このtestを属性リストのように扱って、
奇数番目のatomが奇数のときには、そのつぎのatomを足し合わせていく、
という処理をしたいのですが、よくわかりません
mapcと(lambda (x y)...)ではできませんでした。


329 :デフォルトの名無しさん:2012/06/13(水) 20:16:55.05
こういうこと?

(defun f (xs a) (if (null xs) a (if (oddp (car xs)) (f (cddr xs) (+ a (cadr xs))) (f (cddr xs) a))))
(defun g (xs) (f xs 0))

> (g test)
12

330 :デフォルトの名無しさん:2012/06/13(水) 23:24:18.96
>>328
(loop for l on '(1 2 3 4 5 4 3 2 1 0) by #'cddr if (oddp (car l)) sum (cadr l))

331 :デフォルトの名無しさん:2012/06/14(木) 18:22:41.82
>>325
On LispのようにLispの文法、意味の基本的なことは知っているのが前提の本を初級って馬鹿じゃないのか?

332 :デフォルトの名無しさん:2012/06/14(木) 19:15:20.01
>>331
基礎は入門に区分されるんじゃね?

333 :デフォルトの名無しさん:2012/06/14(木) 20:38:35.91
初級と初学との溝は深い。深くないのもあるけど。

334 :デフォルトの名無しさん:2012/06/14(木) 23:47:12.03
Let Over Lambda の前半こそが、初級だと思った。後半は上級、OnLisp が中級。

335 :デフォルトの名無しさん:2012/06/15(金) 11:16:45.24
初めてLispやる人が単体で独習できない本を初級はちょっと無理があると思われ

336 :デフォルトの名無しさん:2012/06/15(金) 12:40:14.64
>>329-330
ありがとうございます。たしかに、cddrで順に処理していき、
適宜carで条件分岐させればよかったですね。
勉強になります。

337 :デフォルトの名無しさん:2012/06/17(日) 07:03:50.16
初級と初学との溝は深い。深くないのもあるけど。

338 :デフォルトの名無しさん:2012/06/17(日) 17:02:05.43
少し前に出てましたが
International Lisp Conference
はどのような趣向で行われるようなものなんでしょう?

折角の日本開催,帰省がてら参加したいなと考えているのだけど



339 :314:2012/06/17(日) 17:45:13.64
>>338
>312の質問を見たときに
DDSKKのメーリングリストで紹介されていたカンファレンス
http://mail.ring.gr.jp/skk/201206/msg00000.html
を思い出したので書き込みしてみた。

自分はこのカンファレンスがどんなものか知らない。

340 :デフォルトの名無しさん:2012/06/18(月) 05:00:02.46
Lisp is one of the greatest ideas from computer science and a
major influence for almost all programming languages and for all
sufficiently complex software applications.

The International Lisp Conference is a forum for the discussion of
Lisp and, in particular, the design, implementation and
application of any of the Lisp dialects. We encourage everyone
interested in Lisp to participate.

We invite high quality submissions in all areas involving Lisp
dialects and any other languages in the Lisp family, including,
but not limited to, ACL2, AutoLisp, Clojure, Common Lisp,
ECMAScript, Dylan, Emacs Lisp, ISLISP, Racket, Scheme, SKILL, etc.

Topics may include any and all combinations of Lisp and:

* Language design and implementation
* Language integration, inter-operation and deployment
* Applications (especially commercial)
* Reflection, meta-object protocols, meta-programming
* Domain-specific languages
* Programming paradigms and environments
* Parallel and distributed computing
* Theorem proving
* Scientific computing
* Data mining
* Semantic web

341 :デフォルトの名無しさん:2012/06/18(月) 05:00:59.27
Lisp is one of the greatest ideas from computer science and a
major influence for almost all programming languages and for all
sufficiently complex software applications.

The International Lisp Conference is a forum for the discussion of
Lisp and, in particular, the design, implementation and
application of any of the Lisp dialects. We encourage everyone
interested in Lisp to participate.

We invite high quality submissions in all areas involving Lisp
dialects and any other languages in the Lisp family, including,
but not limited to, ACL2, AutoLisp, Clojure, Common Lisp,
ECMAScript, Dylan, Emacs Lisp, ISLISP, Racket, Scheme, SKILL, etc.

Topics may include any and all combinations of Lisp and:

* Language design and implementation
* Language integration, inter-operation and deployment
* Applications (especially commercial)
* Reflection, meta-object protocols, meta-programming
* Domain-specific languages
* Programming paradigms and environments
* Parallel and distributed computing
* Theorem proving
* Scientific computing
* Data mining
* Semantic web

342 :デフォルトの名無しさん:2012/06/18(月) 05:06:51.89
Lisp版アブダビコンバットと命名

343 :338:2012/06/18(月) 13:54:51.05
情報ありがとうございます

>>339
まだ発表者を集めておられる途中という感じですね。
今後カンファレンスの題目だけでも発表していただけると
気負わず参加できそうです

>>342
Lispに関心があれば誰も厭わずという感じでしょうか
提言って意味の取り替え面白い,
Lisperはグラップラーってのは妙に説得力あります

344 :uy:2012/06/19(火) 18:17:48.25
チャーチ数っての知ったんだけど
それ使ってプログラム作ってる奴いるの?

345 :デフォルトの名無しさん:2012/06/19(火) 22:18:39.85
もっと勉強しなよ

346 :uy:2012/06/19(火) 23:36:43.61
お前が勉強しろ

いないわけね


347 :デフォルトの名無しさん:2012/06/19(火) 23:49:27.06
お前が何も知らないだけだ
Brainfu*kでまともなもの組む奴いないだろ?

348 :デフォルトの名無しさん:2012/06/19(火) 23:50:43.94
丸投げ以下でワロタ
自分が何をしたいのかも考えられない奴が
何を威張ってるんだろうね

349 :デフォルトの名無しさん:2012/06/20(水) 02:58:29.94
何でこんなギスギスしてんのw


350 :SCHEME餃子 ◆8X2XSCHEME :2012/06/20(水) 07:29:59.23
ム板は殺伐としているのがデフォ

351 :デフォルトの名無しさん:2012/06/20(水) 07:41:53.27
SchemerがいちいちCommon Lispのスレまで出張してくんなよ。

352 :デフォルトの名無しさん:2012/06/20(水) 10:09:51.02
>>349
あなたが優しくバカの相手をしてやってください

353 :uy:2012/06/20(水) 10:52:29.39
>>347
例えがおかしすぎ

所詮2chLispスレものこの程度

354 :デフォルトの名無しさん:2012/06/20(水) 11:01:19.02
>>353
ではラムダ算法やチューリング等価の勉強でもしてみたら?
あなたの勉強が足りないだけです

355 :デフォルトの名無しさん:2012/06/20(水) 11:58:15.55
このスレでうゆの相手をしないように。
LLバトロワスレあたりでやってください。

356 :デフォルトの名無しさん:2012/06/20(水) 12:00:41.51
実用性はともかくYコンビネータとか考えるの面白いよなw

357 :デフォルトの名無しさん:2012/06/20(水) 14:10:25.53
International Lisp Conference
なるものを締切り前日(先週土曜)に知って
急いで論文書いたけど間に合わずにabstだけ登録した
もっと早く知りたかった

せっかく途中まで書いた論文だし
類似の雑誌とかあったら投稿したい

どの雑誌になるんだろう

358 :デフォルトの名無しさん:2012/06/20(水) 15:15:22.47
Association of Lisp Users は発行物とかないのかな。

ttp://www.sigplan.org/Resources/Membership ここの Print Option にあるのが、
SIGPLAN の発行物。

359 :デフォルトの名無しさん:2012/06/20(水) 17:04:38.36
関数my-length1、実効速度:遅、使用メモリ:小
関数my-length2、実装速度:速、使用メモリ:大
を意図して次の2つの関数を定義しました。

(defun my-length1 (lst)
(labels ((rec (lst acc)
(if (null lst)
acc
(rec (cdr lst) (1+ acc)))))
(rec lst 0)))

(labels ((rec (lst acc)
(if (null lst)
acc
(rec (cdr lst) (1+ acc)))))
(defun my-length2 (lst) (rec lst 0)))

しかし、disassembleしてみると、
両者は同等のアセンブリコードにコンパイルされていました (SBCL)。

上の関数my-length1は呼び出される度に局所関数を生成し、
下の関数my-length2は関数が定義時に局所関数が一度だけ生成される、
と思っていたのですが違いました。

上の意図のような使い分けをするための方法はあるのでしょうか?
情報をいただけるとうれしいです。


360 :デフォルトの名無しさん:2012/06/20(水) 17:36:34.48
359です
読み返してみたら日本語として変でした。

「上の関数my-length1は呼び出される度に局所関数を生成し、
下の関数my-length2は定義される時に一度だけ局所関数を生成する、
と思っていたのですが違いました。 」

が、ましな日本語です。

361 :デフォルトの名無しさん:2012/06/20(水) 18:14:37.24
計算の効率上、等価なクロージャを何度も生成する意味ってないですけど、
何のために必要なんでしょうか。明後日の方向に全力疾走してるように見えます。

362 :デフォルトの名無しさん:2012/06/20(水) 19:00:44.16
359です。

CTMCPのp.124以降に「局所手続きを使うこと」という節があります。
そのなかで以下のような(ニュートン法により根を求めるための)2つの関数がでてきます。
(もともとのコードはOzによるもので以下のものは私がLispに書き換えたものです)

CTMCPには「my-sqrt4ではimproveとgood-enough?がsqrt-iterの反復の度に生成されるが、
my-sqrt5ではそうではない」と書いてありました。

Lispではどうなっているのか?と思い、以下のコードを考えました。
しかし以下の2つのアセンブリコードは同等のものでした。
必要は特になく、ただ疑問だったので質問しました。

363 :デフォルトの名無しさん:2012/06/20(水) 19:02:21.35
359です(つづき)

;; ニュートン法による球根(第4版)
(defun my-sqrt4 (x)
(labels ((sqrt-iter (guess)
(labels ((improve () (/ (+ guess (/ x guess)) 2))
(good-enough? ()
(< (abs (- x (* guess guess))) 0.00001)))
(if (good-enough?)
guess
(sqrt-iter (improve))))))
(let ((guess 0.1))
(sqrt-iter guess))))

;; ニュートン法による球根(第5版)
(defun my-sqrt5 (x)
(labels ((improve (guess) (/ (+ guess (/ x guess)) 2))
(good-enough? (guess)
(< (abs (- x (* guess guess))) 0.00001))
(sqrt-iter (guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess)))))
(let ((guess 0.1))
(sqrt-iter guess))))

364 :デフォルトの名無しさん:2012/06/20(水) 19:59:17.13
>>355
uyのせいでバトロワスレが1000いったみたいだなw

365 :デフォルトの名無しさん:2012/06/20(水) 21:19:16.67
>>362
そういう話であれば、両者は本来同じ処理なのですから、
同様に効率が良いコードにコンパイルされた方が良いですよね?
なので、最近のコンパイラでは式の変換なども含めて最適化をしているそうです。
Ozについては知りませんが、何らかの事情でそういうことをしてないんでしょう。

366 :デフォルトの名無しさん:2012/06/20(水) 21:38:52.62
>>359
> (defun my-length1 (lst)
> (labels ((rec (lst acc)
> (if (null lst)
> acc
> (rec (cdr lst) (1+ acc)))))
> (rec lst 0)))

recに外側の環境(my-length1)への参照がないので、局所関数を
作る必要がない。
(rec内のlstはrec自身の仮引数だから外側の環境への参照でない)

なので、実験したければ、my-length1の仮引数を参照するように変更
するとよいかと。

367 :デフォルトの名無しさん:2012/06/21(木) 01:03:50.68
359 & 362です。
「求根」が「球根」になってた。ニュートンが開発した、たまねぎ栽培法みたいだ。Orz

>>365 さん
おっしゃる通り、非効率なソースコードでも、
きちんと最適化してコンパイルしてもらえることはありがたいことです。
他の部分はわかりませんが、my-sqrt4とmy-sqrt5のコードに関しては、
OzのコンパイラよりSBCLの方が賢いコンパイラなのですね。

>>366 さん
その通りですね。
359の例は適切な例ではなかったようです。
もう一度しっかりと本を読み返し、次のmy-sqrt2を試したところ、
my-sqrt4やmy-sqrt5とは違うアセンブリコードがでました。

;; ニュートン法による求根(第2版)
(labels ((improve (guess x) (/ (+ guess (/ x guess)) 2.0))
(good-enough? (guess x)
(< (/ (abs (- x (* guess guess))) x) 0.00001))
(sqrt-iter (guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x))))
(defun my-sqrt2 (x)
(let ((guess 1.0))
(sqrt-iter guess x))))

368 :uy:2012/06/21(木) 05:56:20.40
>>354
なめてのかお前

ラムダ計算で作れないと決め付けてるお前がまず勉強しろよ

所詮Lispスレもこの程度

369 :デフォルトの名無しさん:2012/06/21(木) 05:58:45.56
以下さわったら負け。自演に釣られても負け

370 :デフォルトの名無しさん:2012/06/21(木) 10:27:54.85
こっちでやれuy
http://toro.2ch.net/test/read.cgi/tech/1340242041/l50

371 :デフォルトの名無しさん:2012/06/29(金) 21:28:23.83
>>357
今日、またCFPが出てたよ。締切り伸びたのかな?

372 :デフォルトの名無しさん:2012/06/30(土) 11:07:25.54
個人でiphoneアプリ、Windowsアプリをマーケットに売って生き残れ

格安iPhoneEラーニング(学習動画多数あり)
http://tinyurl.com/7wj77om

コワーキングスペースJP
http://tinyurl.com/76vdrny

WEBサーバーIIS Win2008ServerVPS SqlServer Oracle MySql 言語はマーケットで売れるメーカー製のみやる
ASP.net(C#)+管理EXEアプリ(C#)+iPhone C#のソースを出さなければWEBアプリの著作権も守れる

C#マーケット Windows8 Metroアプリ WindowsPhone Surface PS Vita Xbox360 iphone(mono使用)
iPhoneマーケット iPhone iPad 予定 iTv iCar i (家電製品)

地方に安い土地を買いコンテナ型の格安高性能オフィスを建て(300万〜500万)
レンタル自習室&シェアオフィス・コワーキングで収入を得ながらそこでアプリを開発する
http://tinyurl. com/7pb2yaa


373 :デフォルトの名無しさん:2012/06/30(土) 13:06:25.13
最近のcommon lispの学術的トレンドってどういうものなの?
ここ10年ぐらいキャッチアップしていないから分からん


374 :uy ◆pdu1UZmweE :2012/07/01(日) 01:10:12.37
実際ラムダ計算のIFってIFだとだまされてたけど違うなこれ
IFじゃないよこれ
ただ引数に応じて関数の状態が変化するひとつの関数の定義に過ぎない
Yコンビネータも同じ
引数に応じてネストの個数が変わるだけのもの
つまり応用していくとソースコードから
条件分岐とループ文がなくなることが既に証明されてるわ・・・
やってらんねーな
やはり近々プログラミングという分野は消滅するとしか思えない

ソフトウェアに限界はない、
組み合わせに限界個数はない
しかしソフトウェアに、完成はある

やっている事があまりに無駄すぎる

375 :デフォルトの名無しさん:2012/07/01(日) 10:38:45.97
こいつ本当にバカだ

376 :デフォルトの名無しさん:2012/07/08(日) 22:53:03.42
Schemeでは対話インタプリタに渡せばシンボルが何を指すのかがわかるんですが、Common Lispで似たようなことをしようと思うとどうすればいいんでしょう?
やっぱググるしか無いですか

377 :デフォルトの名無しさん:2012/07/09(月) 00:14:31.67
シンボルをググる?

378 :デフォルトの名無しさん:2012/07/09(月) 02:33:17.28
>>376
describe 関数使ってみろ

379 :デフォルトの名無しさん:2012/07/09(月) 23:09:06.34
>>378
ありがとうございます

380 :デフォルトの名無しさん:2012/07/11(水) 02:05:09.06
Common-Lispの勉強のため、GNU CLISP 2.49をWindows XPにインストールしました。
Emacs等は使わず単体で使用しているのですが、
日本語を含むパス名(たとえば"P:/ソフト/test.lisp"など)が使えません。
そういうものなのでしょうか。

381 :デフォルトの名無しさん:2012/07/11(水) 07:41:16.65
>>380
CLISPの内部エンコーディングはUCS-4なので、
WindowsのAPIにそのままパスを渡してもファイルを見付けられません。
日本語版Windows XPだと確か、W系はUTF-16、A系はCP932なので。

http://cl.cddddr.org/index.cgi?%bd%e8%cd%fd%b7%cf%3a%c6%fc%cb%dc%b8%ec%a4%ce%b0%b7%a4%a4

CUSTOM:*PATHNAME-ENCODING*という変数があるので、
それを使ってWindowsにとって適切なエンコーディングを設定してください。

http://www.clisp.org/impnotes/encoding.html#enc-dflt

382 :デフォルトの名無しさん:2012/07/11(水) 08:14:56.05
とか思ったんですが、今CLISP 2.49をインストールして実行してみたら、
custom:*default-file-encoding*もcustom:*pathname-encoding*も標準でCP932ですね。
CLISPのコードは読んでませんが、コードページに合わせて設定してくれてるのかも。

何か別の問題でエラーが出てる気がするのですが、どういうエラーが出てるんでしょう?

383 :デフォルトの名無しさん:2012/07/11(水) 12:03:55.67
早速のお答えありがとうございます。
以下のようになるのです。
なお、フォルダ「ソフト」を「soft」に変更すれば正常に動作します。

[1]> (load "p:/ソフト/test.lisp")

*** - PARSE-NAMESTRING: syntax error in filename "p:/ソフト/test.lisp" at
position 3
The following restarts are available:
ABORT :R1 Abort main loop
Break 1 [2]>(quit)
Bye.

P:\>type p:\ソフト\test.lisp
(format t "test")

P:\>

また、custom:*default-file-encoding*とcustom:*pathname-encoding*
を確認したところどちらも#<ENCODING "CP932" :DOS>になっていましたので、
これらの変数の問題ではなさそうだということですね。


384 :デフォルトの名無しさん:2012/07/11(水) 12:48:26.65
>>383
今気付きましたけど、「ソ」って2バイト目「\」ですね。
コマンドプロンプトじゃなくてPutty使ってるので、こちらでは普通に通ってました。

http://ja.wikipedia.org/wiki/Shift_JIS#2.E3.83.90.E3.82.A4.E3.83.88.E7.9B.AE.E3.81.8C5C.E7.AD.89.E3.81.AB.E3.81.AA.E3.82.8A.E3.81.86.E3.82.8B.E3.81.93.E3.81.A8.E3.81.AB.E3.82.88.E3.82.8B.E5.95.8F.E9.A1.8C

「ソフト」じゃなくて「日本語」とかなら普通に通りませんか?

[22]> #p"p:/日本語/test.lisp"
#P"P:\\日本語\\test.lisp"

上で提示したCLISPのマニュアルにもcustom:*pathname-encoding*の項に書いてある問題です。
ソースコードをUTF-8とか別のエンコーディングにすればとりあえず問題を回避できると思います。
ただ、その際はcustom:*default-file-encoding*などの設定が必要になるでしょうからご注意。

385 :デフォルトの名無しさん:2012/07/11(水) 13:21:48.98
あー、やっぱエンコーディング変えても駄目かもしれません。嘘つきました。
ちょっと解決策は思い付きません。*pathname-encoding*をISO-8859-1にしても弾かれるみたいですし。
力になれずに申し訳ないです。CLISPに詳しい偉い人が来るのを期待してください。

386 :デフォルトの名無しさん:2012/07/11(水) 22:20:38.26
検討および資料の紹介をいただきありがとうございます。
シフトJISの「\」の問題はすっかり忘れていました。
「ソフト」を「日本語」にしたら通りました。(「ソ\フト」はだめでした)
勉強用としてはフォルダやファイルの名前を注意すればなんとかなりそうですが、
それより今から他の処理系に乗り換えてもいいかもしれません。
CLISPを選んだのは、単にM.Hiroi氏のサイトで紹介されていたからという理由なので。

http://www.geocities.jp/m_hiroi/clisp/index.html

Common Lisp以外の話ですみませんが、Puttyというもの、知りませんでした。
検索するとターミナルエミュレータがでてきますがそれのことでしょうか。
また、コマンドプロンプトのかわりにもなるのでしょうか。


387 :デフォルトの名無しさん:2012/07/11(水) 23:40:01.72
仰るとおり、PuttyはtelnetとかSSHで接続するときなんかに使うターミナルエミュレータです。
コマンドプロンプトの使用感に満足できないので、CygwinとCygTermとPuttyを組み合わせて使ってます。
UTF-8の出力を表示できたりして便利です。最近ではより手軽に使えるMinttyというのもあります。

処理系は、Clozure CL 1.8とSteel Bank Common Lisp 1.0.52では同条件で問題なかったです。
CLISPは環境依存の問題に真面目に取り組んだのが仇になった感じですね。

388 :デフォルトの名無しさん:2012/07/12(木) 00:16:44.23
横レスで質問します
emacs+slimeでcommon lispのソースファイルをいじりすぐに実行するからよく分からないのですが、
ターミナルエミュレーターを使用するのはどういう場面なのでしょうか

389 :デフォルトの名無しさん:2012/07/12(木) 00:30:13.36
SLIMEを使うので、普通の開発時に使いたいと思うことはほぼないです。
他プロセスから処理を起動したいときとか、swankをロードしないイメージを作りたいときとか、
そんなときに。UNIX系のOS使う場合はEmacsでansi-term使っちゃいますけど。

390 :デフォルトの名無しさん:2012/07/12(木) 01:10:33.28
http://lispuser.net/commonlisp/clisp.html
2007年時点だとshiftjisの5c問題にパス名が対応してみたいです。
unicodeパス名使えれば回避出来るんですけど、MBCS対応なのかな。

391 :デフォルトの名無しさん:2012/07/12(木) 01:13:02.58
>>380
Win7 + cygwin + CLISP + mintty(Putty派生) だけど、
(setq custom:*pathname-encoding* "utf-8")
(setq custom:*default-file-encoding* "utf-8")
(setq custom:*terminal-encoding* "utf-8")
で行けたよ。

392 :デフォルトの名無しさん:2012/07/12(木) 02:06:06.53
>>387
Clozure CLかSteel Bank Common Lispを試してみて、
それでもだめならコマンドプロンプト代替になるものに手を出します。
>>390
資料見てみました。
どうやらCLISPをWindowsのコマンドプロンプトから使うというのが間違いのようですね。
ちなみに日本語の入力はできました。
>>391
それがコマンドプロンプトではだめなようなのです。

皆様ありがとうございました。
またわからないことがあったら質問させていただきます。

393 :デフォルトの名無しさん:2012/07/12(木) 22:26:32.36
>>389
なるほど、わかりました

394 :デフォルトの名無しさん:2012/07/14(土) 16:32:10.80
まとめた。

http://cl.cddddr.org/index.cgi?%E5%87%A6%E7%90%86%E7%B3%BB%3a%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E6%89%B1%E3%81%84#H-13bc8b6tb3akm

395 :デフォルトの名無しさん:2012/07/14(土) 19:03:32.55
わかりやすくまとまっているね

396 :デフォルトの名無しさん:2012/07/15(日) 15:18:00.53
>>394
これはありがたい

397 :デフォルトの名無しさん:2012/07/22(日) 16:59:30.83
長いS式をformatで出力すると自動改行されてしまいます。
改行せずにフォーマットで指定した通りに出力させることは出来ないのでしょうか?

具体的には

(defvar tmp
'(asdf zxcv asdf zxcv asdf zxcv asdf zxcv asdf zxcv (asdf zxcv asdf zxcv asdf zxcv asdf zxcv asdf zxcv asdf zxcv asdf zxcv asdf zxcv)asdf zxcv))
(format t "~{~A ~}" tmp)

とすると

ASDF ZXCV ASDF ZXCV ASDF ZXCV ASDF ZXCV ASDF ZXCV (ASDF ZXCV ASDF ZXCV ASDF
                                                   ZXCV ASDF ZXCV ASDF ZXCV
                                                   ASDF ZXCV ASDF ZXCV ASDF
                                                   ZXCV) ASDF ZXCV

と、改行されてしまいます。
SBCL 1.0.49 です

398 :デフォルトの名無しさん:2012/07/22(日) 18:53:31.85
(let ((*print-pretty* nil))
(format t "~{~A ~}" tmp))
かな

399 :デフォルトの名無しさん:2012/07/22(日) 19:49:57.75
>>398
お〜!!うまくいきました。そんな変数があったのですね、Perlみたいです。
common lisp 自動改行 させない 等でググったのですが見つけられなかったので無理なのかなぁと思っていたところでした。
ばっちりのレスありがとうございました。

400 :デフォルトの名無しさん:2012/07/22(日) 20:49:33.18
CLtL2の22,27章は一度目を通しておくべき。

401 :デフォルトの名無しさん:2012/07/23(月) 01:12:43.80
http://clojuredocs.org/clojure_core/clojure.pprint/cl-format
22章への道しるべ。
clojureのdocstringにもリンクがある。

402 :デフォルトの名無しさん:2012/07/23(月) 16:41:04.02
(setq data '(global))

(let ((data '(lexical))
      (sexp '(cons "HOGE" data)))
  (eval sexp))

;=> ("HOGE" GLOBAL)

なぜevalではletで定義した局所変数ではなく
setqで定義したグローバル変数が使われるのでしょうか?

403 :デフォルトの名無しさん:2012/07/23(月) 17:48:06.99
局所環境は空にして評価されるからです。
局所環境を反映させたければ、`などを使ってS式を作る時に行なってください。

> [Function]
> eval form
>
> The form is evaluated in the current dynamic environment and a null lexical environment.

404 :デフォルトの名無しさん:2012/07/23(月) 18:44:07.77
>>403
レスありがとうございます。
すみません、局所変数が使われない理由が局所関数は空にして評価されるからというのはトートロジーに聞こえます。
理由が知りたいのです。

405 :デフォルトの名無しさん:2012/07/23(月) 19:08:36.71
理由は知りません

406 :デフォルトの名無しさん:2012/07/23(月) 20:58:20.60
仮にローカルな環境を引きずるのであれば、
(setq f (let ((data '(lexical))
    (sexp '(cons "HOGE" data)))
   (lambda () (eval sexp))))

(funcall f) => ("HOGE" LEXICAL)
とならなきゃいけないけど、それはとても非現実的な仕様。
クロージャにすべてのローカル環境を引き継がせねばならなくなっちゃう。

407 :SCHEME餃子 ◆8X2XSCHEME :2012/07/23(月) 21:02:23.87
>>404
グローバル変数はパッケージに登録されてて、
実行時のルックアップがし易いけど、
ローカル変数はコンパイル時に解決してしまうからじゃないかなぁ。
最適化をかけたら変数が消滅することすら有るわけで。
eval のために最適化を諦めるのも馬鹿馬鹿しいし。

408 :デフォルトの名無しさん:2012/07/23(月) 21:30:06.51
REPLをevalで実装するとして、CLISPみたいに、
式を評価するごとに自然数をインクリメントしてプロンプトに表示し、
それをnというレキシカル変数で管理しているとする。

ここでもし、evalがレキシカルな束縛を参照できる場合、
nを破壊的に変更すると、プロンプトに表示される数も変わってしまい、
機能が破綻する。

こんな感じで、実用上も色々悲惨なことになる気が。

409 :デフォルトの名無しさん:2012/07/23(月) 23:43:25.15
>>404
> ローカル変数はコンパイル時に解決してしまうからじゃないかなぁ。
これに尽きると思う。
インタプリタだけに限るなら、そういう実装があってもいいと思うけど。

410 :デフォルトの名無しさん:2012/07/24(火) 05:20:28.89
ローカル変数はコンパイル時に解決してしまうとはどういうことでしょうか?

411 :デフォルトの名無しさん:2012/07/24(火) 10:44:14.15
つまりコンパイル後のコードには変数のアドレスだけがあって名前は残らないので
(機械語的にはアドレスさえ判れば値を読み書きできるから名前は要らない)
名前で検索することはできないということ

412 :デフォルトの名無しさん:2012/07/24(火) 11:10:03.07
それだけじゃなくて、一般的にはどの変数が参照されるかわからないから、
レキシカル環境を空にしない仕様だと、環境を全て持ち運ばないといけない。

413 :デフォルトの名無しさん:2012/07/24(火) 16:10:30.93
しかしクロージャはその時見えていた環境を全て持ち運びますよね?
クロージャの環境持ち運びはなんとか実現できたが、
evalでのそれは難しかったのでしょうか。

414 :デフォルトの名無しさん:2012/07/24(火) 16:31:06.44
CLでは、レキシカルスコープを採用している上に、
クロージャは#'(lambdaの特殊な形に限定されてる。

ところがevalは引数を一度評価してからevalので、
引数評価時にS式を生成することも可能で、
基本的に実行時にならないと何を参照するかわからない。
(>>402のケースは単純だから最適化する「コンパイラ」もいるだろうけど)

インタープリタの気持ちになって追ってみるか、
インタープリタを作ってみれば分かる。

415 :デフォルトの名無しさん:2012/07/25(水) 15:20:15.83
始めたばっかだけど、Lispの関数の命名センスがなぁ・・・

416 :デフォルトの名無しさん:2012/07/25(水) 20:27:25.82
たとえばどんなの?

417 :デフォルトの名無しさん:2012/07/25(水) 22:59:13.40
cdrないなぁ
とかw

418 :デフォルトの名無しさん:2012/07/25(水) 23:13:08.86
好きなだけ自分好みの別名を付ければ良いよ。
S式さえ受け入れられれば、文法面では好き勝手できるのがLispなんだし。

419 :デフォルトの名無しさん:2012/07/25(水) 23:51:54.50
だが俺のプロジェクトでは許さん

420 :デフォルトの名無しさん:2012/07/25(水) 23:58:10.16
個人的には rplacd に怨念めいたものを感じた。

421 :デフォルトの名無しさん:2012/07/26(木) 08:56:01.45
リプレース カー と リプレース クダー だろ?

確か当時は、名前に使えるのが6文字まで、とかいうシステムがあったりして、
そういう省略名は今よりだいぶ一般的だったはずだと思われる。

422 :デフォルトの名無しさん:2012/07/26(木) 09:03:00.37
strdupとかmemcpyとかbzeroとか、その手の省略なんて腐るほどあるじゃないですかー! やだー!

423 :デフォルトの名無しさん:2012/07/26(木) 19:17:23.22
eltって何の略なの?

424 :デフォルトの名無しさん:2012/07/26(木) 19:27:25.30
エレメント(element)でねーべか

425 :デフォルトの名無しさん:2012/07/28(土) 13:00:02.41
リストに対する処理をする関数の引数順が
要素 リスト、の順だったり、リスト 要素の順だったりでわかりにくい

426 :デフォルトの名無しさん:2012/07/28(土) 14:41:09.12
SLIMEのサポートに頼りっきりなので、もう引数の順番とか気にしなくなった。

427 :デフォルトの名無しさん:2012/07/29(日) 15:22:59.22
sexp

428 :デフォルトの名無しさん:2012/07/29(日) 21:25:18.35
>>425
原則t的に省略可能なものが後ろに来るんじゃなかったっけ?


429 :デフォルトの名無しさん:2012/07/29(日) 23:48:36.09
実践common lispの26章はAllegroServeを使ってwebプログラミングをしているのですが、
当方emacs+slime+sbclの環境でこの章まで読み進めてきましたので
できれば既存の環境+アルファで済むようなものがあればそれを使ってみたいのですが
何かありますか?

430 :デフォルトの名無しさん:2012/07/30(月) 21:26:40.61
>>429
AllegroServe は確か SBCL でも動いたと思うよ
PortableServe だったかそんな名前。
quicklisp でインストールできたは分からないけど。

431 :デフォルトの名無しさん:2012/07/31(火) 08:54:30.39
(car sex)

432 :デフォルトの名無しさん:2012/08/01(水) 06:20:34.66
aserve だった。quicklisp にもあった。

433 :かとう☆れいこ:2012/08/03(金) 11:13:42.84
M-99 マクロ99問 7門目 ボディの中身を無限に繰り返すDO-FOREVER
http://cl.cddddr.org/index.cgi?M-99
例にある様なtagbodyなど露骨な制御構造ではなく基本関数と再帰で書く事はできないでしょうか。
自分なりに考えて、うまくいかなかった例
下につづく

434 :かとう☆れいこ:2012/08/03(金) 11:15:44.78
上につづく
(defmacro do-forever (&rest body)
`(if (equal (car ',body) '(return))
nil
(progn
(car ',body) ; ←リストが返り実行されず
(do-forever (cadr ',body))))) ;←不定個数の残りだけ渡すのはムリ

435 :デフォルトの名無しさん:2012/08/03(金) 14:01:20.38
Common Lisp は末尾呼び出しの最適化を保障してないから、
永久ループを再起呼び出しで書いちゃダメ。
quasiquote の意味がわかってないんじゃない?
do-forever 内に do-forever を書くとマクロ展開が終わらなくなるよ。

というのは置いといて、
スタックオーバーフローしていいならこれでどう?
(defmacro do-forever (&body body)
(let ((g (gensym)))
`(block nil
(labels ((,g () (progn ,@body) (,g)))
(,g)))))


436 :かとう☆れいこ:2012/08/04(土) 14:13:23.88
>>435
回答ありがとうございます。
>quasiquote の意味がわかってないんじゃない?
はい、わかりません。勉強します。

もしよろしければ、quasiquote意外にも知っていた方が良いと
思われる事がありましたらURLやキーワードだけでも結構です。
教えていただけませんか。当方、入門書を読み終わった程度です。

437 :デフォルトの名無しさん:2012/08/04(土) 14:53:41.26
マクロ書くなら、パッケージとフェイズ(コンパイル時、ロード時、実行時)
については知っておいた方が良いと思う。特にフェイズ。

参考資料はHyperSpecとかCLtL2とかくらいしか思い付かなくて申し訳ないけど。

438 :デフォルトの名無しさん:2012/08/04(土) 21:22:35.78
>>435
>Common Lisp は末尾呼び出しの最適化を保障してないから
知らなかった。意外だな。
これっていちばんLispらしいところだと思うんだけどどうなの?

439 :デフォルトの名無しさん:2012/08/04(土) 22:58:12.26
コンパイラは出来る時にはやるから別にどうとも。
CLOSのafter method, around-methodとの相性も悪いし。

440 :デフォルトの名無しさん:2012/08/05(日) 10:48:33.55
formatについての質問です
(mapc #'(lambda (x) (format t "~3D~%" x)) '(267 42 8))
このようなことをするときに
~3dの3の部分を数値の桁数+1として動的に変化させる方法はありませんか?

441 :デフォルトの名無しさん:2012/08/05(日) 23:40:29.16
" ~D~%"みたくスペースいれとくのじゃ駄目なの

442 :デフォルトの名無しさん:2012/08/06(月) 07:16:14.82
>>440
リストの中の一番桁が大きい値に合わせて出力を整形したいって話でいいのかな?

format詳しくないからはっきり言えないんだけど、

http://super.para.media.kyoto-u.ac.jp/~tasuku/format-func.html
http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm

流し読みした限りでは、できないように見える。

個人的には、リストを一度走査して、最大の桁数を調べてから、
その情報を利用してformatで整形するのが楽だと思う。

443 :デフォルトの名無しさん:2012/08/06(月) 07:34:34.28
すいませんすごく素朴な質問をさせてください


C/C++や、あるいは、アセンブリ言語ではむずかしいけれど、
Lispならあっさり対応できる問題(なるべく実用的なのがいいです)の
典型例はなんかないでしょうか?

444 :デフォルトの名無しさん:2012/08/06(月) 08:23:46.96
ぶっちゃけた話、アセンブリ言語とC99相手なら、数少ない例外を除いて、
ほとんどの分野の問題で圧勝できると思うけど、C++11は変態なので多分そこまでの差はない。
メタプログラミングの分野では一日の長があるか、って感じじゃないの。

445 :443:2012/08/06(月) 09:50:41.99
実装の手間とか、設計スタイルとかで差は出ないんでしょうか?


エレキ上がりの上司にヒト泡吹かしてやりたくて情報収集中で、
そいつが「下が分かればすべてできる」みたいな思想の持ち主なんですが、
俺のほうは「できると適切は別だボケ」と反逆心をみなぎらせているわけです

446 :デフォルトの名無しさん:2012/08/06(月) 10:51:23.29
不便そうな言語でスラスラ書いちゃう人もいるからねえ
まあ何か大規模なもんやらせれば?

447 :デフォルトの名無しさん:2012/08/06(月) 11:17:58.05
マ板に行ってくれないか?

448 :デフォルトの名無しさん:2012/08/06(月) 11:21:29.11
その上司の言っていることは、そんなに間違ってないよ。
>俺のほうは「できると適切は別だボケ」と反逆心をみなぎらせているわけです
まさに同じ理由で上司が正しいとも言える。
コンピュータにも得手不得手があって、ハードが分かっていれば、自ずとそれが分かる。
コンピュータに苦手な方法を採用すると、実行効率が落ちるだけの結果になる。
コンピュータにとって素直な形で実装されてて、しかも表現力も有るC++に勝つのは難しい。

449 :uy:2012/08/06(月) 14:40:08.78
>>436
可愛らしいお名前ですね^^v
れいこちゃんのティロをフィナーレしたい・・・


450 :デフォルトの名無しさん:2012/08/06(月) 18:05:40.74
(defun test (a &key b c)
 (list a b c))

こう書いた場合、(test 10 :c 30) ; => (10 NIL 30) となるのは良いのですが、
(test :c 10) ; => (NIL NIL 10) となるようにできない理由は、(おもに実装面において) 何があるのですか?
また、(test :c 20 30) ; => (30 NIL 20) となるようにできると便利だと思うのですが…。

教えて下さい。

451 :デフォルトの名無しさん:2012/08/06(月) 18:14:13.50
実装できない理由はないと思うけれど、 &optional でないものを省略できていいのだろうか
後者は便利というより混乱の元にならないかな

452 :デフォルトの名無しさん:2012/08/06(月) 22:52:38.58
>>443
やはり記号処理じゃないかな。
パズルを解くとか

453 :デフォルトの名無しさん:2012/08/06(月) 23:50:06.40
>>440
(mapc (lambda (x) (format t "~vd~%" (+ (truncate (log x 10)) 2) x)) '(267 42 8)) ; required (plusp x)


454 :デフォルトの名無しさん:2012/08/07(火) 09:24:32.79
>>442 >>453
ありがとうございます。
>>453のlogと~vを使うテクニックがすぐに思いつきませんでした。
まさにこの処理をしたかったのです。


455 :デフォルトの名無しさん:2012/08/07(火) 13:50:23.30
>>428
CPS変換もそのほうがしやすいよね

456 :デフォルトの名無しさん:2012/08/07(火) 13:53:48.07
>>444
C++11はlambdaのおかしい部分が次のバージョンC++??で直れば
schemeと同等ぐらいになると思う

457 :453:2012/08/07(火) 16:25:49.04
>>454
でもな、>>440 の問題設定の範囲(常に+1)では >>441 が一番スマートな解だと思うんだ


458 :デフォルトの名無しさん:2012/08/08(水) 00:12:40.66
マジで>>441な話だったのかw
桁の大きい数字に合わせて整形したいって話なのかと思ったのに。

459 :デフォルトの名無しさん:2012/08/12(日) 05:29:49.34
LISPは人工無能向けだと聞いたのですがそうなのですか?

460 :デフォルトの名無しさん:2012/08/12(日) 07:08:25.20
っPAIP

461 :デフォルトの名無しさん:2012/08/12(日) 20:40:13.12
つOn Lisp

462 :デフォルトの名無しさん:2012/08/12(日) 20:48:29.80
on lisp日本語版の校正前pdfが下記にある。
http://www.asahi-net.or.jp/~kc7k-nd/
こいつのはじめの方にlispとはなんぞや?人工知能と関係あるの?という解説があるよ。

463 :デフォルトの名無しさん:2012/08/13(月) 08:12:17.95
arcってこけちゃった?

464 :デフォルトの名無しさん:2012/08/13(月) 14:25:51.03
そういう視点でLisp方言をみる習慣がLisp界隈ではない。

465 :デフォルトの名無しさん:2012/08/14(火) 09:19:06.42
物事を勝ち負けでしか考えられない奴のために、一年中オリンピックやってくんないかな

466 :デフォルトの名無しさん:2012/08/14(火) 16:36:31.66
まとめるとarcはこけました

467 :デフォルトの名無しさん:2012/08/14(火) 20:40:03.84
http://toro.2ch.net/test/read.cgi/tech/1202098949/
まーこんな感じですし

468 :デフォルトの名無しさん:2012/08/17(金) 17:36:48.18
randomを使ったシミュレータもどきをつくろうとしています。
同じシミュレーションでは常に同じランダムステートを使用して
どんな場合でも同じ結果が出るようにしたいのですが
常に同じランダムステートを得るにはどうしたらよいのでしょうか?

469 :デフォルトの名無しさん:2012/08/17(金) 17:53:12.47
>>468
作った乱数を保存しとけば。

470 :デフォルトの名無しさん:2012/08/17(金) 18:02:56.64
イメージをダンプしておけば良いんじゃないかと思うけど、どうだろう。
sb-ext:save-lisp-and-dieとか、ccl:save-applicationとかで。

471 :デフォルトの名無しさん:2012/08/17(金) 18:08:32.90
あと、

http://www.lispworks.com/documentation/HyperSpec/Body/22_acj.htm

にあるように、read/write invarianceは保証されているそうなので、
適当なファイルにwriteで書き込んでおいても良いかもしれない。

472 :デフォルトの名無しさん:2012/08/17(金) 18:24:21.56
>>469
たいしたもんを作ろうしてるわけではないんでそれでもいいんですが
大規模なのをやる時はそれだとなんかいやだなあ、と思ってます

>>471
最初にそれ試したんですが、
:SMPLOCKERなんてキーワードしらねーよって言われるんで諦めてました
外したらいけたんでそれで行きます、ありがとうございます

473 :デフォルトの名無しさん:2012/08/18(土) 01:14:54.54
lispの勉強を始めたばかりです
文字列をそのまま、ダブルクォーテーション無しで出力する方法が分かりません

(format nil "~A" "Hello, World")

"Hello, World"

どうすればいいのでしょうか。
処理系はWindows7でのSBCLです

474 :デフォルトの名無しさん:2012/08/18(土) 01:43:48.16
(format t "~A" "Hello, World")
Hello, World

返り値としての文字列に""がつくのはどうしようもないのでは。

475 :デフォルトの名無しさん:2012/08/18(土) 07:00:59.19
REPLの出力関数いじればいいが、だからどうなのって話だ。

476 :デフォルトの名無しさん:2012/08/18(土) 13:51:25.56
>>468
CLはよく知らないけど,通常のプログラミング環境でいう乱数は厳密には疑似乱数だよ.
疑似乱数生成器に初期パラメタとして与える乱数の種(random seed: 普通は大きな素数
が好まれる)が決まれば,その後得られる疑似乱数列は一意に決まる.
だから同じ結果を得たければ,最初に同じ乱数の種を与えるだけでいいはずだよ.

477 :デフォルトの名無しさん:2012/08/18(土) 15:11:46.63
>>476
その種(シード値)のことを、Common Lispではランダムステートって呼ぶのです。

http://www.lispworks.com/documentation/HyperSpec/Body/t_rnd_st.htm#random-state

で、それが規格上、どのようなオブジェクトとは決められていなくて、
ランダムステートを作るときも、任意の整数などを渡して作ることができないため、
常に同じ状態で擬似乱数生成器を動かすには多少の工夫が必要な次第です。
そういう背景からの質問だと思いますぜー。

478 :横レス:2012/08/18(土) 15:40:51.06
擬似乱数の知識がないのかな?
seedはstateとは違う。seedはstateの初期値のこと。
古典的な擬似乱数アルゴリズムの場合、同じ型であることが多いが。

sbclの場合は、make-random-stateで作ることが出来る。
読み書きもできるから、保存も簡単。
使われているアルゴリズムはMersenne Twister。
他の処理系は知らない。

479 :デフォルトの名無しさん:2012/08/18(土) 15:50:44.27
>>477>>478
そうかい.「CLはよく知らないけど」って書いといてよかった.w
それにしてもCLだけがそんなに本質的に異なる言語だとも思えないんだけどな.
ちなみに俺も数値実験とかシミュレーションとかやっているけど,
途中の乱数をすべて保存しておかないと結果を再現できないような開発環境じゃ
とてもやる気しないぞ.
そういう処理が必要になるモデルのアルゴリズムに問題があるんじゃないの?
完全に理解不足ならお許しください.俺生粋のSchemerだから.(もう来ない)

480 :横レス:2012/08/18(土) 16:06:56.77
>>479
> 途中の乱数をすべて保存しておかないと結果を再現できないような開発環境じゃ
> とてもやる気しないぞ.

そんなこと誰も書いてない。

481 :デフォルトの名無しさん:2012/08/18(土) 16:10:11.55
えーと、つまり、CLでは擬似乱数生成器の状態をrandom-state型のオブジェクトで管理してて、
writeで書き出せてreadで読めるって理解で良い?

482 :デフォルトの名無しさん:2012/08/18(土) 16:16:52.46
そう。それ以外は実装依存。

483 :デフォルトの名無しさん:2012/08/18(土) 16:18:08.29
把握。ありがとー。

484 :デフォルトの名無しさん:2012/08/18(土) 23:07:04.91
横レスだがそのやりとりを見てcommon lispのランダムステートをちゃんと理解できたわ
どこかでランダムステートの解説を読んだ際に、なんか違和感があるなと思ったんだが
すっきりした

485 :デフォルトの名無しさん:2012/08/20(月) 00:44:28.09
大規模な乱数テストを多数回繰り返すには、
ランダムステートをファイルに保存するのがとても良い方法だと思います。
しかし、ちょっとした乱数テストで良いなら、次の方法も使える気がします。

(setf rs0 (make-random-state))
(setf rs1 (make-random-state rs0))

(let ((*random-state* rs0))
(loop :repeat 10 :collect (random 100)))
;=> (14 0 42 11 91 63 79 87 95 50)

(let ((*random-state* rs1))
(loop :repeat 10 :collect (random 100)))
;=> (14 0 42 11 91 63 79 87 95 50)

ちなみに *random-state* を動的に束縛せずに、
random の第2引数としてランダムステートを与えても大丈夫です。
(loop :repeat 10 :collect (random 100 rs0)) でもok。

486 :デフォルトの名無しさん:2012/08/20(月) 03:02:53.33
sbcl依存で問題ないなら、それでいい。

487 :デフォルトの名無しさん:2012/08/20(月) 17:53:48.53
ランダムステートの実装は処理系依存ですが、
関数 make-random-state はansi規格で定められています。

http://www.lispworks.com/documentation/HyperSpec/Body/f_mk_rnd.htm#make-random-state

ですので、どのような処理系を使用していても make-random-state を用いて、
乱数テストを行うことができるのではないでしょうか。


さて、CLtL2の12章9節に、乱数テストの方法が2つ書いてあります。
1つはランダムステートをファイルに保存する方法、
もう1つはランダムステートをコピーする方法です。

後者の方法では、次のようなマクロによって、
より簡単に乱数テストができるかなと思いました。
(実践Common Lispの20章3節の注7を参考にしました)

(defmacro with-same-random-state (&body body)
`(let ((*random-state* (make-random-state #.(make-random-state t))))
,@body))

(with-same-random-state (random 100)) => 81
(random 100) => 34
(with-same-random-state (random 100)) => 81
(random 100) => 26

488 :デフォルトの名無しさん:2012/08/20(月) 22:52:27.66
計算機プログラムの構造と解釈って本の例を試しながら読み進めようとして
右も左もわからずclispとかいうのをインストールしてみましたが、変数定義で
(define a 2)
とかやると
*** - EVAL: undefined function DEFINE
The following restarts are available:
USE-VALUE :R1 Input a value to be used instead of (FDEFINITION 'DEFINE).
RETRY :R2 Retry
STORE-VALUE :R3 Input a new value for (FDEFINITION 'DEFINE).
ABORT :R4 Abort main loop
Break 1 [2]> a
とか言われて失敗します。一体どうすれば?

489 :デフォルトの名無しさん:2012/08/20(月) 23:03:51.13
>>488
「計算機プログラムの構造と解釈」が扱ってるのはLisp処理系のうちschemeって呼ばれている物
clispはCommon Lisp処理系
どちらもLisp族だけど書籍のコードを動かしたいなら「scheme処理系」でググって使ってるOSに合う物をいれなされ



490 :デフォルトの名無しさん:2012/08/20(月) 23:08:59.05
>>489
apt-cache search scheme で山ほどヒットして、その中にmit-schemeとかいう一番それっぽいのがあって入れてみたらdefineのエラーが消えました!多謝!そしてさようならcommon lisp。;;

491 :デフォルトの名無しさん:2012/08/21(火) 00:07:27.12
たしかにscheme処理系をそのまま受け入れれば一件落着だろう。
ただ
Can I use Common Lisp for SICP or is Scheme the only option? - Stack Overflow
http://stackoverflow.com/questions/1159208/can-i-use-common-lisp-for-sicp-or-is-scheme-the-only-option
なんとかしてcommon lispを使おうとする人もいるんだね

492 :デフォルトの名無しさん:2012/08/21(火) 09:25:14.18
>>473 です
lispの出力は
(print "obj") (prin1 "obj") (princ "obj")
printとprin1では必ずダブルクォーテーション付きでobjを出力し、さらにダブルクォーテーション付きでobjを返す
princではダブルクォーテーション無しでobjを出力し、さらにダブルクォーテーション付きでobjを返す

(format t "obj") (format NIL "obj")
formatでは書式tだと標準出力にダブルクォーテーション無しでobjを出力し、さらに評価「NIL」を返す
それ以外の書式だとダブルクォーテーション付きストリングを生成して返す

ダブルクォーテーション無し、評価無しでobjだけ出力するには自分で出力関数を書かないといけない

ということでよろしいのでしょうか?


493 :デフォルトの名無しさん:2012/08/21(火) 22:41:19.25
>>492
評価について何か勘違いしてる気がするよ

494 :デフォルトの名無しさん:2012/08/21(火) 23:10:19.75
>>492
インタプリタのREPループの外で実行すればOK

495 :デフォルトの名無しさん:2012/08/21(火) 23:20:20.61
>>492
基本的にREPL (sbclをコマンドラインなしで起動した画面の状態の事ね) では
式を入力すると必ず評価値が表示されるんよ
* (format t "asdf")
asdf
NIL

これはrubyのirbで
irb(main):001:0> puts "asdf"
asdf
=> nil
って表示されるのと一緒だと思いねえ。

REPLじゃなければNILは表示されないんで、 hoge.lisp ってファイルに
(format t "asdf")
って書き込んどいて
sbcl --script hoge.lisp
って実行すれば出力だけ表示されるよ

496 :デフォルトの名無しさん:2012/08/21(火) 23:21:22.34
カブッタ

497 :デフォルトの名無しさん:2012/08/22(水) 12:27:10.98
リスト操作の質問です
リスト1とリスト2とリスト3があり、リスト1とリスト2には同数のatomがあります
(defparameter *list1* '("あ" "ぃ" "い" "ぅ" "う" "ぇ" "え" "ぉ" "お"))
(defparameter *list2* '("ア" "ィ" "イ" "ゥ" "ウ" "ェ" "エ" "ォ" "オ"))
このリスト1とリスト2の順序には対応関係があります(「あ」<->「ア」)
そして、リスト3中にリスト1に該当するものがあれば対応するリスト2のatomに置き換えたいのです
(defparameter *list3* '("る" "く" "わ" "と" "て" "て" "ぶ" "い" "ね"))
リスト3の走査と置き換えは↓のような感じになると思うのですが
(mapcar (lambda (x)
;; memberを使ってxが*list1*内にあるか調べる
(let ((rep (member x *list1* :test #'equal)))
(if rep ; 置き換えする場合
;; *list2* のうち対応する要素を返す
???
;; それ以外はもとの要素を維持する
x
*list3*)
肝心の置き換え(???の部分)が分かりません。どうすればいいですか

498 :デフォルトの名無しさん:2012/08/22(水) 13:14:05.45
*list1* *list2*のように分けるんじゃなくて
対のリストを作った方がいい

'('("あ" "ア") '("ぃ" "ィ") '("い" "イ" ) ・・・

499 :デフォルトの名無しさん:2012/08/22(水) 14:31:42.05
(defparameter *list1* '("あ" "ぃ" "い" "ぅ" "う" "ぇ" "え" "ぉ" "お"))
(defparameter *list2* '("ア" "ィ" "イ" "ゥ" "ウ" "ェ" "エ" "ォ" "オ"))
(defparameter *list3* '("る" "く" "わ" "と" "て" "て" "ぶ" "い" "ね"))

(print
 (mapcar
  (lambda (x)
   (let ((rep (assoc x (mapcar #'cons *list1* *list2*) :test #'equal)))
    (if rep (cdr rep) x)))
  *list3*))

何回も置き換えやるなら、assoc のところちゃんと最適化したがいいと思う。

500 :デフォルトの名無しさん:2012/08/22(水) 22:09:10.96
>>498-499
ありがとうございます。分かりました!


501 :デフォルトの名無しさん:2012/08/25(土) 20:04:02.29
practical common lispに*を出力する例があるのですが、
http://www.gigamonkeys.com/book/functions.html
(loop repeat (funcall fn i) do (format t "*"))
この repeat の引数の箇所と formatのところを一緒くたにする方法はありませんか?
format文字列の引数として数を与えたらその数分出力するようなものがあった気がするのですが。

502 :デフォルトの名無しさん:2012/08/26(日) 05:55:13.76
>>501
ちょっと苦しいけど, こんな感じ?
(format t "~v,,,'*A~%" (funcall fn i) "")


503 :デフォルトの名無しさん:2012/08/26(日) 12:50:37.89
それです!vでしたか。ありがとうございます。

504 :デフォルトの名無しさん:2012/08/26(日) 21:34:50.50
(format t "~V@{*~}" (funcall fn i) t)
とかでも行けるかも

505 :デフォルトの名無しさん:2012/08/27(月) 00:57:53.87
>>504
すっきりしていていいね

506 :デフォルトの名無しさん:2012/09/04(火) 03:09:50.10
mac OS X 10.6.8でsbclをソースからコンパイルしたのですが、sb-posixがうまくインストールされないらしく、警告が出ます。

WARNING! Some of the contrib modules did not build successfully or pass
their self-tests. Failed contribs:"
sb-posix

気にせずインストールしてquicklispを使うと、つぎのエラーが出ました。

#<SB-SYS:FD-STREAM for "file /usr/local/lib/sbcl/sb-posix/defpackage.fasl"
{10054B8873}> was compiled for implementation X86, but this is a X86-64.

sbcl 1.0.58と1.0.55で試しましたが同じでした。sh make.shのオプションは--fancyのみです。
64bit版macで問題なくsbclをソースからインストールできた方いますか?

507 :デフォルトの名無しさん:2012/09/04(火) 07:55:10.71
多分これじゃないかなー、と。

https://bugs.launchpad.net/sbcl/+bug/1012811
http://sbcl.git.sourceforge.net/git/gitweb.cgi?p=sbcl/sbcl.git;a=commitdiff;h=9ec385d7e964b5d07f2e075db4c9faa07161aca2

違ってたら申し訳ない。

508 :デフォルトの名無しさん:2012/09/04(火) 08:05:11.63
失礼。空目した。10.8じゃなくて10.6.8なのか。

https://bugs.launchpad.net/sbcl/+bug/421779
https://bugs.launchpad.net/sbcl/+bug/714633
http://highmt.wordpress.com/2010/10/25/snow-leopard-%E3%81%AB-macports-%E3%81%8B%E3%82%89-sbcl-1-0-43-%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B/

この辺なのかな。何か割と古くからある問題みたいだね。

509 :デフォルトの名無しさん:2012/09/04(火) 08:14:05.22
自民党のすごい有力な議員に聞いたんですが「日韓関係どうなりますか?」。
すると「元に戻ることはありえない」と。
元に戻るとは、李明博大統領が竹島に来る前です。
「そこに戻ることはどんな状況になってもありえない。」

「日本は選挙をやって政権交代の可能性が高いでしょう。
韓国も大統領選挙で政権交代して、多少の歩み寄りはあるかもしれないが元に戻ることは絶対ない。」
ICJ提訴は官僚が動いています。
こいうとき官僚のいいところは動き始めたら止まらないこと。
政権が明示的に「やめろ」と言わない限りやめません。提訴されるでしょう。
日本国民の世論を考えると政権が「やめろ」と言うことはありえない。
単独提訴は確実にいくだろう。韓国政府は当然応じないでしょう。

その次どうするか。
日本は韓国が提訴に応じるまで、ひたすら圧力をかけないといけない。
島根県竹島ですよね。李明博は韓国軍の総司令官です。大統領ですから。
軍総司令官が不法に我が国の領土に入国したということは安全保障上の問題が成立しています。

安全保障上の問題が成立していたら一ついいことがあります。
いいことといったらあれですが。
例えば、日本が韓国に対して部品とか資本財をうらないとか、
あるいは輸出関税を100%、200%をかけてサムスンとか現代自動車が大打撃。
あきらかな経済制裁するのは基本的にはWTO違反。
ところが、安全保障上の場合は例外です。

ということで、韓国は通貨スワップもそうですが、
経済制裁を受けても日本側が理屈が立つ状況を作ったので
本当に後戻りできない状況になったなと思います。
http://www.youtube.com/watch?v=agWGEImnuoY#t=5m15s


510 :デフォルトの名無しさん:2012/09/04(火) 15:21:41.39
>>507-508
ありがとうございます。
試してみましたが、パッチはどうやらテストを回避するためのもので、sb-posixのインストールを可能にするものではないようです。
また、コードを見たところ、1.0.58では元々パッチに似た変更が加えられていて、インストール自体は通るようになっています。

バイナリ版のsb-posixは正常に使えるので、方法はあるはずなのですが…。

511 :デフォルトの名無しさん:2012/09/06(木) 14:37:46.18
>>510
反応遅くなって申し訳ない。
テストに引っかかって必要なものが正しくインストールされないのかと思ったけど、違うのかー。

それはそれとして、そのバイナリはどこから入手した物? sbcl.orgから? どこかのパッケージシステムの?
パッケージシステムでインストールしたものなら、独自のパッチをあててる可能性があるけども。

あと思い付くのは、ビルド処理に介入して、警告とかエラーが出てる部分を探ってみるとか。
うーん。こちらもMac持ってれば良かったんだけど。何かあんま力になれなくてごめんねー。


512 :デフォルトの名無しさん:2012/09/07(金) 00:07:41.23
>>511
親切にありがとうございます。

パッチそのものは以前のバージョンへのパッチで、1.0.58ではパッチの当てられている箇所にいくつか変更が加えられています。
そのためそもそもこちらが正しくパッチを当てられている保証もないのですが。

結果的には、このバグのない以前のバージョンを採用することで解決しました。
1.0.39まではsb-posixは正しくインストールされ、1.0.40以降になると駄目のようです。

ずっと古い版を使うわけにもいかないので、近いリリースで解決してほしいところですが。

513 :デフォルトの名無しさん:2012/09/07(金) 02:40:06.85
むむ。1.0.39っていうなら、やっぱり

https://bugs.launchpad.net/sbcl/+bug/421779

じゃないかな。下の方にあるRoman Marynchakの2012-03-30付のコメントを読んでみて。

http://sbcl.git.sourceforge.net/git/gitweb.cgi?p=sbcl/sbcl.git;a=commit;h=faa1bdc63e953ad672a83fa20e5ff61cff92206f
http://sbcl.git.sourceforge.net/git/gitweb.cgi?p=sbcl/sbcl.git;a=commit;h=7c75cd363da90afe334e936aad2b63437ea5905d

上のコミットでMac OS用のテストが修正されたんだけど、下のコミットで変更点が元に戻されたみたい。
これが1.0.39リリース付近の話。変更点(posix-tests.lispのreaddir.1)は最新リビジョンでも差し戻されたままな感じ。

install.shを軽く読んだ分では、contrib以下はテストをパスしないとインストールされないように見えるから、
"did not build successfully or pass their self-tests"だとどちらにせよマズい。

添付されてるパッチはそのまま当たらないはずだから、contrib/sb-posix/posix-tests.lispの

(deftest readdir.1
- (let ((dir (sb-posix:opendir "/")))
+ (let ((dir (sb-posix:opendir "/"))
+ (sb-alien::*default-c-string-external-format* :latin-1))
(unwind-protect

の部分を手動で修正したらいけたりしないかなー。気が向いたら試してみて。駄目ならごめん。


514 :デフォルトの名無しさん:2012/09/07(金) 08:10:59.89
実用 Common Lisp と 実践Common Lisp
どちらを先に読んだほうがいいですか?

515 :デフォルトの名無しさん:2012/09/07(金) 18:26:51.79
>>514 薄い方から

516 :デフォルトの名無しさん:2012/09/08(土) 00:39:02.55
>>513
パッチのdiffのうち、修正箇所をご指摘の部分のみに限定したところ、1.0.58でsb-posix込みのインストールに成功しました。
本当にありがとうございます。

残念なのは、流れを見るかぎり、当分本家での修正はなさそうですね。どうしてなのでしょう。

517 :デフォルトの名無しさん:2012/09/08(土) 01:05:16.34
>>516
おー。良かった良かった。おめでとー。

多分、Mac OSの新しいバージョンだと、その辺りに変更があって、問題が発生しないんじゃないかな。
ビルド処理のバグとしてもう一度報告したら、改めて対応されることはあるかもしれない。


518 :デフォルトの名無しさん:2012/09/08(土) 06:23:59.65
>>515
ありがとうございました。
注意点などございますか?





519 :デフォルトの名無しさん:2012/09/08(土) 06:49:56.38
>>515
実用から入ると「なかなかの難問だ、ここはわたしのマクロで解決しましょう(眼鏡がキラリ)」てな感じのクールなハッカーになれる。
実践から入ると「うおおおおれとlispは最強のコンビだうおおお!!」みたいな熱いハッカーになれる。

520 :デフォルトの名無しさん:2012/09/08(土) 09:41:14.87
実用と実践が逆じゃね?
実用にはマクロがそんなに出てこなかったような気がする

521 :デフォルトの名無しさん:2012/09/08(土) 11:03:47.90
実践と実用まちがえた、てへぺろ


522 :デフォルトの名無しさん:2012/09/08(土) 17:24:31.81
実践からでいいですよね?

523 :デフォルトの名無しさん:2012/09/08(土) 20:03:39.61
>>522
どっちからでも大丈夫だよ。どっちもとても良い本。
個人的には実用を勧める。確実に技術レベルというか考え方が
変わる、AIの本。実践はCLの本。

524 :デフォルトの名無しさん:2012/09/08(土) 22:25:47.93
実践からでいいよ。先に実践を読めば、
実用のほうでCLについて困ることはないので内容に集中できる。

525 :デフォルトの名無しさん:2012/09/09(日) 01:19:30.50
そもそもCLってどういうことができてどういう部分が嬉しいの?
ということを手っ取り早く知りたいなら、実践からの方が良い。
実践という本の存在目的がそれだし、実用に比べれば薄いから比較的素早く一巡できる。
そして、モヤモヤを抱えなくて済む。

526 :デフォルトの名無しさん:2012/09/09(日) 04:56:16.81
どちらからでもいいですよね?

527 :デフォルトの名無しさん:2012/09/09(日) 09:51:01.77
もちろん読みたい方から読めば良い


528 :デフォルトの名無しさん:2012/09/09(日) 12:48:59.37
実用って読むのに数ヶ月かかりそうな鈍器みたいな本じゃなかったっけ

529 :デフォルトの名無しさん:2012/09/10(月) 01:47:18.83
>>528
読むの大変ですか?

530 :デフォルトの名無しさん:2012/09/10(月) 02:05:18.95
読み通してからじゃないとプログラミングできないってものでもないし
むしろなにがしかの経験があった方がいい

531 :デフォルトの名無しさん:2012/09/10(月) 02:27:36.37
>>530
どういった経験が必要ですか?

532 :デフォルトの名無しさん:2012/09/10(月) 02:52:38.49
そんな大層な話じゃない
自分でプログラミングしてつまったり分からなかったりという経験

533 :デフォルトの名無しさん:2012/09/10(月) 06:28:42.24
>>532
おすすめ書籍てありますか?

534 :デフォルトの名無しさん:2012/09/10(月) 11:35:06.29
>>533
実践

535 :デフォルトの名無しさん:2012/09/10(月) 23:51:31.75
>>534
難しいですか?

536 :デフォルトの名無しさん:2012/09/11(火) 00:04:45.14
迷わず行けよ、行けばわかるさ

で初心者なのにOn Lisp表紙買いして撃沈して
paul grahamのAnsi Common Lisp -> 実践と読み進めた。
実践は良書

537 :デフォルトの名無しさん:2012/09/11(火) 00:11:24.77
>>536
Lisp初めてで実践てどうですか?

538 :デフォルトの名無しさん:2012/09/11(火) 02:31:31.92
案ずるより産むが易し。

539 :デフォルトの名無しさん:2012/09/11(火) 10:58:37.01
>>443
CommonLisp なら、インタプリタや CUI のプロトタイプが
BNF とか無しで直ぐにできちゃいますよね。

540 :デフォルトの名無しさん:2012/09/11(火) 17:50:55.23
>>537
大丈夫だ、問題無い


541 :デフォルトの名無しさん:2012/09/11(火) 18:19:14.69
>>540
読むこつなどありますか?

542 :デフォルトの名無しさん:2012/09/11(火) 22:25:15.36
H本を読むのと一緒だ
とにかく読め。そして手を動かせ

543 :デフォルトの名無しさん:2012/09/11(火) 22:41:01.39
そしてメール欄にsageと書くんだ

544 :デフォルトの名無しさん:2012/09/12(水) 00:19:53.80
>>542
>>543
おまえら見たいなのは、ガイ・スティールやリチャード・ストールマンとは
相容れないバカ人間だ。
二度と Lisp を語るな。

545 :デフォルトの名無しさん:2012/09/12(水) 00:27:12.95
沸点低すぎ
あたまだいじょうぶ?

546 :デフォルトの名無しさん:2012/09/12(水) 00:32:20.37
>>545
酔ってる。
見直したら、悪くなかった。

許せ、542, 543

547 :デフォルトの名無しさん:2012/09/12(水) 00:33:26.83
絶対許さない

548 :デフォルトの名無しさん:2012/09/12(水) 03:00:32.23
真面目に答えてくださいよ

549 :デフォルトの名無しさん:2012/09/12(水) 03:30:26.01
お前ら釣られすぎだろw

550 :デフォルトの名無しさん:2012/09/12(水) 03:39:27.63
>>547
頼む、許してくれー。

551 :デフォルトの名無しさん:2012/09/12(水) 17:09:04.60
>>548
読み方のコツか。
四の五の言わずにサッサと本を買ってきて本文を読め。
読んだ上でわからないことがあったら改めて質問せよ。
これ以上実際に読みもせずにウダウダ言っているのは、誰にとっての得にもならない。
以上。



552 :デフォルトの名無しさん:2012/09/12(水) 21:54:43.73
toplevelでdefvarやdefconstantする変数や定数に*や+で耳あてするな! って主張してるのはどの本だっけ?


553 :デフォルトの名無しさん:2012/09/12(水) 22:44:57.31
>>552
Let Over Lambdaの2.7節

554 :デフォルトの名無しさん:2012/09/13(木) 00:58:13.43
>>551
ありがとうございました。

555 :デフォルトの名無しさん:2012/09/13(木) 03:36:43.28
>>553
ありがとう


556 :デフォルトの名無しさん:2012/09/13(木) 10:48:25.16
>>552
そこまで強く言ってたっけ?
「主に主観的なもので、耳当ては暑苦しいからだ、読者のプログラムにはそう勧めるつもりはない」
って書いてあったような




557 :デフォルトの名無しさん:2012/09/13(木) 16:34:46.32
初学の頃は、本に載っているコードは全部手で入力して実行するのを奨めます。

558 :デフォルトの名無しさん:2012/09/18(火) 02:36:39.01
>>557
ありがとございます。

559 :デフォルトの名無しさん:2012/09/18(火) 22:24:29.66
このスレに居る人はcommon lispで生計を立てている人が多数?

560 :デフォルトの名無しさん:2012/09/19(水) 09:03:53.00
common lispの案件なんて見たことないな

561 :デフォルトの名無しさん:2012/09/19(水) 09:56:52.93
Franzの中の人くらいじゃね?

562 :デフォルトの名無しさん:2012/09/19(水) 20:34:35.84
>>559
生計は立ててないけど
業務で言語指定されない限りは CL つかうかな
指定されても, 使い捨てのツール類は CL だよな
ツールが生き延びる場合は, CL のコアイメージとソース渡しておしまいかな


563 :デフォルトの名無しさん:2012/09/21(金) 20:09:36.13
突然失礼します

MAXIMA使っててlispの存在を知ったのですが
今後のためにlisp層に降りるべく勉強をしてます

とりあえず、「On Lisp」を読んでる最中ですが
これを理解するうえで助けになる資料がありましたら
教えていただければ幸いです
よろしくお願いします。

564 :デフォルトの名無しさん:2012/09/21(金) 20:49:28.69
>>514辺りから読んでみて!

565 :デフォルトの名無しさん:2012/09/21(金) 21:05:57.95
>>564
参考になりました
ありがとうございます
スレ汚し失礼しました

566 :デフォルトの名無しさん:2012/09/21(金) 21:17:11.59
その二冊がOn Lispを理解するうえで助けになるか?
On LispはOn Lisp単独で、ひとりで黙々と読めばいい。
時間はかかるが力になるよあの本は。

567 :デフォルトの名無しさん:2012/09/21(金) 21:29:54.09
>>566
アホは失せろ。

568 :デフォルトの名無しさん:2012/09/22(土) 18:18:11.89
なんと中身の無いレス

569 :ニート26:2012/09/28(金) 20:00:08.97
lispのschemeを、やってみたい。
プログラミング初級ですが、できますかね?ニート26歳高卒。


570 :デフォルトの名無しさん:2012/09/28(金) 20:35:09.67
Schemeやりたいならこっち。

Lisp Scheme Part35
http://toro.2ch.net/test/read.cgi/tech/1348018916/

571 :ニート26:2012/09/29(土) 15:55:54.56
>>570
了解

572 :デフォルトの名無しさん:2012/10/01(月) 01:01:29.15
grahamのansi common lisp p.43の
(setf x '(b))
(push 'a x)
x
(setf y x)
(pop x)
x; => (B)
y; => (A B)
このxとyの最終結果の違いがなぜうまれるのかわかりません。
(pop x)によってyにも(pop y)と同じような効果がもたらされると思ったのですが。
(setf y x)の時点のxの情報をyに保存するのであって、(setf y x)以後はxをいじったとしてもyには
何も影響しない、ということでしょうか。

573 :デフォルトの名無しさん:2012/10/01(月) 01:15:45.17
ポインタ図を書いてみれば?
setfの第二引数は評価されることを念頭に置いて。

574 :デフォルトの名無しさん:2012/10/01(月) 12:16:03.74
そうでもない。

(setf x '(b))
(push 'a x)
(setf y x)
(setf (cdr x) '(c))
(list x y)
;=> ((A C) (A C))

正確には違うけど、popの動作が

(prog1 (car place) (setf place (cdr place)))

こんな感じなことを踏まえると、仕組みが分かるんじゃないだろうか。

575 :デフォルトの名無しさん:2012/10/01(月) 12:39:53.22
Schemeで書いてるけどまさにそのケースを図で説明してるのがあるよ。
http://saito.hatenablog.jp/entry/20090323/1237790745

576 :572:2012/10/03(水) 01:04:16.14
>>575の図を見てよくわかることができました。

577 :デフォルトの名無しさん:2012/10/12(金) 02:28:41.73
Cormenのintroduction to algorrithmsのinsertion-sortをcommon lispで
そのまま書いてみようとしたのですがうまく動きません
擬似コードは↓のノート中程にあります
http://www.catonmat.net/blog/wp-content/uploads/2008/08/mit-algorithms-lecture-01-01.jpg
これをもとに
(defun insertion-sort (a)
(let (key i j)
(do ((j 1 (+ j 1)))
((= j (length a)) a)
(setf key (nth j a))
(let ((i 0)
(j 0))
(loop
when (and (> i 0)
(> (nth i a) key))
do
(setf (nth (+ i 1) a) (nth i a))
(setf i 0
j 0))
(setf (nth i a) key))
)
a))
と書いて
(insertion-sort '(5 2 4 6 1 3))
で何も値が返ってきませんでした
どこが間違っているのでしょうか

578 :デフォルトの名無しさん:2012/10/12(金) 08:24:33.67
>>577
指摘したい部分はいくつかあるけど、無限ループになってるのはloopの部分。
マクロ展開すると終了しないのが分かる。

(BLOCK NIL
(TAGBODY
ANSI-LOOP::NEXT-LOOP (IF (AND (> I 0) (> (NTH I A) KEY))
(PROGN (SETF (NTH (+ I 1) A) (NTH I A))
(SETF I 0 J 0)))
(GO ANSI-LOOP::NEXT-LOOP)
ANSI-LOOP::END-LOOP))

多分whenじゃなくてwhileとか使いたかったんじゃないのかな。

Common Lisp: loopマクロ用法抄
http://smpl.seesaa.net/article/29800843.html

579 :デフォルトの名無しさん:2012/10/12(金) 09:02:14.37
一応補足しておくけど、whileにしてもまだ正しく動かないはず。
自分で考えたいだろうから具体的どこが間違っているかは言わないけど。
擬似コードと比べてみれば分かると思う。

というか元のノートの字の汚さにびびったよw

580 :デフォルトの名無しさん:2012/10/12(金) 09:09:19.17
壁紙にしても違和感がなさそう

581 :577:2012/10/12(金) 10:16:22.52
ありがとうございます。ご指摘の通りwhileを使うべきだったのに
whenを使ってしまいました。
こう書き直したら動きました。
(defun insertion-sort (a)
(do ((j 1 (+ j 1)))
((= j (length a)) a)
(let ((key (nth j a))
(i (- j 1)))
(loop
while (and (>= i 0)
(> (nth i a) key))
do
(setf (nth (+ i 1) a) (nth i a))
(setf i (- i 1))
)
(setf (nth (+ i 1) a) key)
)))

582 :デフォルトの名無しさん:2012/10/12(金) 12:11:10.02
>>581
良かった良かった。あと、

http://qiita.com/items/4a8bb50c85c21d5277e9

にinsertion sortの別解が出てるので、興味があったらどうぞ。

583 :デフォルトの名無しさん:2012/10/12(金) 22:07:23.58
>>582
ありがとうございます。ご指摘の通りです。
DO一色やLOOP一色はすごいですね。

ところで、loopに:forとありますが:を使うのが主流なのでしょうか。

584 :デフォルトの名無しさん:2012/10/12(金) 22:32:09.10
for を使うとシンボルが intern されてしまうので、
潔癖症の人は :for を使う。
以下、clispの対話実行。

[1]> (loop :for i :from 0 :to 1)
NIL
[2]> (find-symbol "FOR")
NIL ;
NIL
[3]> (loop for i from 0 to 1)
NIL
[4]> (find-symbol "FOR")
FOR ;
:INTERNAL

585 :デフォルトの名無しさん:2012/10/12(金) 22:38:54.72
Qiitaのを書いたのは別の人ね。見つけたのでせっかくだから紹介してみた。

:forとかはそこまで主流じゃないけど、たまに見かけることはある、って感じかなー。
Emacsとかだと色が付くし、loopのキーワードってことが分かりやすいのが利点だと思う。

586 :デフォルトの名無しさん:2012/10/12(金) 22:43:47.95
なるほど、そうだったのですか。勉強になります。

587 :デフォルトの名無しさん:2012/10/15(月) 02:15:04.79
グーグルのひとが、3日前?にGoogle Common Lisp Style Guideを公開して意見を募ってる。
https://groups.google.com/forum/?fromgroups=#!topic/comp.lang.lisp/O7QYzxLBUwo
買収したITAが持ってたFlightCasterのエンジン部分をメンテナンスするためじゃないかという推測する人もいるみたい。

Google Style Guide一覧
http://google-styleguide.googlecode.com/svn/trunk/

意見を募ってるひとはCLで型クラス?と不変データ構造をつかう話の発表でILC2012 in 京都に来るようだ。
http://research.google.com/pubs/FrancoisReneRideau.html
http://www.international-lisp-conference.org/2012/speakers.html#sec-2-7
https://github.com/fare/lil-ilc2012/


588 :デフォルトの名無しさん:2012/10/15(月) 02:43:31.65
ASDFの今のメンテナの人だね。

589 :デフォルトの名無しさん:2012/10/15(月) 18:22:47.22
>>587
google mapのルート案内にCL使うんじゃないだろうな?

590 :デフォルトの名無しさん:2012/10/15(月) 18:25:30.63
型クラスというより、1st-class "interface"だよね。

591 :デフォルトの名無しさん:2012/10/16(火) 00:29:02.47
あのG社も使っているCL!キミも使おう!!

592 :デフォルトの名無しさん:2012/10/16(火) 01:21:21.12
外部から買ったコードをメンテナンスするだけで
新規プロジェクトとかには使わないだろ

593 :デフォルトの名無しさん:2012/10/16(火) 01:26:01.03
クラッシュ・バンディクーもLISPを使ってたらしい。

594 :デフォルトの名無しさん:2012/10/16(火) 01:31:45.43
最近だとLuaが多いだろうな

595 :デフォルトの名無しさん:2012/10/16(火) 09:38:36.51
使わないコードをわざわざ買収しないよw

596 :デフォルトの名無しさん:2012/10/16(火) 09:40:16.41
luaは組み込み専門でしょ。
小さいシステム構築以外は
厳しい言語仕様。

597 :デフォルトの名無しさん:2012/10/19(金) 17:03:44.02
CFFIとかiterate保守ってるLuis Oliveiraは幼女。メアド的な意味で。

598 :デフォルトの名無しさん:2012/10/19(金) 18:22:38.10
>>597
さらに veira はアイスランド語で「ウイルス」の意味になる。
http://en.wiktionary.org/wiki/veira

599 :デフォルトの名無しさん:2012/10/19(金) 21:39:32.68
slimeを使っていて、Lispコードの慣用句を
よく忘れるんだけど、何か対策ない?

600 :デフォルトの名無しさん:2012/10/19(金) 22:46:01.72
具体的には?

601 :SCHEME餃子 ◆8X2XSCHEME :2012/10/20(土) 00:39:41.13
yasnippet とか使えばいいんでね。

602 :デフォルトの名無しさん:2012/10/20(土) 03:48:30.23
おまえにLispは無理

603 :デフォルトの名無しさん:2012/10/20(土) 21:08:40.47
みんなは家計簿ってつけていないの?
家計簿のためだけにOooを立ち上げるのがめんど
くさくなってきた。マウスに触らないといけないし。

bash上で動く単純な家計簿システムならかなり
小さくなるかな。

604 :デフォルトの名無しさん:2012/10/20(土) 21:31:42.81
> Ooo
今時は Libre じゃないの?
(家計簿 (小遣い ...) (書籍 ...) ...)
とかするんじゃねえの, lisper だったら?


605 :デフォルトの名無しさん:2012/10/20(土) 21:45:51.92
>>603
http://ledger-cli.org/
Common Lisp なポートもあるらし。
https://github.com/jwiegley/ledger/wiki/Ports

606 :デフォルトの名無しさん:2012/10/23(火) 14:07:09.47
win32 shootout
http://dada.perl.it/shootout/craps.html
poplog common lispらしい。

607 :デフォルトの名無しさん:2012/10/23(火) 20:16:41.80
すごく初心者的な質問かもしれないけどcommon lispでライブラリの読み込みってどうやればいいんでしょ
環境はWindows7 + GNU CLISP

slimeからquicklispで
>(ql:quickload "usocket")
と打ってusocketをインストールしますわな

その後例えば sockettest.lispというファイルを作って
(require :usocket)
・・・
・・・
と書いて
$ clisp sockettest.lisp
で実行したら当然動かない

この場合sockettest.lisp内に (load "C:/Users/hogehoge/...lisp")
みたいに必要なファイルを読み込む処理を入れる必要があるの?
これってすごく環境依存になるので不味いと思ってる。
書いたコードがLinuxやWindowsでも動くようなポータブルなやり方を知りたい

608 :デフォルトの名無しさん:2012/10/23(火) 21:50:36.06
>>607
ヒント:エラーメッセージないとエスパーにしか分からない

Quicklisp使ってるなら、わざわざrequireしないで素直に

(ql:quickload "usocket")

しなされ。マクロを使う場合は

(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload "usocket"))

しなされ。Quicklispがロードされてることを確認しなされ。
詳しくなりたいならASDFとQuicklispについてググりなされ。
loadは今だと直接使うことはほぼありませぬ。

609 :デフォルトの名無しさん:2012/10/23(火) 22:21:04.04
>>608
ありがとうございます

common lispの仕組みを知りたかったので、それが聞きたかった答えです
quickloadしたらもうライブラリは読み込まれてるってことでいいんですかね
load やら asdf やら素人目にはやり方がいろいろあるように見えてしまいます

610 :デフォルトの名無しさん:2012/10/23(火) 22:38:55.21
階層をなしてるんだから複数やり方があって当たり前。
open→fopen, ソケット→xmlhttprequest→jQueryみたいなもん。

611 :デフォルトの名無しさん:2012/10/23(火) 22:39:59.85
Quicklispはパッケージ管理システム。他言語のRubyGemsやCPAN、Haskellに相当。
ASDFはビルドツール。多言語のmakeやRake、Apache Mavenに相当。
loadはCommon Lispの言語の機能。指定したファイルを読み込む関数。

QuicklispはASDFを利用して作られ、ASDFはloadを利用して作られている。

612 :デフォルトの名無しさん:2012/10/23(火) 22:40:59.01
Haskellに相当てwHaskellのCabalねw

613 :デフォルトの名無しさん:2012/10/23(火) 22:43:18.96
haskell→hackageと言いたいのかな?
CPANも、cpanと書いた方がCPANシェルと分かりやすいと思う。
CPANはアーカイブの名前だから。

614 :デフォルトの名無しさん:2012/10/23(火) 22:47:31.93
CPANで合ってる。QuicklispはAmazon S3上に構築されたシステムの名前。
ql:quickloadとかのフロントエンドとか全部ひっくるめてQuicklisp。

615 :デフォルトの名無しさん:2012/10/24(水) 23:15:54.63
別の初心者が横から質問なんですけど
他の言語でのimportみたいなのは
loadを使うのが一般的なんですか?
ql:quickloadですか?

616 :デフォルトの名無しさん:2012/10/25(木) 13:24:05.95
>>615
608を理解できるまで読んで

617 :デフォルトの名無しさん:2012/10/25(木) 17:31:15.87
>>615
importっていうと、JavaとかPythonとかHaskellとかを連想するんですけど
名前空間の操作とモジュールの読み込みを一緒にやる感じでしたっけ?

自分が理解してる範囲では、モジュールの読み込みをする場合は、

* cl:load - 単にファイルを読んで評価するだけ
* cl:require - provideと組み合わせた古いスタイルのモジュールを読み込む
* asdf:load-system - ASDFに対応したライブラリを読み込む
* ql:quickload - Quicklispに収録されたASDF対応ライブラリを読み込む

を使いますが、Common Lispでは今時のライブラリはほぼASDFに対応しているので、
主にasdf:load-systemを使う感じでしょうか。Quicklispに収録されたライブラリを使ったり、
ローカルなASDFなライブラリでもQuicklispで管理する場合はql:quickloadを使います。

自分でライブラリを作る場合にどの仕組みに対応したものを作れば良いか、という話なら、
目的によって応相談だと思います。個人的には、自分用でもライブラリならASDFに対応させます。
手動でコンパイルしたり依存関係の面倒をみるのは面倒ですから。

618 :デフォルトの名無しさん:2012/10/25(木) 17:50:52.11
名前空間については、モジュールの読み込みとは別の仕組みで管理します。
パッケージとシンボルって呼ばれるものの組み合わせですね。

名前空間全体を取り込む場合はcl:use-package、一部を取り込む場合はcl:importを使います。
そういうパッケージを作る場合は、cl:defpackageの中で:useや:import-fromを使う場合が多いです。

名前空間に関しては、プリフィックスを省略せずに書くスタイルの人や、
気にせずどんどんuse-packageしていくスタイルの人など十人十色な感じです。

詳しくは、

http://weitz.de/packages.html

辺りを読むと良いんじゃないでしょうか。

619 :デフォルトの名無しさん:2012/10/27(土) 14:17:56.73
>>618
http://weitz.de/packages.html
参考になった。誰か日本語に訳して広めるべき。

620 :デフォルトの名無しさん:2012/10/27(土) 14:21:51.23
faviconがZappaだw

621 :デフォルトの名無しさん:2012/10/28(日) 10:48:35.24
>>617,618
なるほど。ありがとうございました。
イメージがつかめてきた。

622 :デフォルトの名無しさん:2012/11/04(日) 18:38:57.51
clackって使われてる?
将来性あるのかな?

623 :デフォルトの名無しさん:2012/11/04(日) 21:05:05.57
プロダクトで使ってるって話は自分は聞いたことない。
開発者自身が、社内である種のプロトタイピングに使った事例はあるみたい。

http://d.hatena.ne.jp/nitro_idiot/20120323/1332516342

最近は外国の人にも徐々に認知されてきた印象があるけど、将来性はどうだろう。
Hunchentoot以外にも有力なウェブサーバが色々出てきたら評価上がるとは思う。

624 :デフォルトの名無しさん:2012/11/04(日) 23:11:52.85
cklack とかなんか恩恵あるの?
基本的に組み込み物が多いんで、
lisp でHTML 吐き出す
parrenscript で javascrip 作る
あとは, XMLHttpRequestだけで処理が普通なんだけど...


625 :デフォルトの名無しさん:2012/11/05(月) 01:18:55.27
ILC2012で使ったっていうスライドがわかりやすいんじゃないかな。

http://d.hatena.ne.jp/nitro_idiot/20121027/1351317589

ウェブサーバ間でのAPIの違いを吸収して移植性を高めるのと、
再利用しやすい拡張方法を提供するのが特徴って感じだと思う。
この上にアプリケーションを構築すると、ウェブサーバの切り替えや、
作った機能の再利用がしやすいですよ、っていう物だと理解してる。

626 :デフォルトの名無しさん:2012/11/05(月) 09:38:15.43
clackは作者のブログがうざいのが何より使いたくない理由。

627 :デフォルトの名無しさん:2012/11/05(月) 15:22:30.10
そういうのはまあ誰しもあるから、それはそれで良いんじゃね?
Oracleうざいから、GPLうざいから、って感じの似たような話は割とあったりするしな。

628 :デフォルトの名無しさん:2012/11/06(火) 00:47:00.86
http://www.infoq.com/jp/articles/surviving-asynchronous-programming-in-javascript
すれ違い十人十色なインタビューでもどぞー。

629 :デフォルトの名無しさん:2012/11/06(火) 19:59:00.15
sbclをデーモン化したいので調べてみた
screen、detachtty、save-lisp-and-die、sb-daemonとかあったけど
ぶっちゃけおすすめはどれ?

630 :デフォルトの名無しさん:2012/11/07(水) 00:04:18.21
http://www.franz.com/ps/newsletter-edt.lhtml
Allegro CL 9.0 FREE EXPRESS Edition- Now Available!

631 :デフォルトの名無しさん:2012/11/11(日) 16:48:23.23
初歩的な事ですみません

lispbuilder+win+sbclでguiアプリをつくってるんですけど、
exeにして起動するとプロンプト?が出るのですが、
これを非表示にしたいですのですがどうすればよいでしょうか?

632 :デフォルトの名無しさん:2012/11/11(日) 17:42:09.89
>>631
コマンドプロンプトのこと? ちゃんとドキュメントの通りにやってる?

http://code.google.com/p/lispbuilder/wiki/StandAloneExecutables

特にsave-lisp-and-dieの:toplevel引数の部分。

633 :デフォルトの名無しさん:2012/11/11(日) 20:43:27.69
皆さんlispで普段何するプログラムを書いてるんですか?(仕事以外で)

634 :デフォルトの名無しさん:2012/11/11(日) 21:40:46.36
確かに気になる
他の言語じゃなくてあえてcommon lispを選ぶ理由も。

635 :デフォルトの名無しさん:2012/11/11(日) 22:22:56.20
Lisp書いてる人をGitHubとかで片っ端からフォローして、
動向をRSSリーダとかで追っかけると、他の人が何を今書いてたり、
何に興味持ってるかをお手軽に知ることができて割と面白いと思うよ。
少なくとも自分は楽しい。

あとredditとか。

LISP
http://ja.reddit.com/r/lisp/

LISP ja
http://ja.reddit.com/r/lisp_ja/

636 :デフォルトの名無しさん:2012/11/12(月) 13:03:10.24
仕事で使ってる人なんているんですか?

637 :デフォルトの名無しさん:2012/11/12(月) 13:40:52.96
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/whats-new/
10月にサイト分けしたらしい

638 :デフォルトの名無しさん:2012/11/12(月) 16:14:17.65
>>636
使っている側から言わせて貰うが、どうして使わないと決めつけられるんだ?

639 :デフォルトの名無しさん:2012/11/12(月) 19:06:10.62
何書いても読まない人の発作
相手にすんな

640 :デフォルトの名無しさん:2012/11/12(月) 21:07:22.89
少尉さんのほうが指揮上手いよね?

641 :デフォルトの名無しさん:2012/11/13(火) 15:56:39.43
ちょっと前まで構文木を直接入力するようなキチガイ沙汰だとおもって大嫌いだったのに、今だとC++の方がキチガイ沙汰にみえる orz
paredit-modeすげー

642 :デフォルトの名無しさん:2012/11/13(火) 20:23:34.86
>>641
何を云ってるんだ?
C に輪をかけたあの変態構文に C++11 の変態構文まで加わってるんだ,
キチガイ沙汰じゃないほうがおかしいだろ?

643 :デフォルトの名無しさん:2012/11/13(火) 20:26:33.21
pareditいいね
知らなかった
3q

644 :デフォルトの名無しさん:2012/11/14(水) 01:26:36.93
>>633
> 皆さんlispで普段何するプログラムを書いてるんですか?(仕事以外で)
Podcastをwgetで落とすshスクリプトの方をイメージしちゃったのでLinux + emacsで書いちゃった。
自分のSBCLのボキャブラリーが少ないし、使える時間を割いてその数時間を費やして
ボキャブラリーを補完できずに、スクリプトが完成しない率が多い。
wgetに類する関数を覚えなくても、CL上でwgetコマンドを使えれば満足するんだけどね。
後日、wgetに類する関数を覚えて、修正版をできれば良いわけだし。

ちょっとしたスクリプトもCLで書くようにしないと覚えないかな。
非プログラマなんだけど、実用言語のGaucheに浮気しない方が良いよね?
ドキュメントとかが使いやすいGaucheだったら書けそうな気がするんだけど。

645 :デフォルトの名無しさん:2012/11/14(水) 19:24:11.15
それは暗に肛門lispをディスってるんですか?

646 :644:2012/11/14(水) 21:22:10.31
>>645
> それは暗に肛門lispをディスってるんですか?
黄門Lisp?
アナルLisp?
ディスっていないよ。

Podcastスクリプトの機能拡張で数字→N進数、N進数→数字変換器等を作りたい
んだけど、それ関連でshスクリプトを書くために調べるのが馬鹿らしくなって
きた。調べれば具現化できるんだろうけど、shだとスマートじゃないし、あと
あとCLで使いまわしたい機能・知識なんだよね。

647 :デフォルトの名無しさん:2012/11/14(水) 21:41:11.19
私が始めて書いたCommon Lispのプログラムは
S式をGraphVizのソースに変換するトランスレータと
出力のグラフ上を飛び回る強盗エイリアンを探しだし射殺するゲームでした
それはS式と高階関数の強力さを実感させてくれる素晴らしいものでした

そんな私も今ではどうぶつの森に夢中
なぜなら彼もまた特別な存在だからです

648 :デフォルトの名無しさん:2012/11/14(水) 22:05:26.70
Common Lispということか。

649 :デフォルトの名無しさん:2012/11/15(木) 00:41:25.42
>>646
parse-integer、format、digit-char-p、digit-char

650 :デフォルトの名無しさん:2012/11/15(木) 01:38:26.00
>>649
> parse-integer、format、digit-char-p、digit-char
thx.
CL-USER> (parse-integer "AA" :radix 36)
370
2
CL-USER> (parse-integer "aA" :radix 37)
; Evaluation aborted on #<TYPE-ERROR expected-type: (INTEGER 2 36) datum: 37>.

380
2
という結果が37進数でaAを区別して欲しいんですが、どうしたらいいんでしょうか?
今は速度を求めていないので愚直に対で対応させればいいのかな。あと記号も使って
64進数も変換できるとうれしいです。

651 :デフォルトの名無しさん:2012/11/15(木) 13:23:56.24
それっぽいものを投げやりに書いてみた。0-9a-zA-Zと-と_で64進。

(defun parse-integer/64 (s &key (radix 10))
(let ((table "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"))
(car (reduce (lambda (c r)
(destructuring-bind (sum . pos) r
(let ((n (position c table :end radix)))
(cons (+ (* n (expt radix pos)) sum) (1+ pos)))))
s
:initial-value '(0 . 0)
:from-end t))))

652 :デフォルトの名無しさん:2012/11/15(木) 18:22:44.04
>>651
すばらしい。
こうやって書くんですね。
読解してみます。

653 :デフォルトの名無しさん:2012/11/17(土) 23:11:24.41
paraedit cheatsheet
http://emacswiki.org/emacs/PareditCheatsheet

654 :デフォルトの名無しさん:2012/11/18(日) 03:02:49.48
連番のエロ画像をダウンロードするスクリプトください

655 :デフォルトの名無しさん:2012/11/18(日) 09:36:30.55
スクリプトが欲しいならcURLでも使っとけ。

http://sitearo.com/cocoa/0800_internet/curl/

656 :デフォルトの名無しさん:2012/11/18(日) 21:05:31.51
wget http://lisp.ero.lisp/eroero/erojpg[0123][0123456789].jpg
bashだとhttpはワイルドカード使えないんだね。
腐った環境でzshをインストールできなかったんだけど、
zshだと簡単にこういったことができると言われているよね。

あとbashでlisp ero.lisp http://lisp.ero.lisp/eroero/ erojpg [0123][0123456789] .jpg
みたいな表現できるのかな。

657 :デフォルトの名無しさん:2012/11/18(日) 21:12:21.72
>>655
つか、どお見てもうに甚のあのスレに対する誤爆だと思うんだが…

658 :デフォルトの名無しさん:2012/11/18(日) 22:06:15.39
emacs + sbcl + slimeで、with-gensymsが
style-warning: undefined function: WITH-GENSYMS
になりす。
関数が無いのはなぜなんでしょうか?

659 :デフォルトの名無しさん:2012/11/18(日) 22:08:53.49
>>658
ん?それは標準のマクロじゃないから、どっかからとってくるか何かしないと使えないよ

660 :デフォルトの名無しさん:2012/11/19(月) 06:47:56.63
どんな形式のH画像もマクロでダウンロードできるようにならないとな
再帰で関連リンクも自動でたどるんだ
sxpathあたりを駆使するんだ

661 :デフォルトの名無しさん:2012/11/19(月) 09:34:11.90
>>656
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30890&forum=10
bashの場合だとコマンドに渡す前にワイルドカードとして評価されてるのかも。
クォートかエスケープすると動くかな?
sh/bashは決まった動きをするのでシェルスクリプト向けに必要だけど、こういうところはzshのが直感的でいいね。

662 :デフォルトの名無しさん:2012/11/19(月) 10:49:11.08
スレ違いな話題な上に間違ってる。

663 :デフォルトの名無しさん:2012/11/19(月) 18:58:57.84
>>659
そうなんですか ありがとうございます

664 :デフォルトの名無しさん:2012/11/27(火) 11:02:58.72
CL-USER> (loop for i in '(1 2 3 4 "a" 5 "b") if (integerp i) collect i else collect "2ch")
(1 2 3 4 "2ch" 5 "2ch")
loopのif文はこう書くんだね。
(loop for i in '(1 2 3 4 "a" 5 "b") do (if (integerp i) collect i collect "2ch")
と書けずに、
(loop for i in '(1 2 3 4 "a" 5 "b") collect (if (integerp i) i "2ch"))
と書けるのか。

CL-USER> (loop for i in '(1 2 3 4 "a" 5 "b") if (integerp i) collect i)
(1 2 3 4 5)
と書こうとすると、
(loop for i in '(1 2 3 4 "a" 5 "b") collect (if (integerp i) i))
これだとnilが混じる。

あと(loop for i to 9 from 2 collect i)というのはありなんだね。loopのifもそうだけど
S式の頭で考えると頭に入ってこなかった。
loopが茶帯ぐらいになってきたかも。

665 :デフォルトの名無しさん:2012/11/27(火) 13:03:02.01
loopマクロで

(loop :for i :in '(1 2 3 4 5) :if (evenp i) :collect i)

みたいにloop内の構文シンボルをキーワードシンボルで書くのって少数派?
エディタのハイライトで色がつくから、見やすくていいんだけど。
あと、ここでキーワードシンボル使うと、どっか他の部分でデメリットとかある?

666 :デフォルトの名無しさん:2012/11/27(火) 16:34:59.30
>>665
ちょっと前にも同じような質問があったと思うけど。
自分で使ってる名前空間でインターンされるのが嫌な場合は
キーワードで書けば良いんじゃないの。デメリットは特にないと思う。

667 :デフォルトの名無しさん:2012/11/27(火) 22:22:56.78
common lispのテキストの類いでは
:forじゃなくてfor表記の方が多いきがする
インターンの現象をデメリットだと執筆者は思っていないのかも

668 :デフォルトの名無しさん:2012/12/01(土) 13:11:49.50
リストの再帰探索をやってくれるような標準関数はありますか?

669 :デフォルトの名無しさん:2012/12/02(日) 17:59:58.47
REPLからCライブラリを呼び出してみたいとおもっています。
そこでclikiのFFIのページを見てみました。
http://www.cliki.net/FFI
色々あるようなのですが、今から始めるならどれがよいでしょうか。
CLの処理系としてはFreeBSD上で
Allegro CL Free Express Edition8.2を主に使っています。
SBCLを使う事もあります。

670 :デフォルトの名無しさん:2012/12/03(月) 16:19:47.02
>>668
確か再帰的に走査するのはなかったはず。自分で書くしかないと思う。

>>669
http://cl.cddddr.org/index.cgi?CFFI

今だとCFFIがデファクトスタンダードな感じ。用途によってはSWIG使うと楽だよー。

671 :669:2012/12/03(月) 18:30:09.84
ありがとうございます
SWINGなんてのがあるんですね
早速勉強してみます

672 :デフォルトの名無しさん:2012/12/03(月) 18:36:42.84
Nつけちゃ駄目だ

673 :デフォルトの名無しさん:2012/12/04(火) 00:34:42.19
Shibuya.lispがまた動き出した感じ?
また一部のマニアだけで盛り上がるトークセッションをやるのかね。

674 :SCHEME餃子 ◆8X2XSCHEME :2012/12/04(火) 01:15:07.37
>>673
Lisp で大衆向けにしたら需要ないだろ…
ニッチだから盛り上がるんだよ。

675 :デフォルトの名無しさん:2012/12/04(火) 01:48:30.66
ぶっちゃけどうでもいい。参加する人に任せとけば良いんだよ。

676 :デフォルトの名無しさん:2012/12/04(火) 02:50:48.52
>>673
> また一部のマニアだけで盛り上がるトークセッションをやるのかね。
自分のトークセッション観と称して要望メールを出せばいいんじゃないの。
トークセッション観がまだ未熟なら随時出せば良い。

677 :デフォルトの名無しさん:2012/12/04(火) 12:37:13.22
内容が薄けりゃ薄いで文句を言うんだよこういう手合いは。
ぶっちゃけいちゃもんを付けたいだけ。

678 :デフォルトの名無しさん:2012/12/04(火) 16:12:42.24
>>677
がんばって、生きろ

679 :デフォルトの名無しさん:2012/12/04(火) 16:16:23.67
一部のマニアだけだとしても、盛り上がってるんならそれでいいだろw

680 :デフォルトの名無しさん:2012/12/07(金) 14:06:49.37
Lisperはこの世のゴミ

681 :デフォルトの名無しさん:2012/12/07(金) 14:07:31.63
誤爆したスマン

682 :デフォルトの名無しさん:2012/12/07(金) 21:31:25.94
いいってことよ

683 :デフォルトの名無しさん:2012/12/07(金) 23:01:55.51
そのゴミを集めるのもLispです

684 :デフォルトの名無しさん:2012/12/07(金) 23:19:13.23
ゴミ集めがうまいcommon lisp

685 :デフォルトの名無しさん:2012/12/08(土) 01:33:03.72
集めるだけじゃなく解放してやれよ

686 :デフォルトの名無しさん:2012/12/10(月) 19:26:43.27
昔の著名な小説家が死んだ後にノート公開みたいにプログラマのメモ帳・
(プライベート)スクリプトを公開とか、やらないかな。
その小説家は公開されると分かっていて、仕事しているだろうし、死後に
取捨選択・管理する役目を受ける人も決まっていそうだ。
ファンの要望に応えて、第二弾の公開。以下、ループ。

死後に評価される人もいるのかな。

687 :デフォルトの名無しさん:2012/12/11(火) 21:32:53.89
>>686
いいと思うわそれ

688 :デフォルトの名無しさん:2012/12/15(土) 10:00:16.73
>>686
まとめる人に相当の技量が必要になるから、
難しいんじゃないかな。

689 :デフォルトの名無しさん:2012/12/15(土) 15:02:39.41
>>688
> まとめる人に相当の技量が必要になるから、
> 難しいんじゃないかな。
引き受ける人が任せた人が死ぬ前に死後に読み込む環境(*0)を整えるために
打ち合わせすることは可能だろうし、引き受けた人は高度なプログラムを
書ける必要はないけど、プログラムは読めないとダメだね。
大雑把に取捨選択して、高度なプログラムを評価できる専門家にそれを評価
してもらえばいい。そして引き受けた人が法的な権利関係もある程度(*1)把握
できていればいい。

あと全部精読する必要はないけど、流し読みはしないとダメなんだろうな。
量がいっぱいあるなら、何弾回かに分けるつもりでとりあえず当たりをつけて
手づかみした部分だけを解析して公開して、反響の度合いで解析量を増やす
感じになるのかな。
*0 独自の略語とか、暗号とか、ルールとか。
*1 どこに問い合わせればいいとか、どこに頼めば法的部分をクリアするとかを
知っている程度。

690 :デフォルトの名無しさん:2012/12/15(土) 19:36:36.99
github 以降で自分が公開してないスクリプトって、小物すぎたり著作権や特許に引っかかってたり
自分専用でUIが無茶だったり公序良俗によろしくないとかで何かしら問題あるんからなんだが、
小説家のノートの場合そういうのどう解決してるんだろう

691 :デフォルトの名無しさん:2012/12/16(日) 03:21:00.42
;; チラシの裏
90.txt 91.txt 80.txt 70.txt 60.txt 68.txtの順で出力したいんだが、bashで
$cat [9876543210]*.txtってできないんだね。
bashを掘りたくないからSBCLで書こうかな。
$./hoge.lisp cat [z-0]*.txtとか、$./hoge.lisp cat [987z-a6Y-B0]*.txtとか、
できると便利じゃない?
catは一例で$./hoge.lisp foo [9876543210]*.txtで動くようにしたい。

あと$rsync -h --progress *.iso /Another_HDD/で
abc.iso
411.50M 9% 196.30MB/s 0:00:19
と表示されるんだけど、rsyncは騒がしいから簡易計測でいいから
$./mv.lisp -h --progress *.iso /Another_HDD/が欲しい。
転送速度があまり変わらなそうだけど、多重mvできると便利。

692 :デフォルトの名無しさん:2012/12/16(日) 11:19:18.04
>>691
> $./hoge.lisp cat [z-0]*.txtとか、$./hoge.lisp cat [987z-a6Y-B0]*.txtとか、
> できると便利じゃない?

bash, csh, zsh あたりだと, <command> {9,8,7,6,5,4,3,2,1,0}*.txt じゃダメ?
マッチしない奴のエラーが気になるのなら,
<command> {9,8,7,6,5,4,3,2,1,0}*.txt 2> /dev/null
とかじゃダメ?

上の例だと[!987z-a6Y-B0]とかで文字クラス反転された場合の解釈は?

Unix 系だと, どんな言語で書く(shell 関数の場合でも)としても, shell が
マッチしたファイル名をアルファベティカルにソートして引数リストとしてわたす
ので [987z-a6Y-B0]*.txt はクオートしてやらないとうまく動かない
ってな, 問題もある…

Windows はゲームしかやらないのでどうなってるかしらない.

693 :デフォルトの名無しさん:2012/12/16(日) 13:29:22.60
unix風なら、sort がやるべきかもしれない。
外部から任意のソート順序を与えられる sort を sbcl で作る、というのなら結構嬉しいかも。
集合の反転は考えずに、[]内に出現しなかった文字は後ろに通常どおり辞書順にくっつけばいいよね。
リストにある文字列の集合を並び替えられると、コマンドラインツールとしても通常の関数としても使えるから便利そう。
sort用DSLからpredicateの作成。 既にありそうな気がするけど、どうなんだろ?

rsync の例は xargs でなんとかなる問題なのかな?

694 :デフォルトの名無しさん:2012/12/16(日) 14:42:14.72
cat $(for i in [0-9][0-9].txt; do echo "$i"; done | sort -nr)

rsync --quiet

695 :デフォルトの名無しさん:2012/12/16(日) 16:34:28.40
Linux標準コマンドの組み合わせで解決しそうだけど、リスト化してこう
してああしてこうすれば具現化できそうだよなあって思考していた方が
CLのレベルが上がるよね。
複数のLinuxが入っていて、1つのOSが瀕死の時にCLで作業を一部自動化
できると便利だろうなあと思って。

多重mv(実際は多重cp)を簡易計測して測ってみたけど、1.45倍ぐらい
速くなった。意外にも最高速度に張り付いている感じ。小さいファイルと
大きいファイルが混在の時にどのくらいの速度が出るのか、楽しみ。
CPUガラ空きだからmd5sumチェック機能もつけられるかも。まんまrsync
だけど、速度が出ないんだよなあ。
>>692
素晴らしい。こんなのあるんだね。
<command> [0123456789]*.txtより<command> {0,1,2,3,4,5,6,7,8,9}*.txtを
使い方として広めた方が使い勝手があるね。
> 上の例だと[!987z-a6Y-B0]とかで文字クラス反転された場合の解釈は?
反転ってどういう意味?
>>694
こう書けるんだね。

696 :デフォルトの名無しさん:2012/12/16(日) 18:21:29.84
>>694
それだと, 91,90,80,70,68,60 にならないか?

>>695
> > 上の例だと[!987z-a6Y-B0]とかで文字クラス反転された場合の解釈は?
> 反転ってどういう意味?
[987z-a6Y-B0]に含まれない文字の集合
[] 内の先頭が ! または ^ の場合, 続く文字クラスに含まれない文字クラスを示す

697 :デフォルトの名無しさん:2012/12/16(日) 20:35:27.69
実践Common Lispを25ページまで読みました

698 :SCHEME餃子 ◆8X2XSCHEME :2012/12/16(日) 21:20:39.59
そうか。

699 :デフォルトの名無しさん:2012/12/16(日) 22:37:19.77
> >>695
ごめん。投稿前に反転と予想して確認したんだけど、結果を見間違っていた
みたいだ。

>>651のように記号も含めて独自の文字テーブルを作って、その文字の集合を
反転ということなのかな。
独自テーブルは(loop :for i :to 130 :collect (code-char i))で出てくる
0-9A-Za-z -~で、記号はコードの昇順にする。

やる気はないけど、簡単にテーブルを作れるならひらがな・カタカナ・漢字って
やっても良いかな。grepの[:alnum:]みたいに[:hiragana:], [:katakana:],
[:kanji:]って表記はgrep拡張で便利なのかな?
実際に必要性ないとポイントが見えないし、作る気しないね。キッチリ作る人は
偉い。

700 :デフォルトの名無しさん:2012/12/17(月) 02:19:30.92
sort 的なもの作るとしても, 空白, クオート, メタキャラクターを含んだ
ファイル名の扱いが問題. 結果は文字列にしかならないから,
うまくクオートした形で結果を表示しないと色々と問題が…
# Unix 的にはファイル名として禁止されている文字は '/' と '\0' だけだ

>>699
> grepの[:alnum:]みたいに
真面目にやるなら, posix 的には grep の [:xxxx:] は必須
grep の [...] の定義と同じもの + '!' でも反転が求められている
(歴史的な事情, grep の '^' のほうが後から?)

> [:hiragana:], [:katakana:],[:kanji:]
unnicode 的にはもっと細かい区分を考えないとまずそう

701 :デフォルトの名無しさん:2012/12/17(月) 06:35:39.16
あれ、あんまりいいアイディアじゃなかったかな…。
(元質問者とは違うんだけどせっかく思いついたので) もう一度だけ説明させてください。

例えば '[g-d]' という指定の場合 (g f e d 0x00 0x01 ... a b c h i j k ...) という、
g-d の部分だけを通常のASCIIテーブルから抜き出して (より優先度の高い) 先頭の方に移動したリストを考えて、
さらにこれをつなげた表現 '[g-d][g-e]' がリストを (gg gf ge fg ff fe ... aa ab) の順に並べるような
文字列同士の大小を比較する predicate を生成する、と約束すると sort関数 に渡すだけで
リスト内の文字列の昇順降順を自在に操ることができそうなんだけど、どうかな?

702 :デフォルトの名無しさん:2012/12/17(月) 08:24:25.83
あればあったで楽できる気はするけど、そういうカスタマイズされたソートが必要なケース自体が、
多くの人にとってあまりない気がする。マッチングとかと違って。

703 :デフォルトの名無しさん:2012/12/17(月) 08:35:30.54
比較関数生成するってだけの話でしょ。

704 :デフォルトの名無しさん:2012/12/17(月) 09:07:25.71
Unicode前提だと \p{InHiragana} が使える処理系もあるんじゃないかな

705 :デフォルトの名無しさん:2012/12/17(月) 15:05:17.07
>>702
むしろそういうソート条件のGenericな表記方法ってのを発明するのが楽しそう

あんまり自分は必要ないけど(特殊なときは泣きながら並べるw)

706 :SCHEME餃子 ◆8X2XSCHEME :2012/12/17(月) 15:17:30.23
順序のフォーマルな表記法って面白そうなテーマだね。

707 :デフォルトの名無しさん:2012/12/17(月) 16:22:11.57
比較は込み入った条件だと煩雑になるからな。

708 :デフォルトの名無しさん:2012/12/17(月) 16:23:47.10
そういやsregexやperl 6 rulesでどうよ?

709 :デフォルトの名無しさん:2012/12/17(月) 19:25:31.68
>>701
改めての文字列の昇順降順に興味ないけど、そんなに難しいことなの?
おおむね昇順・降順ができて、動けばいいや。難しいならあきらめるし。
>>705
具体的に泣きながら並べる例ってどういうのですか?

710 :SCHEME餃子 ◆8X2XSCHEME :2012/12/17(月) 21:00:53.33
例えば 1 5 10 を辞書順に並べると 1 10 5 だけど、
Windows のエクスプローラだと 1 5 10 になってくれるよね。
漢数字も理解して欲しいもんだ。

711 :デフォルトの名無しさん:2012/12/17(月) 22:29:28.91
>>701
いいアイデアだと思うんだけど, 日頃使ってるものと似てるようで別の制約
付けられると結構ストレスになると思うんだ

<なんとか>sort [<ソート順引数>...] [<シェルの展開したパスリスト>]

だとかなら, まだ許せるんだけど, そのあたりをどう設計するかだと思う

# おいらの特有の現象かも知れないけど…
# CL-ANNOT みたく, ここだけ lisp 書式じゃなくななるのは体が拒否する
# もう少し, 今までの表記法と親和性のある方法だってあっただろうに

どうせ作るなら, Unix 分化とかけ離れない表づらをしていて欲しい

そうしたほうが, おそらくたくさんの人に使ってもらえるだろうとも思う

たとえば, Unix の find って, 完全に他のコマンドとは別の文法持ってるよね?
でも, なんとか他のコマンドとの整合性を取ろうとしてるじゃん

# dd は, 完全に別文化から来たものだから仕方ないんだけど…

712 :デフォルトの名無しさん:2012/12/17(月) 22:51:24.57
実践Common Lispを37ページまで読みました
whereのマクロ化による効能に早速ビリビリきました

713 :デフォルトの名無しさん:2012/12/18(火) 00:06:14.65
>>710
XPだと1 10 5だったような。
下品なのかもしれないけど、(裏でやっていいなら裏で)100001 100005 100010
とやるのはダメなの?
コンピュータ上での数字文字の理解ってこういうもんだと思っていたんだけど。
"1 ", "10 ", "5 "とコンピュータが理解しているのは逆にありがたいんだが。

714 :デフォルトの名無しさん:2012/12/18(火) 07:24:02.41
場合分けとソートを一緒にやるようなコマンドがあったら便利なんじゃないか
bucket-sort.lisp --bucket bucket-fn-1 sortfn-1 --bucket bucket-fn-2 sort-fn-2 ... target ...
みたいな感じで、場合分け関数と、それを満たした要素の集合をソートするための関数の対を引数にしてやる。
で、関数の名前はLISPの任意の関数を指定できて、--load pred.lispとかでさらに追加できる、とか。

715 :デフォルトの名無しさん:2012/12/19(水) 11:58:01.35
最低でも年一のニーズがないと存在する忘れそうなんだけど。
そんなに使うもの?

716 :デフォルトの名無しさん:2012/12/20(木) 20:54:02.91
実践Common Lispを67ページまで読みました。
&optや&restや変数スコープなどについて。
端的な具体例を示すのが上手だなと思います。
(defparameter *fn*
&nbsp; (let ((count 0))
&nbsp; &nbsp; (list
&nbsp; &nbsp; &nbsp; #'(lambda () (incf count))
&nbsp; &nbsp; &nbsp; #'(lambda () (decf count))
&nbsp; &nbsp; &nbsp; #'(lambda () count))))

717 :デフォルトの名無しさん:2012/12/21(金) 21:43:47.16
実践Common Lispを89ページまで読みました。
Lispプログラマは自分のコードの共通のパターンを見つけたら、自分自信でそのパターンをソースレベルで抽象化出来る。
Javaプログラマは、同じようにパターンを発見しても、その抽象化を言語に追加する価値があるとSunを納得させる必要がある。
うまく納得させることができたら、次はSunはJSRを発行してすべてを見当しつくすための「専門家集団」を産業界から広く収拾
しなければならない。この過程は、Sunによると平均で18ヶ月かかる。その後でコンパイラ製作者は新機能をサポートするように
コンパイラをアップグレードさせる。そして、Javaプログラマ好みのコンパイラが新しいバージョンのJavaをサポートしたとしても、
まだ新しい機能を使うことはできない。古いバージョンのJavaとの間でソースレベルの互換性を壊す許可が出るまでは。
Common Lispプログラマが5分以内に解決できるような苛立ちが、長年に渡ってJavaプログラマを苦しめることになる。

面白いww

718 :デフォルトの名無しさん:2012/12/21(金) 22:03:58.30
18ヶ月で新仕様が専門家のレビューを受けて決定するというのは、
LISPに比べるとかなり早いような気がするがどうか

719 :デフォルトの名無しさん:2012/12/21(金) 22:19:43.41
>>717

日記代わりに使うなら誤変換とか誤用とかに気をつけながら書けば
少なくとも自分のためにはなるぞ

720 :デフォルトの名無しさん:2012/12/22(土) 19:37:07.22
ニコニコ学会第3回
5th session「研究してみたマッドネス」
座長:デカこな(コメントアート研究会)、永井美智子(株式会社ドワンゴ)
審査員:栗原一貴(産業技術総合研究所)、塚田浩二(科学技術振興機構 さきがけ)
ttp://live.nicovideo.jp/watch/lv118857295
超IMEが大賞だって

超IMEとはチャット(2ch向けっぽい)で書く・ググる・流通しているベタ画像等を
表現力豊かにできるようにしてすべてをIMEですべてやってしまおうという
システムなんだとさ。

Emacsを知っている立場からするとコメントの反応がすごく良くて逆に驚いた。
Emacsで自明なことを再パッケージすることで日本向けならかなり需要はある
かもしれない。

721 :デフォルトの名無しさん:2012/12/22(土) 20:16:59.25
>>720
どこぞかにあるかも知れない, emacs スレとか elisp スレでやってくれ
まぁ, 誤爆だとは思うが…

722 :デフォルトの名無しさん:2012/12/22(土) 21:31:46.57
実践Common Lispを100ページまで読みました。
マクロに慣れ親しむためdo-primesというマクロを作ってみて、その漏れ(多重評価やgensym関連)を
修正する過程は、On Lispにおけるforのその過程を踏襲しているようだ。
once-onlyマクロの定義を一目見て笑いました。
次回読み解こうと思います。

723 :デフォルトの名無しさん:2012/12/23(日) 11:12:24.54
笑いどころなんてあったっけ? とか思って検索してみたけど、PCLのは中々の破壊力だった。

良かったらAlexandriaのonce-onlyも参考にどうぞ。

http://common-lisp.net/gitweb?p=projects/alexandria/alexandria.git;a=blob;f=macros.lisp;h=44504355fbc462c75550d9783305b1229fad3354;hb=HEAD;js=1

724 :デフォルトの名無しさん:2012/12/24(月) 16:26:36.59
アプリのユーザーインターフェースってみなさんはどうしてるんですか?

725 :デフォルトの名無しさん:2012/12/24(月) 16:45:27.50
>>724
漠然とし過ぎ。

OSは何?

726 :デフォルトの名無しさん:2012/12/24(月) 16:51:51.83
>>725
自分はLinux(arch)です。

727 :デフォルトの名無しさん:2012/12/25(火) 11:08:53.01
チョロいのならCLI,もちょっとチョロいのならTk
がっつりはOpenGLで自前

Franzが安いならなーとおもわんでもない

728 :デフォルトの名無しさん:2012/12/25(火) 15:17:34.19
>>724
組み込みでもない限り, ブラウザに丸投げ何じゃないか, 普通は?

729 :デフォルトの名無しさん:2012/12/25(火) 19:25:40.78
LisperにとってUIって何?
(a) Lispを1,000時間触ったことがある人向け。
(c) Lispを100時間触ったことがある人向け。
(e) Linuxを100時間触ったことがある人向け。
(g) いわゆるGUIを1,000時間触ったことがある人向け。
(i) いわゆるGUIを100時間触ったことがある人向け。
(k) スマホを100時間触ったことがある人向け。
(n) 19世紀初頭に生まれて、年齢は20歳の人向け。

(a)同士だったら、マクロとか、関数とか、コードも含めて超狭義のUIなんだ
よね?
世間一般で存在が認知されている日常業務用道具で(a)のほとんどが挫折する
良い例が思い浮かばない。なんか違う気がするけど、カンナとかかな。今だっ
たら電動サンダーでやった方が割と満足のいく仕上がりになる。カンナを
携帯性・汎用性を弱めて適用範囲をかなり狭めて2人ぐらいで協力して使って、
電動サンダー程度の仕上がりのカンナって作れそうな気がするんだけどな。

(n)はデジタルウォッチやウォシュレットを説明書ありで日常に忙殺されながら
ちゃんと使えるか、疑問だ。デジタルウォッチは意外と速く使えるようになるの
かな。日時秒数±1秒の精度の設定が自身ができてを使えると評価する。

730 :デフォルトの名無しさん:2012/12/25(火) 20:21:52.58
>>729
> (a)同士だったら、マクロとか、関数とか、コードも含めて超狭義のUIなんだ
> よね?
それって、普通、APIとか言わない?

ユーザーインターフェースって言うのは、
「プログラム内部の問題ではなく、動作している何らかの物[1]と人間の
インタラクション部分のことをさす」
言葉だと思っているんだが?

[1] 何らかの物はソフトであってもハードであっても構わない

> (n)はデジタルウォッチやウォシュレットを説明書ありで日常に忙殺されながら
> ちゃんと使えるか、疑問だ。
おそらくウォシュレットの方が早く使えるようになる。

デジタルウォッチは個人的には今でも馴染めない。
針のある時計ってのは一種の計算尺。
つか、いちいち引き算するのはめんどくさい。
デジタル時計ってのは、後何分で何時って感覚が希薄になるような気がする

731 :SCHEME餃子 ◆8X2XSCHEME :2012/12/25(火) 21:48:06.93
>>730
「人間」が関数やら何やらを呼出すことだってあるんじゃね?
プログラムが呼出すように設計された関数 (マクロ) 群は API で、
人間が直接呼出すことを想定したら (それがただの関数やマクロでも) UI だと思う。

つまり、ユーザが Liper かどうかよりもそのコードが想定する用途によってどこが UI といえるかが変わってくると思う。

732 :デフォルトの名無しさん:2012/12/25(火) 22:21:41.86
すみません、クリスマスで実践Common Lispを読みませんでした。

733 :デフォルトの名無しさん:2012/12/25(火) 22:43:12.85
>>731
> 「人間」が関数やら何やらを呼出すことだってあるんじゃね?
呼び出す関数やマクロの仕様はどうでもよくて, 呼び出し方法が UI なんじゃね?

shell の history 機能とか readline とか emacs の minibuffer とか
dired とか vi 系のキー割り当てとか ex コマンド呼び出しの方法とか...

機能的に異なっているものを, どれだけ統一がとれた方法で user に提示てきるか?
が UI の良し悪しを決定するし, 設計者のセンスが問われる部分なわけでしょ?

呼び出す関数やマクロの仕様が上で書いたことを左右する部分は大きいと思うけど
個々の関数やマクロの仕様は UI とは呼ばないんじゃね?

734 :デフォルトの名無しさん:2012/12/26(水) 03:56:07.80
竹内郁雄のLISP入門の本、最後の35ページを使って書いてある付録のCLの
全景スケッチ、使えるじゃん。

前書き(嫌後書き)と称して書かれていることは買って読ませる気ゼロだし、
付録について触れられていないし、追加してのの17章はやりたいことが
見えてこないし、読ませたいターゲット層が見えてこないんだよな。
付録はゴーストライターが書いたのかな。加筆された注釈とも微妙に雰囲気が
違うんだよな。注釈でもリンクがされていないようだし。

LISP再入門 or 基礎固めと称して付録を0章にして基礎の本質を伝えることを
主眼に置いた注釈にして、注釈の大幅加筆分を入れると17章は要らないことに
なる。他人が書いた物に注釈をつけているわけではないんだから、思いっきり
書けると思うんだけどねー。

一応、原書は古い時代の物ではあるが入門書の体をなしているんだから
タイトルは入門者向けと称していいし、日本語のLISP本が枯渇しているん
だからLisperは前書きぐらい読むでしょ。

735 :デフォルトの名無しさん:2012/12/26(水) 09:13:50.37
対話によるCommon Lisp入門て本
少し高いけどわかりやすいね。

736 :デフォルトの名無しさん:2012/12/26(水) 14:39:10.32
>>731
emacs+SLIME環境はGUIですって事だわなw
自分の開発環境だとまさにそんな感じだし。
それでも違和感あるなぁ

allegro common lispってなんで値段書いてないの?>>日本語サイト
あれのUIライブラリ環境すごいと思うけどご相談以外に購入方法無いとか売る気ないとしか

737 :デフォルトの名無しさん:2012/12/26(水) 14:44:13.92
>>736
>allegro common lispってなんで値段書いてないの?>>日本語サイト

法人向けパッケージとかサービス販売では多いよ。
箱売り以外にも、支援見積りなどもある。

738 :デフォルトの名無しさん:2012/12/26(水) 15:46:17.03
>>737
メールで応談ってところにメールして確認すればよいのかな?
売り物のruntimeライセンスとかすごく細かいので、手出すのがおっくうなんだよね。

年開けたら相談メールだしてみる事にします。

739 :デフォルトの名無しさん:2012/12/27(木) 09:24:27.41
>>728
それはhunchentootなどを使って、ということですか?

>>727
Tkとかいくつか利用できるGUIがあるようですけど
どれもメンテされていないのが残念なんですよね。。

740 :SCHEME餃子 ◆8X2XSCHEME :2012/12/27(木) 09:35:56.71
>>739
Tk は今年に入ってからもリリースされてるし、積極的にメンテナンスされてる。
Common Lisp から Tk を使うためのライブラリ (バインディング) がってことかな?
Tk はごく簡単な API で操作できるのであらためてライブラリに頼るほどでもないと思うよ。

741 :デフォルトの名無しさん:2012/12/27(木) 11:19:40.20
>>740
そうなんですか!
食わず嫌いでした。まずは安心して試してみます。
教えてくださりありがとうございました。

742 :デフォルトの名無しさん:2012/12/27(木) 11:27:56.31
Tkを知っている前提でCFFIで操作とかそういうのは「簡単」ではないと思うな……!
と言っても仕方ないが

743 :SCHEME餃子 ◆8X2XSCHEME :2012/12/27(木) 12:07:11.53
Tcl/Tk でいいやん。

744 :デフォルトの名無しさん:2012/12/27(木) 15:36:09.72
Tk勧めるなら普通にLtkで良いと思うんだけど、何か問題あったっけ?
あと、CommonQtとかgtk-cffi辺りはそんなに放置されてないと思う。
Windowsの話ならDoorsとかは確かに放置されてるかもしれない。

ただまあ、今時旧来のGUIツールキット頑張ってメンテしても報われんよね。
バックエンドだけCLで書いてブラウザにUIは任せた方が遙かに楽。

745 :デフォルトの名無しさん:2012/12/27(木) 17:05:44.42
http://wukix.com/mocl
これちょっと興味ある

746 :デフォルトの名無しさん:2012/12/27(木) 19:40:32.92
>>739
> それはhunchentootなどを使って、ということですか?
何でもいいんじゃね?
CGI系だと起動までの時間がもったいないので、それなりの細工はするけど
fast CGI 系だと, 素から作っても半日かかんないだろ?

747 :746:2012/12/27(木) 19:48:24.62
>>739
> fast CGI 系だと, 素から作っても半日かかんないだろ?
言っとくけど, 内部と fast CGI の糊の部分だけの話だ

748 :デフォルトの名無しさん:2012/12/27(木) 20:00:19.82
>>744
> バックエンドだけCLで書いてブラウザにUIは任せた方が遙かに楽。
バックエンドCLじゃなくていいので、ブラウザでUIってどういうのを指して
いますか?
3枚ぐらい画像のリンクを頂けないでしょうか。

あともっと高度な物を望むならjavascriptを使って、Gmail、Google+みたいなヤツですか?
javascriptを使ってもあの程度だとUIの機能として満たされないことが多く
ないですか?
GUIに行くならGUIの良さがありますよね。激安サーバにCLが乗っていないと
いうのもありますし、(自宅)Web鯖を立ててセキュリティまでやるのもローカル
のみのサービスなら良いですが公開となると格段とレベルが上がりませんか?
使う人の幅を狭めますが、ブラウザでUIよりはCUIの方がもっと表現力が豊か
だし、サーバアプリも書いて運用した方がネットセキュリティの手間が少ないと
見積もっているんですが。

あとあとそのアプリを使うもっとも推奨のWebブラウザは何なんですか?

749 :デフォルトの名無しさん:2012/12/27(木) 22:10:02.67
>>748
http://upload.wikimedia.org/wikipedia/commons/0/05/Webmin.png
http://www.ibm.com/developerworks/opensource/library/os-couchdb/fig01.jpg

こういうの、プログラミングするような人なら、結構見かけると思うんだけどな。
ウェブUIの高度な例が見たいならdocs.google.comとか見れば良いんじゃないか。

あと何か勘違いしてるように思えるんだけど、サーバ起動するのは使う人のPCだよ。
HTTPで通信するローカルプロセスを起動してブラウザとやり取りするだけ。
セキュリティについても、今の時代にポート全開とかならそりゃ影響あるだろうけど、
それを言ったら処理系とネットワーク経由で通信するSLIMEすら使えないし。

もっとも推奨のブラウザとか言われても。アプリに必要な技術次第でしょ。
HTML 4.01とCGIで十分なら何だって良いし、HTML5とか選ぶならIE6とか無理だし。

750 :SCHEME餃子 ◆8X2XSCHEME :2012/12/27(木) 22:24:50.90
Common Lisp がバックエンドに向いてるっていうのは俺もそう思うけどさ、
折角 CL スレなんだから CL 的な GUI ライブラリの話とか出てこないもんかな?
ただのバインディングじゃなくて CL によく馴染むような。

751 :デフォルトの名無しさん:2012/12/27(木) 22:31:54.97
ncursesも良さそう

752 :デフォルトの名無しさん:2012/12/27(木) 22:54:19.51
>>744で挙げたじゃないですか、やだー!

そういうの好きな人はMcCLIM辺りに走れば良いんじゃないか。
関数的などうこうとかそういうのなら、今はHaskell方面がメインストリームだと思う。

753 :デフォルトの名無しさん:2012/12/28(金) 01:34:45.89
手の混んだものでなければLtkが手軽で良かった気がする。
Webブラウザエンジン載せたアプリ作りたいとか、リッチなGUIがいいとかなら
CommonQt使うのもいいと思うよ。
ただ、CommonQtだと、UIエディタ利用できないので結局素のC++/Qt使った方が
楽だったり。

あとは、LispWorksやAllegroCLがGUIライブラリ提供してるけど、商用だしね。

754 :デフォルトの名無しさん:2012/12/28(金) 01:43:27.89
>>749
ありがとうございます。
> http://upload.wikimedia.org/wikipedia/commons/0/05/Webmin.png
> http://www.ibm.com/developerworks/opensource/library/os-couchdb/fig01.jpg
リンクとプルダウン(とチェック)の世界ですね。ドラッグ&ドロップとファイル
マネージャーのマウスで選択とShiftができるといいんですけどね。ドラッグ&
ドラッグはファイルの移動・コピー・削除の操作に限定すればOSの標準ファイル
マネージャーでやっても良いなら解決で、Shiftに関してはチェック項目の数を
可変にして増やせば代替できますね。操作履歴を残せて操作の全部をUnixコマン
ドで表現して、それをhistory | grep "hoge"や操作の表現の範囲内でshスクリ
プトのバッチ処理で操作の自動化できるといいなあ。grepは正規表現まではいら
ない。ついでにCLのことを忘れて欲しくないからshと同様に操作をCLでも表現で
きるようにするといい。かなり限定的に見かけ上そう振る舞ってくれればいい
から割と簡単か。工夫すれば自身も使いたくなるかなり凝ったアプリを作れそう
ですね。
> サーバ起動するのは使う人のPCだよ。
それがありました。

755 :デフォルトの名無しさん:2012/12/28(金) 05:11:06.89
>>753
LispWorksは多バイト文字がアレなので駄目なんだよね。
Allegroは最強っぽいけどマジで値段がしゃれにならん。

ってなわけでごりごりするんだけど、やっぱりAllegroは憧憬のまなざしを送らざるを得ない。
せめてランタイムが安ければいいのに orz

756 :デフォルトの名無しさん:2012/12/28(金) 06:53:08.72
実用 Common Lispと実践Common Lisp
どちらを先に読んだらいいですか?

757 :デフォルトの名無しさん:2012/12/28(金) 13:35:45.90
実践Common Lisp読んでるけどこれ初心者向けじゃないね。
早々にマクロ出てくるけどあれだけの解説でバッククォートと,@の感覚に
初心者は慣れ親しめないと思う。自分はOn Lispでさんざんやった後に
読んだからスラスラ読めて楽しめてるけど。実用は知らない。

758 :デフォルトの名無しさん:2012/12/28(金) 14:00:17.16
『実用』の方は、最低限Common Lispの文法説明してから、
AIの分野でのプログラムをどんどんやってくみたいだ。まだ全部読んでないけど。

実践は確かに初めのほうでマクロが出てくるが、それはさわりで、
さわり部分が終わるとCommon Lispの文法を解説していく内容になっている。

Lispの入門書としてなら実践、Lispでできることが知りたいなら実用、じゃないか?

759 :デフォルトの名無しさん:2012/12/28(金) 18:07:43.22
>>758
> Lispの入門書としてなら実践、Lispでできることが知りたいなら実用、じゃないか?
実践のasdf(今は2だっけ?)で挫折したんだけど。asdf2は使えるの?
asdfの所を省いて、パッケージのインストール・管理はquickloadがいいよ。
中の人に死ぬほど感謝している。slimeの人も。
>>757
実践のマクロの解説は短いよね。LISPはマクロ、マクロ言われているから気合い入れて
学ぼうとするんだけど、なんか分からないことが多すぎる。ドラクエの後半に使えるベギ
ラゴンだと思って、諦めている。
さて、lambda, mapcar, applyの基本的な使い方を記述できるのは、個々何の呪文なんでしょ?
覚えた呪文を組み合わせて、ちょっと踏み込んだ使い方できると個々は何の呪文?

サンプルコードありでこの程度はメラとか、関数の使い方の深さで呪文が対応している一覧表が
あるといいなあ。使い方のサンプルコードの作意を読み取るのは気づきもあるし、おもしろいん
じゃないかな。デカいコードを読んで気づくのも大事なんでしょうが。コメントを隠して作意を
コードだけで表現するのもありだけど、コメントでまんま作意を書いてもいいかも。どっちが
おもしろくなるのかは判断がつかぬ。注意としてコメントに重きを置き過ぎてコードの作意の
表現を怠るのは良くない。最大限努力する事。

あと呪文でレベルの度合いを示すのは親しみやすいけど、レベルの度合いを数値で表して複数人の
サンプルをまとめる事になった時にまとめやすいね。だから、数値の方に重きを置いた方が
いい。
;; 呪文:イオ、レベル6 作意:loop+mapcarの組み合わせ。目的はリスト内の全検索。
;; map系関数でこういうものがあるのかと思ったけどなかった。暫定関数
;; (mapcarall= list1 list2)として使っております。まだ熟成していないので作意がバラ
;; バラなのかな。
(loop :for i :to 9 :collect
(mapcar (lambda (x) (= i x))
(reverse (loop :for i :to 9 :collect i))))
試しに書いてみました。話の中で説明したコードの作意について説明できていないように感じる。
意外に難しかった。サンプルを書くのにかなりの実力がいるのかもしれません。

760 :デフォルトの名無しさん:2012/12/28(金) 18:25:11.35
オイラも実践CL読んでます。
まったくのCL入門者にはちょっと手強いですがw
最初のCDのDBを真似てお小遣い帳作ってまーす!
最終的にはパーソナル会計アプリ作るんだ^^

761 :デフォルトの名無しさん:2012/12/28(金) 18:39:34.94
分からないってのは自分が脳内で発する雑音が多すぎるからじゃね?

762 :デフォルトの名無しさん:2012/12/28(金) 18:49:21.50
実践の訳者序文によると来年はLispコミュニティ55周年みたいだね。

763 :デフォルトの名無しさん:2012/12/28(金) 21:18:20.99
CLOSってよく使いますか?

764 :デフォルトの名無しさん:2012/12/28(金) 21:35:40.52
実践と実用どちらが難しいですか?

765 :デフォルトの名無しさん:2012/12/28(金) 21:57:53.99
COMMON LISP 第2版 はみんさん持ってんですか?

766 :デフォルトの名無しさん:2012/12/28(金) 23:21:38.00
実践も実用も、lisper に認められたいい本だよ。だからどっちも読んで後悔はしないよ。

767 :デフォルトの名無しさん:2012/12/29(土) 00:38:16.86
↑どちらから先に読んでもいいですか?

768 :デフォルトの名無しさん:2012/12/29(土) 00:47:31.63
話がLOOP

769 :デフォルトの名無しさん:2012/12/29(土) 00:58:53.51
>>763
見てきたコードに限った話なら、程度の差はあれ、みんな普通に使ってるよー。
自分はほとんど使わないけど、総称関数は何かと便利なので結構使ってる。
関数型っぽく書くのが好きな人でも総称関数は使ってたりするよー。

>>765
CLtL2は原著がネットで全文公開されてるから自分は持ってない。

http://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html

770 :デフォルトの名無しさん:2012/12/29(土) 02:01:04.16
>>759
多重ループの抽象化は流石に言語仕様に入れんと思うよー。

全検索ってのがどんなものかは残念ながら良く分からんのですが、
mapcarを使って同じ処理を書くなら、内側のループは別の関数にして、

(defun =list (x l) (mapcar (lambda (y) (= x y)) l))
(defun mapcar/=list (l1 l2) (mapcar (lambda (x) (=list x l2)) l1))
(let ((0-9 (loop for n to 9 collect n))) (mapcar/=list 0-9 (reverse 0-9)))

こんなんするのが普通だと思いますよー。

771 :デフォルトの名無しさん:2012/12/29(土) 11:31:39.11
>>770
違いがよくわかりません。関数にするか、lambdaにするのかの違いですよね。
let, let*は使えますが、突っ込んだ話まではわからないので省略しました。

slime環境前提の話とします。自分の稚拙なコードの正当性を主張するなら
(loop :for x :in list1 :collect x)とも書き換えられるし、物凄く細々と
した関数を自分で作ってしまうと管理もそうですし、忘れて使わなそう
なんでlambdaで書いた方が扱いやすいし使いやすいかな。もちろん、
関数化は狙っているし、関数化するなら割と汎用的にしないというのが
あって、関数化するのにブレーキがかかってしまいます。数ヶ月後に自分の
コードを見返したときに自作関数を多用した方が良いのか、lambdaで書いた
方が良いのかが整理されると思っています。こういう物を返したいとその
具現化に向けて最短で書くのはlambdaを使った方が今は個人的に合って
いる気がします。具現化の後は書き方の整理したり、関数化の是非を考えた
りする作業をしています。

何個も公開パッケージを書いた人は一発で整理されて書けるんでしょうが、
初めての時は自分の癖が入っているコードで具現化して、その後コードを
整理していると想像しています。一発の人も公開まではしないそのパッ
ケージの開発用(開発環境ではなくそのパッケージ寄り)のコードもある程度
存在するのかなと。ある機能をつけようと思っていたけど、今回は断念した
未実装の書きかけのコードとかもあるでしょうし。

772 :デフォルトの名無しさん:2012/12/29(土) 15:01:29.32
>>771
考え方の違いっすよ。ひとかたまりの処理と考えると、そういうmap系関数がないと思うかもしれんですが、
処理を分解してあげれば、mapの考え方に素直にはまるよ、っつー。

関数なんて気軽に作って気軽に捨てりゃー良いんすよー。いくらでも作り直せるし。
世の中、特定の関数の中でしか使われない補助関数とかに溢れてるわけでー。
必要以上にlambdaでベタ書きしてると、デバッグでテストしづらくて死んだりとかー。

……書いてて思ったけど、我ながらこの語調マジうざいな。

>>771の中の人は、書き込む前に、もっと発言を推敲した方が良いと私は思いますよ。
SLIMEなんかは引き合いに出す必要のない話の内容ですし、議論なのか質問なのか、
話題をふってるのか独り言なのか、冗長な部分が多くて良く分からないことになってます。

773 :デフォルトの名無しさん:2012/12/29(土) 18:00:41.87
同意。スパゲッティを見てるみたい。

774 :デフォルトの名無しさん:2012/12/29(土) 23:46:04.26
>>771
おれが, テストコードでよくやるやつだ
関数定義するのが面倒だからあちこちに labmda を突っ込む
でも, 少しでかくなると似たような lambda がでてきて…
以下繰り返し…

775 :デフォルトの名無しさん:2012/12/30(日) 07:18:54.56
本の話どうなったんですか?

776 :デフォルトの名無しさん:2013/01/02(水) 00:48:24.85
この前LisperにLisp最高って洗脳されて触り始めたが
GUIをメインにやって行きたいから調べたら
cl-openGLとGTK以外に良い環境はありますか

777 :デフォルトの名無しさん:2013/01/02(水) 03:05:49.63
やあ (´・ω・`)
ようこそ、Lispの世界へ。
GUIの選択肢なんてほとんどないから、まず失望して落ち込んで欲しい。

http://www.cliki.net/GUI
http://www.cliki.net/current%20recommended%20libraries

今common-lisp.net落ちてるから詳しいことは調べらんないけど、
それ以外でまともにメンテされてんのってCommonQtとLtkくらいしかないんじゃいか。

やる気さえあるならFFIでAPI直にぶっ叩けば大抵のGUIツールキット使えるよ。

778 :デフォルトの名無しさん:2013/01/02(水) 08:45:25.01
横だけどドットネットまであんだね
知らなかった

779 :デフォルトの名無しさん:2013/01/02(水) 12:14:28.50
abclでswingとか言い出すとどこがCLなんじゃコラ!ってなるけど、案外使えるので困る。

780 :デフォルトの名無しさん:2013/01/02(水) 23:06:47.63
http://common-lisp.net/project/armedbear/doc/abcl-user.html
ABCLだとJavaのAPI呼び出しは簡単に出来るからそのままSwingでもtkみたいに簡単だね。

abclでSwingのDSL頑張ったみたいだけど2011年で停滞しちゃったみたいだね。
http://common-lisp.net/project/snow/
clojureだとなんとなく活発そうなのがあるんだが移植する人はいるんだろうか。
http://darevay.com/talks/clojurewest2012/

781 :デフォルトの名無しさん:2013/01/03(木) 14:27:18.28
common-lispはじめてみました。
マクロの使い道がまだわかんねえ。。。

782 :デフォルトの名無しさん:2013/01/03(木) 15:01:21.79
個人が趣味だけでやってるものだと、興味を失ったり忙しくなったりして、
なかなか安定して保守していくのは難しいよね。

業務で使ってフィードバックしてくれる企業や個人と協力できれば良いんだけど、
ことGUIの分野だとCommon Lispではあまりやらないだろうし。

783 :デフォルトの名無しさん:2013/01/03(木) 15:33:26.60
ファイルの内容を1行ずつではなく、1つの文字列にまとめる方法はありますか?
Rubyでいう、open(path).readのことです。

784 :デフォルトの名無しさん:2013/01/03(木) 15:47:30.28
>>781
いらっしゃい。

with-open-fileとかの「with-x」系のマクロとか、入門に良いんじゃないかな。
利点が分かりやすい例だと思う。

785 :デフォルトの名無しさん:2013/01/03(木) 15:58:49.38
>>783
(with-open-file (s "abc.txt")
(let ((buf (make-string (file-length s))))
(read-sequence buf s)
buf))

大きなファイルの場合、32ビット環境だと文字列の大きさの制限に引っかかることがあるのでご注意。
most-positive-fixnumの値くらいまでは大体大丈夫。

786 :デフォルトの名無しさん:2013/01/03(木) 16:04:21.67
間違えた。most-positive-fixnumじゃなくて、array-total-size-limitが正しい。

787 :デフォルトの名無しさん:2013/01/03(木) 16:51:30.43
>>785->>786
ありがとうございます!

できた!と思ったら、日本語ファイルだと文字コード関係で怒られてます。。
#\HIRAGANA_LETTER_NA (code 12394) is not a LATIN-1 character.

788 :デフォルトの名無しさん:2013/01/03(木) 17:03:38.04
>>787
(with-open-file (s "abc.txt" :direction :input :external-format :cp932)
(let ((buf (make-string (file-length s))))
(read-sequence buf s)
buf))

みたいに、with-open-fileで:external-formatを指定すればオーケー。
SBCLかCCLを使ってるなら、UTF-8なら:utf-8、Shift_JISなら:cp932、
EUC-JPなら:euc-jp辺りを指定すれば良い。CLISPはちょっと特殊だったと思う。

ついでにまとめた。

http://qiita.com/items/99a3c2537b9b34954967

789 :デフォルトの名無しさん:2013/01/03(木) 17:19:01.06
日本語の扱い(external formatとか)については以前に結構頑張って書いたのがあるんで、
詳しいことはそちらを読んで欲しい。

http://cl.cddddr.org/index.cgi?%bd%e8%cd%fd%b7%cf%3a%c6%fc%cb%dc%b8%ec%a4%ce%b0%b7%a4%a4

790 :デフォルトの名無しさん:2013/01/03(木) 17:34:23.45
>>780
簡単にできるんだけど、移植性まったく無いのでどこがCommonなんじゃーって話になるよね。
ま、FFIとか入ると結局ライブラリがプラットフォームにあるかないかで決まっちゃうのだけど。

Common LispのCommonがLisp側のみの縛りだから外部Lib使うものってどうしようもないのだろうけど。

791 :デフォルトの名無しさん:2013/01/03(木) 17:36:34.58
>>788-789
ありがとうございます。ファイルオープンについては解決しました。
その文字列をGメール(cl-smtp)で送信したいのですが、
送信する場合に以下のエラーが発生するようですorz
#\HIRAGANA_LETTER_NA (code 12394) is not a LATIN-1 character.

ちなみに環境はUbuntu, sbclです。

まとめありがとうございます。あとで復習させていただきます。

792 :デフォルトの名無しさん:2013/01/03(木) 17:50:26.71
>>791
CL-SMTP使ったことないけど、エラーが発生してるのってどこ?
with-smtp-mailとかなら、それにも:external-formatで指定できるようになってるみたい。
バックトレース見てエラーが起きてる場所が分かるなら教えて欲しい。

分かんないならその部分のコード見せて欲しい。

793 :デフォルトの名無しさん:2013/01/03(木) 18:00:03.61
>>792
お返事ありがとうございます。
以下のコードです。external-formatを指定しているのですが。。

(defvar str (read-file "~/path/to/file.txt"))

(cl-smtp:send-email "smtp.gmail.com" "from@gmail.com" "to@gmail.com"
"subject" str :ssl :tls
:authentication '(:login "from@gmail.com" "passwd")
:external-format :utf-8)

794 :デフォルトの名無しさん:2013/01/03(木) 18:35:39.16
>>793
軽く調べた所、CL-SMTPが内部でexternal formatの情報を捨ててるみたい。
英語圏の人が作ったソフトウェアには結構ある例のあれ。

具体的にはsmtp-handshakeのconvert-connection-to-sslの中にある、
cl+ssl:make-ssl-client-streamとflexi-streams:make-flexi-streamで
それまでのflexi streamのexternal formatを引き継げば修正できるけど、
可能なら他のライブラリ使った方が良いかも。

795 :デフォルトの名無しさん:2013/01/03(木) 18:58:40.61
>>794
おぉ。。。なるほど
わかりました。色々ありがとうございました

796 :デフォルトの名無しさん:2013/01/03(木) 19:27:04.11
取り敢えず修正の差分。SMTPクライアントとして妥当な動作かは不明。
一応自分のGmailアカウントには届いた。

https://gist.github.com/4442462

797 :デフォルトの名無しさん:2013/01/03(木) 20:09:46.85
>>796
SUGEEEEEEE!自分のところでも動きました!
ありがたやありがたや

コードリーディングして吸収させていただきます。

798 :デフォルトの名無しさん:2013/01/03(木) 20:22:33.09
>>784
レスありがとうございます。
初歩的な質問で恐縮ですが、そういったマクロはどのパスにあるのでしょうか?

799 :デフォルトの名無しさん:2013/01/03(木) 20:56:06.12
>>798
CCLならlib/macros.lispでSBCLならcode/macros.lispで定義されてるみたい。
SLIMEを使ってるなら単語の上にカーソルを持っていって「M-.」で移動できると思う。
ちなみにCCLのはこんなん。

(defmacro with-open-file ((var filename . args) &body body &aux (stream (gensym))(done (gensym)))
"Use open to create a file stream to file named by filename. Filename is
the name of the file to be opened. Options are used as keyword arguments
to open."
`(let (,stream ,done)
(unwind-protect
(multiple-value-prog1
(let ((,var (setq ,stream (open ,filename ,@args))))
,@body)
(setq ,done t))
(when ,stream (close ,stream :abort (null ,done))))))

ちなみに、

(macroexpand '(with-open-file (s "x.txt") (read-line s)))

を評価すると、どう変換されるのか分かる。SLIMEならC-cM-mでも。

800 :デフォルトの名無しさん:2013/01/04(金) 14:32:14.72
他の言語と感覚が違うので教えてください。
データベースに格納したデータを1つずつ取り出して表示するプログラムですが、
これでどうしてarrayがNILなのか理解できません。。

(ql:quickload :dbi)

(dbi:with-connection (conn :mysql :database-name "test")
(let* ((query (dbi:prepare conn "SELECT * FROM test_table"))
(result (dbi:execute query))
(array '()))
(loop for row = (dbi:fetch result)
while row
do (cons row array))
array))
; => NIL

801 :800:2013/01/04(金) 14:42:32.04
"test_table"にはもちろんレコードは入っています。

802 :デフォルトの名無しさん:2013/01/04(金) 15:11:34.72
多分、やりたいことって、

(dbi:with-connection (conn :mysql :database-name "test")
(let* ((query (dbi:prepare conn "SELECT * FROM test_table"))
(result (dbi:execute query)))
(loop for row = (dbi:fetch result)
while row
collect row)))

じゃないかなー。consかloopのdo節の動作を誤解してると思う。

803 :800:2013/01/04(金) 15:34:34.73
> consかloopのdo節の動作を誤解してると思う。
そのとおりでした。おそらくどっちも深く理解していません。。
やりたいことはできました。

そのあたり勉強してきます。

804 :デフォルトの名無しさん:2013/01/05(土) 05:21:15.20
SBCL使っててEXCEPTION_ACCESS_VIOLATIONとか出たけど
原因が分からん\(^0^)/

805 :デフォルトの名無しさん:2013/01/05(土) 07:42:47.11
https://bugs.launchpad.net/sbcl

で報告してもええんやで?

※ただしソフトウェア側のバグでない場合に限る

806 :デフォルトの名無しさん:2013/01/05(土) 09:17:59.44
>>805
多分、自分が悪い

どういう時にEXCEPTION_ACCESS_VIOLATIONてでるん?

807 :デフォルトの名無しさん:2013/01/05(土) 09:54:27.02
ワイはSBCL常用してないんで詳しいことは知らんが、
素直に解釈すれば、メモリのアクセス違反やと思うで。
保護されてる領域にアクセスしてOSちゃん怒りの例外。

FFIで外のポインタを操作するときにおかしなことやっとるんやないか?(適当)

バグトラッキングシステムで引っ掛かるのはこれくらいか。

http://code.google.com/p/lispbuilder/issues/detail?id=27

808 :デフォルトの名無しさん:2013/01/05(土) 21:59:12.54
thx!
解決したよ

809 :デフォルトの名無しさん:2013/01/06(日) 04:16:04.64
実用 Common Lispと実践Common Lisp
どちらを先に読んだらいいですか?

810 :デフォルトの名無しさん:2013/01/06(日) 06:22:18.14
>>809
>>514 >>756

仏の顔も三度までつーか、そろそろ文面くらい変えて釣れよw

811 :デフォルトの名無しさん:2013/01/06(日) 22:32:53.37
実用ってamazonでコメントないんだな

812 :デフォルトの名無しさん:2013/01/06(日) 23:01:55.58
>>809
おれlispで書かれた自動巡回プログラムだけど、どっちから読んでも良いらしいよ

813 :デフォルトの名無しさん:2013/01/07(月) 03:05:50.24
>>810
申し訳ございません。

814 :デフォルトの名無しさん:2013/01/07(月) 22:13:35.97
実践のp202の*acct*のaccount-typeが UNBOUND-SLOT となるんですが
それでいいの?

815 :デフォルトの名無しさん:2013/01/08(火) 05:19:39.63
CFFIの使い方わかりやすいサイト
て知っていますか。

816 :デフォルトの名無しさん:2013/01/08(火) 06:27:05.60
>>815
>>670

過去ログを検索するかグーグル先生に聞けば、ここで質問を待つ手間を省けるよ。
質問する側される側両方ハッピーになれるよ。

上のページで不十分なら、オフィシャルな英語のマニュアル辺りを読むしかないよ。
"4 An Introduction to Foreign Interfaces and CFFI"で丁寧に解説してるよ。

http://common-lisp.net/project/cffi/manual/html_node/index.html

817 :デフォルトの名無しさん:2013/01/08(火) 06:59:44.04
>>814
opening-bonus-percentage以降ならそれで良いと思う。

818 :デフォルトの名無しさん:2013/01/08(火) 07:53:58.41
>>816
ありがとうございます。

819 :デフォルトの名無しさん:2013/01/08(火) 20:59:37.90
>>817
ありがとうございます。
では、account-typeのinitialize-instance :after と
opening-bonus-percentage のそれを両方を実行するには
どう書けばいいのでしょう?

820 :デフォルトの名無しさん:2013/01/09(水) 11:46:18.86
Qiitaのcommon-lispタグのフォロワー少なすぎて泣ける

821 :デフォルトの名無しさん:2013/01/09(水) 13:03:06.15
>>819
自分は知らないけど、:afterとか複数定義できたりするんだろうか。
CLOSに詳しい人いたら教えて欲しい。

(defmethod initialize-instance :after ((account bank-account)
&key opening-bonus-percentage)
(with-slots (balance account-type) account
(when opening-bonus-percentage
(incf balance (* balance (/ opening-bonus-percentage 100))))
(setf account-type
(cond ((>= balance 100000) :gold)
((>= balance 50000) :silver)
(t :bronze)))))

>>820
redditもそんなだから問題ない。むしろGoogleで検索して来いよ的な感じに割り切った。

822 :デフォルトの名無しさん:2013/01/09(水) 13:44:17.64
stackoverflowで無問題。

823 :デフォルトの名無しさん:2013/01/10(木) 08:26:49.80
Land of Lispの翻訳版て出ないのですか?

824 :デフォルトの名無しさん:2013/01/10(木) 10:31:24.46
出処不明の噂によると、誰かが既に翻訳開始しているらしい。

825 :デフォルトの名無しさん:2013/01/10(木) 12:04:10.21
和田さんじゃないことを祈る

826 :デフォルトの名無しさん:2013/01/10(木) 12:48:31.36
R5RS Scheme処理系であるGaucheの開発者の川合史朗氏が翻訳してるとのこと。
プログラミングClojureを訳した人で、Common Lispにも精通してるから、
品質に問題はないはず。米国在住で日本語の文章も上手く、元ゲーム開発関係者。
Land of Lispの内容を考えても、翻訳者としてはこれ以上を望めないレベル。

827 :デフォルトの名無しさん:2013/01/10(木) 13:11:04.04
このスレ見ててShiro知らない奴なんておらんだろ。

828 :デフォルトの名無しさん:2013/01/10(木) 13:26:30.88
普通にいるだろ。Scheme使ってて知らないのは珍しいだろうが。

829 :デフォルトの名無しさん:2013/01/10(木) 20:14:37.44
>>826
時期はいつくらいなんですか?

830 :デフォルトの名無しさん:2013/01/10(木) 22:28:47.02
land of lisp おれも首を長くして待ってる。あのミュージックビデオは日本語訳されるのかな。

831 :デフォルトの名無しさん:2013/01/10(木) 22:43:59.84
>>829
去年の3月に話が出てて、それから続報は聞いてない気がする。

http://chaton.practical-scheme.net/common-lisp-jp/a/2012/03/07

気になるならChatonで聞いてみたら? 期待してます、みたいな言葉も添えて。

832 :デフォルトの名無しさん:2013/01/12(土) 10:43:50.73
Land of lispは原書かっちゃったからなー
翻訳でても買うだろうけどepubがいいなー

833 :デフォルトの名無しさん:2013/01/14(月) 02:26:59.64
このオライリー本って結局ポシャったんですかね
http://lisp-book.org/

834 :デフォルトの名無しさん:2013/01/14(月) 07:17:34.41
個人のブログっぽいけど、こんな書き込みもある。
http://progn.cddddr.org/logview.cgi?2012-09-09
>>833
21:44:20 <g14008> この本はオライリーから出版される予定でしたが、著者の健康etcにより頓挫しました
21:45:08 <g14008> Common Lispの本がオライリーから出るかーと期待されたのですが…
21:45:46 <g14008> 頓挫した後完成しているところは、Creative Commons Attribution-NonCommercial-NoDerivs 3.0 で公開されています

835 :デフォルトの名無しさん:2013/01/14(月) 17:43:22.48
初歩的な質問ですいません。
実践のスパムフィルタのp292(classify "Want to go to the movies?")
を実行すると以下のエラーになります。
emacs + slime + sbcl です。

arithmetic error DIVISION-BY-ZERO signalled
[Condition of type DIVISION-BY-ZERO]

Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] Abort thread (#<THREAD "repl-thread" RUNNING {10035E0063}>)

Backtrace:
0: (SB-SYS:INVOKE-INTERRUPTION #<CLOSURE (FLET SB-UNIX::INTERRUPTION :IN SB-SYS:ENABLE-INTERRUPT) {7FFFF4A0D21B}>)[:EXTERNAL]
1: ((FLET SB-UNIX::RUN-HANDLER :IN SB-SYS:ENABLE-INTERRUPT) 8 #.(SB-SYS:INT-SAP #X7FFFF4A0D530) #.(SB-SYS:INT-SAP #X7FFFF4A0D400))
2: ("foreign function: #x41961F")

どこかで書き間違えてるのでしょうが
どこで間違えてるのかこの情報だけでわかりますか?
こういう場合どうやって問題箇所を探すのでしょうか?
ひとつひとつコードを追いかけてくしかないんですか?
vsやeclipseにばかりいじって来たので
ちょっと戸惑ってます。。。
デバッグ中の変数の確認とかできないのでしょうか?

836 :デフォルトの名無しさん:2013/01/14(月) 19:25:17.15
バックトレースそれだけだと自分には判断できない。
そんな感じだと、問題部分の特定のためにブレークポイント仕掛けるとかかなー。
あるいはデバッグ出力。それぞれbreakやprint使う。

ちなみに、まともにバックトレースが表示されてれば、ローカル変数表示できるよ。
「Backtrace:」以下に表示されてるスタックフレームの上でRETで切り替えできる。

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

837 :デフォルトの名無しさん:2013/01/14(月) 19:38:09.15
Linuxなら、
https://bugs.launchpad.net/sbcl/+bug/549673
のバグで、バージョン上げれば直るかも。

838 :デフォルトの名無しさん:2013/01/14(月) 23:15:15.65
ビンゴです
https://bbs.archlinux.org/viewtopic.php?id=150511
これみたいです。

助かりました。ありがとうございました。

839 :デフォルトの名無しさん:2013/01/15(火) 06:33:48.22
エラーでたらググルしか対処法ないですか?

840 :デフォルトの名無しさん:2013/01/15(火) 14:59:37.46
上の事例はちょっと特殊で普通は自己解決です。

841 :デフォルトの名無しさん:2013/01/16(水) 04:04:52.95
英語わからなくてもだいじょうぶですか?

842 :デフォルトの名無しさん:2013/01/16(水) 04:36:18.44
commonlisp学ぶのにプログラミングGaucheて本どうですか?

843 :デフォルトの名無しさん:2013/01/16(水) 04:51:59.03
GaucheはScheme方言だから基本的にCommon Lispとは別物

844 :デフォルトの名無しさん:2013/01/16(水) 20:47:20.34
> 英語わからなくても
つか, ソフト業界の連中って英語読めない奴、意外と多いのな
ハードだとデータシート英語の事のほうが多いんで,
読むくらいできなきゃやっていけないんだが…
ある意味うらやましい

845 :デフォルトの名無しさん:2013/01/16(水) 20:56:37.38
読むのは何とかなっても単語力ないからシンボル名を付けるのにいつも苦労してる
みんなどうしてんの?

846 :デフォルトの名無しさん:2013/01/16(水) 21:25:24.35
>>845
Google翻訳で、日本語--->英単語。

847 :デフォルトの名無しさん:2013/01/17(木) 00:28:10.67
>>846
あれだめだよ
ジャーゴンファイル(出来れば昔の版)に目を通すことをおすすめする

848 :デフォルトの名無しさん:2013/01/17(木) 13:54:55.08
>>844
つか読まないやつの方が多くね?
辞書引くのがいやとかわがままで困る

>>845
ttp://codic.jp/
こういうの使ったりしてる

849 :デフォルトの名無しさん:2013/01/17(木) 19:24:15.42
おそらくこの図式だろう
読まない --> 辞書引くのがいや --> 単語忘れる --> 読めない
でも、大学の教養まで入れると、8年くらいは英語やってるはずなんだよな

850 :デフォルトの名無しさん:2013/01/17(木) 20:20:03.30
英語に限らないよ
プログラマーは雑多な知識は多い割に
当面の仕事に関係なさそうと自分で決めた範囲にはまず時間を割けない

851 :デフォルトの名無しさん:2013/01/17(木) 20:23:24.76
それ続けてると、多分どこかで行き詰まるぞ

852 :デフォルトの名無しさん:2013/01/18(金) 22:01:47.79
最近行き詰まりを感じるからLISPより英語勉強してる

853 :デフォルトの名無しさん:2013/01/19(土) 12:08:39.22
>>848
おもしろいね

欲しい語があんまり登録されてない...

854 :デフォルトの名無しさん:2013/01/19(土) 22:50:12.21
技術文書の英語って、中学の文法レベルじゃダメなの?

855 :デフォルトの名無しさん:2013/01/20(日) 22:25:31.46
>>847
> ジャーゴンファイル(出来れば昔の版)に目を通すことをおすすめする
具体的に昔の版のジャーゴンファイルって何?
>>849
大学受験レベルでマニアックでもない普通に使う3,500語ぐらいでほとんど知っていて
損はないレベルなんじゃないの。
>>854
英語に詳しくないけど、中学校の文法でだいたいの意味は読み取れると思うなあ。
+αを求められることもあるだろうけど、そん時に考えれば良い。
英語を読み解く環境を整えて入れば、それなりにいけるでしょ。時間かかるのは我慢するしかない。
東京に住んでいると併存英語案内がすごく多いから、日本語無視して英語と向き合うのはすごく
良いことだと思っている。駅名とか、英語で覚えちゃった方が良いくらい。日本で日本語無視して、
英語で暮らすのは割とできるんじゃないのかね。英語に詳しい人、ツッコミよろしく。
外国人向けに観光地にもなっていない非都市部は知らん。

856 :デフォルトの名無しさん:2013/01/20(日) 23:17:21.80
どこからツッコめばよいものか・・・

857 :デフォルトの名無しさん:2013/01/20(日) 23:18:06.94
( * )<ここで

858 :デフォルトの名無しさん:2013/01/21(月) 00:31:32.05
>>855
> 具体的に昔の版のジャーゴンファイルって何?
MITのAI LABとか SAIL の用語がバッサリ作事される前の版のことじゃないか?
http://www.dourish.com/goodies/jargon.html
とかはフルすぎるかもしれないけど

859 :デフォルトの名無しさん:2013/01/21(月) 00:54:15.10
>>858
thx.

860 :デフォルトの名無しさん:2013/01/21(月) 01:05:01.20
高橋洋一が英語圏でFAXをファックスって発音すると恥をかくと
言っていたんだけど、POPをポップと言うと恥を書くのかな?
大文字略語は全部アルファベットで読んだ方が良い?
あとインフレもinflationと言わないと通じないとも言っていた。
日本語においてのデフレはデフレーションの意味と
ディプレッション(不況)の意味が混ざっているとも言っていた。

もっと余談だが、子供を英語圏で育てたので娘に発音が悪いと
ボロクソに言われるらしいね。

861 :デフォルトの名無しさん:2013/01/21(月) 01:59:47.35
methodの引数のクラスの優先順を通常の逆向き、つまり右から左にすることはできますか?

862 :デフォルトの名無しさん:2013/01/21(月) 03:15:13.08
>>860
”恥をかくかどうか”に拘ってたら、何年たっても話せないよ。

863 :デフォルトの名無しさん:2013/01/21(月) 11:00:40.07
英語ネタ引っ張ってる連中いい加減にしろよ。
HyperSpecとかCLに絡めるならともかく、関係ない話を長々と。
マ板とか英語関係の板に行ってやれよ。

864 :デフォルトの名無しさん:2013/01/21(月) 11:23:00.88
マ板で巻いた

865 :デフォルトの名無しさん:2013/01/22(火) 22:19:53.55
実践Common Lispを169ページまで読みました。

866 :デフォルトの名無しさん:2013/01/22(火) 22:57:13.40
lisp覚えるのって英単語を(目的語とか使用法を込みで)覚えるのとかなり似てるんだね
単語覚えないと何もわからない
まぁある程度は他の言語でも同じだけど
lispは得にその感が強いな

867 :デフォルトの名無しさん:2013/01/22(火) 23:42:03.50
え、むしろ覚えること少ないよ

868 :デフォルトの名無しさん:2013/01/23(水) 01:49:01.93
このスレの人たちって、CLを仕事で使ってるの?趣味で使ってるの?宗教上の理由?

869 :デフォルトの名無しさん:2013/01/23(水) 02:09:20.48
俺は依存症だから

870 :デフォルトの名無しさん:2013/01/23(水) 10:21:31.56
仕事かどうか気にしてるようじゃプログラミング道を極めることは不可能。将来的には霞を食って暮らすのだから仕事のことを考えても無駄。

871 :デフォルトの名無しさん:2013/01/23(水) 14:02:01.93
わけわかんないこと言ってる男の人って
マ板の話が分からなくなってム板へ来たんじゃないの?

872 :デフォルトの名無しさん:2013/01/23(水) 18:06:44.43
普通に仕事で使ってる。

873 :デフォルトの名無しさん:2013/01/23(水) 19:30:44.37
>>868
俺も、普通に仕事で使ってる。

つか、仕事で使って悪いような宗教上の理由とかがあるの?

874 :デフォルトの名無しさん:2013/01/23(水) 19:36:36.36
Lisp使うってどんな案件ある?興味ある。

875 :デフォルトの名無しさん:2013/01/23(水) 21:33:30.18
>>874
コンシューマゲームとかPCゲーム以外なら何でもあるぞ。(プラットフォーム上の縛りがあるからこれらは来ない)

876 :デフォルトの名無しさん:2013/01/23(水) 21:33:54.66
>>874
社内のバックエンドは結構な率で CL 使ってるな
で、一応、 売り物にもしてる(あんま出て行ってないみたいだけど)
(4.2BSD 時代の franz から lisp 使ってたらしくってその名残みたい)

ネットワーク管理系とかは、ヒストリー調べて自己修正やらしてる所が
多いから S式ベースじゃないと結構辛い
(こっちは, ここ 10 年くらいかけて, うちのチームが開発した)

877 :デフォルトの名無しさん:2013/01/23(水) 21:39:03.18
組込みだけど、使うライブラリの構成ツールとして使ってるな。
チップ・デバイスメーカーが標準化してくれればいいんだが。

878 :デフォルトの名無しさん:2013/01/23(水) 21:48:08.81
よく分からないけれど、古典AIっぽいものを作る上では今も健在ってこと?

879 :876:2013/01/23(水) 22:59:26.71
すくなくともうちのネットワーク管理系はAIとはいわんな

880 :デフォルトの名無しさん:2013/01/23(水) 23:52:04.27
>>878
AI作成に使われた、というよりAI関連のアイディア・仮説の検証・実装用言語作成に使われた。
少なくとも当時、AIとは何かについて大勢の意見がまとまっていたわけではないから、関連しそうなものなら何でも試すという雰囲気。
最近の研究は知らない。

881 :デフォルトの名無しさん:2013/01/24(木) 13:34:10.58
>>874
データ処理のバックエンド側でそれなりに使ってるよ。
あとは実験的にあれこれ試行錯誤したい時のプロトタイプ実装の時とか。

882 :デフォルトの名無しさん:2013/01/24(木) 14:55:42.60
最近のAI、特に機械学習やパターン認識の分野では、
統計解析のテクニックを多用するためか、MatlabやRを使う研究者が多い。
LispにもかつてLisp-statという統計解析ソフトがあったが、
実装はCLじゃなくてxlispという俺Lispだったし、その開発者はRの開発に回ってしまったと聞く。

CLにもcommon-lisp-statというのがあるけど、実用レベルとは言い難いな。

883 :デフォルトの名無しさん:2013/01/24(木) 16:54:19.56
xlispは俺LispというよりSLISP後継の結構メジャーな処理系。
Common Lispではないという意味の「俺Lisp」ならその通りだが。

884 :デフォルトの名無しさん:2013/01/25(金) 23:59:41.91
land of lisp 翻訳、来月らしいね。読みたい。

885 :デフォルトの名無しさん:2013/01/26(土) 00:14:57.82
本当だ
Land of Lisp近日発売
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-87311-587-0

886 :デフォルトの名無しさん:2013/01/26(土) 00:43:08.06
on lispやプログラミングClojureのようにebookも出るのかな。

887 :デフォルトの名無しさん:2013/01/26(土) 07:41:51.32
オーム社さんオーム社さん
ここまできたんだからこれもやってください
http://nostarch.com/realmofracket

888 :デフォルトの名無しさん:2013/01/26(土) 10:10:47.01
land of lispが翻訳されるのか
Grand Theft Autoのもじりのヒャッハーな感じがどう訳されているのか期待してる

889 :デフォルトの名無しさん:2013/01/28(月) 18:42:15.20
>>79
> あとは定評のあるソースをたくさん読んで、とにかく何か自前で書く。
> どの言語でも入門がすんだ後の本はあまりない。他人のソースを参考に自前で書くのが一番。
亀レス。このソースの非Lispの割合ってどんな感じですか?
あと自前で書く意図は何ですか?

890 :デフォルトの名無しさん:2013/01/28(月) 20:05:10.38
>>79 じゃないんだが
> 亀レス。このソースの非Lispの割合ってどんな感じですか?
どの言語でも, って書いてあるじゃん.
入門書 -> 間がない -> 中の上向け -> 飛びまくって -> 規格書
って, 構造の言語は結構ある

> あと自前で書く意図は何ですか?
同じ物を書くんじゃなくって,
自前で必要なものを他人のソースとか他の言語での実装を参考に書く
って, 趣旨じゃないか?

個人的には, 車輪の再発明がおすすめ
オレオレ簡易コンパイラを作るとか, オレオレ簡易リアルタイムモニター作るとか

891 :デフォルトの名無しさん:2013/01/28(月) 22:38:52.43
Lispは入門後の書籍が豊富な稀有な言語。
他はC++と関数型言語くらい。

892 :デフォルトの名無しさん:2013/01/29(火) 00:39:40.33
この酷いコードをエレガントにしてくだしあ!
マクロの勉強をしているんで、できればいいマクロでお願いします

(defun timestamp (country)
(multiple-value-bind (sec min hour day month year)
(get-decoded-time)
(let ((japanese-style (concatenate 'string (princ-to-string year) "/" (princ-to-string month) "/" (princ-to-string day)\
))
(american-style (concatenate 'string (princ-to-string month) "/" (princ-to-string day) "/" (princ-to-string year)\
))
(usage "(timestamp \"ja\") or (timestamp \"en\")"))
(cond ((equal country "ja")
japanese-style)
((equal country "en")
american-style)
(t
usage)))))

893 :デフォルトの名無しさん:2013/01/29(火) 02:56:31.69
質問です。下記のコードでエラーが捕まらないのですがどうしてでしょうか?

コード:
(handler-case (progn (princ "before") (/ 1 0) (princ "after"))
 (error (c) (princ "catch")))

印字:beforeafter
返り値:"after"

>>892
マクロでなくて恐縮ですが、自分なら国をオブジェクトにして表記ごとのクラスを作り、総称関数を使います。

(defmethod timestamp ((country country-using-american-style))
 (concatenate 'string (princ-to-string month) "/" (princ-to-string day) "/" (princ-to-string year)))

(defmethod timestamp ((country country-using-japanese-style))
 (concatenate 'string (princ-to-string month) "/" (princ-to-string day) "/" (princ-to-string year)))

894 :デフォルトの名無しさん:2013/01/29(火) 02:58:45.55
>>893
訂正、defmethodのコードにmultiple-value-bindを忘れたので補完して見て下さい。

895 :デフォルトの名無しさん:2013/01/29(火) 04:04:33.84
>>893
lambda式中の最後の式以外は副作用が目的なので、
そこで副作用なしの式を評価したら最適化の過程で無視されたということだろうと思います。
disassembleしてみるとそもそも除算命令が無いことがわかります。

なので副作用を必要とする場合はエラーを捕捉するはずです。
(handler-case
(progn (princ "before")
(princ (/ 1 0))
(princ "after"))
(error (c) (princ "catch")))
=> "catch"

896 :デフォルトの名無しさん:2013/01/29(火) 11:32:02.38
>>892
こんなん書いといてなんだけど、普通に総称関数で良いと思う。

(defvar *behaviors* (make-hash-table :test #'eq))

(defmacro defcountry (id args &body body)
`(setf (gethash ,(intern (symbol-name id) :keyword) *behaviors*)
(lambda ,args ,@body)))

(defcountry ja (sec min hour day month year)
(declare (ignore sec min hour))
(format nil "~a/~a/~a" year month day))

(defcountry en (sec min hour day month year)
(declare (ignore sec min hour))
(format nil "~a/~a/~a" month day year))

(defcountry hour-min-sec (sec min hour &rest rest)
(declare (ignore rest))
(format nil "~a:~a:~a" hour min sec))

(defun timestamp (country)
(multiple-value-bind (sec min hour day month year) (get-decoded-time)
(funcall (gethash country *behaviors*) sec min hour day month year)))

(timestamp :hour-min-sec)
;=> "11:28:36"
(timestamp :ja)
;=> "2013/1/29"
(timestamp :en)
;=> "1/29/2013"

897 :デフォルトの名無しさん:2013/01/29(火) 11:35:33.80
あと全然関係ないけど、そういう文化ごとに順番違うのとか心底面倒だし、

http://www.w3.org/TR/NOTE-datetime

を外国の奴らはもっと使ってください。

898 :デフォルトの名無しさん:2013/01/29(火) 15:02:00.78
>>895
ありがとうございます、これは気づきませんでした。
SBCLでしたが、あらゆるコードはエラーが出れば副作用をもつので、これはバグなのでは…。

899 :デフォルトの名無しさん:2013/01/29(火) 15:57:43.18
最適化の話であってバグではない

900 :デフォルトの名無しさん:2013/01/29(火) 17:13:39.78
>>899
自分がコンパイラを書くなら、副作用がなく返り値を求められないコードは、コンパイル時に一度評価し、エラーが残ればエラーコードのみを残す設計にします。まあいずれにせよ大した問題ではないのですが…。

901 :デフォルトの名無しさん:2013/01/29(火) 17:20:45.92
>>900
> コンパイル時に一度評価し
ちょっと冷静に考えてみろ

902 :デフォルトの名無しさん:2013/01/29(火) 17:56:57.16
>>901
コンパイル時にコードを実行するなという意図であれば、self-compilingな言語ではあまり意味のないことかと思います。

ちなみにですが、CMUCLではエラーは捕まるようです。

コード:(handler-case (progn (princ "before") (/ 1 0) (princ "after")) (error (c) (princ "catch")))
印字:beforecatch
返り値:"catch"

903 :デフォルトの名無しさん:2013/01/29(火) 18:19:19.99
>>902
「部分計算」を勉強してみて。

904 :デフォルトの名無しさん:2013/01/29(火) 18:23:13.58
>>902
いや、そうじゃなくてコンパイル時に評価出来るのは定数式だけという認識はあるのか?
CMUCLは知らないが、無意味だけどエラーになる定数式はコンパイル後も残って、
変数が入っていると最適化で削除されるなら、コンパイラに一貫性がないと考える事も出来る。

905 :デフォルトの名無しさん:2013/01/29(火) 18:23:28.64
>>903
疑問点は、部分計算を行う場合にエラーの挙動を考慮しないことが仕様として許容されているのかということです。

906 :デフォルトの名無しさん:2013/01/29(火) 18:24:03.52
副作用がなく意味がない事がわかってるコードを最適化で除いてるだけだ
そのコードについて、ゼロ除算が起きる事が分かっている、という意味なら
「コンパイル時」にゼロ除算でエラーにする処理系もあるかもね

907 :デフォルトの名無しさん:2013/01/29(火) 18:27:43.51
>>906
>>900はその場合に、コンパイル時にコードを削除するのではなく、エラー関数をコードに残すべきなのではということです。

908 :デフォルトの名無しさん:2013/01/29(火) 18:43:47.53
削除されてるのは(/ 1 0)だけだぞ、errorは残ってる

(/ 1 0)を削除するなって主張なら、そういう最適化をしない
処理系を使うか、されないように設定しろ

909 :デフォルトの名無しさん:2013/01/29(火) 18:48:17.96
>>908
何度も恐縮ですが、コンパイル時に(/ 1 0)を(error 'division-by-zero)に変換すべきではないかということです。

ちなみにSBCLでは下記のオプションを加えることで正常な挙動をするようになったので、問題ではないのですが、仕様ではどうなのでしょう。

(declaim (optimize (speed 0) (safety 3) (compilation-speed 0)))

910 :デフォルトの名無しさん:2013/01/29(火) 18:49:26.49
SBCLならデバッガ入ればcompilation policyがdebug, safetyになるんじゃないかな?
まあdebugger policyの設定にも依るんだけど。

911 :デフォルトの名無しさん:2013/01/29(火) 18:56:08.62
>>909
policy通りの動作でなければバグです。

912 :デフォルトの名無しさん:2013/01/29(火) 18:59:27.25
その処理系の最適化の方針によって決められるべきで
変換すべきと一律で決めつけられる話じゃない

913 :デフォルトの名無しさん:2013/01/29(火) 19:13:40.44
>>912
最適化によって計算の結果が異なるというのは初めてだったのでやや驚いたのですが、SBCLとしてはエラー処理は「計算」の範疇外だというところでしょうか。

とにかくdeclaimで対処することにします。皆さんありがとうございました。

914 :デフォルトの名無しさん:2013/01/29(火) 20:37:54.63
確かに気持ち悪さは残るが、
実際にプログラムを書くときに問題が起こるとも思えない。

915 :デフォルトの名無しさん:2013/01/29(火) 20:49:09.04
> 最適化によって計算の結果が異なるというのは初めてだったので
最適化によっては動かない OS カーネルもあるし、
コンパイルできない、ソフトウェアもある
これは言語によらない

916 :デフォルトの名無しさん:2013/01/29(火) 22:15:56.23
>>913
SBCLでは意図的にコードの意味を変える可能性のある最適化をデフォルトにしているらしい。
http://permalink.gmane.org/gmane.lisp.steel-bank.devel/16734

917 :デフォルトの名無しさん:2013/01/29(火) 23:01:08.85
prognの最後の式以外で副作用が無い時、それは実行する意味が無いコード
という考えで最適化されている、って事も理解出来てなさげ

最適化を切る事で君の期待する挙動になったわけだけど
それを"正常な挙動"とは言わないから

918 :デフォルトの名無しさん:2013/01/29(火) 23:36:02.83
>>915>>916
ありがとうございます。

>>917
どう読めばそうなるのか…。さらに、エラーは通常「計算外」の処理ではなく、仕様で厳密に決定された、勝手に削除されるべきではない計算の一部です。つまり(/ 1 0)は副作用を持ちます。
SBCLの場合は>>914に書かれた実際的な理由によりそれを削除していると理解しています。荒れそうなのでこれ以上は書き込みません。

919 :デフォルトの名無しさん:2013/01/30(水) 00:18:44.04
エラーは副作用なのか?
エラーが副作用だとすると、あらゆるコードは副作用を持つ可能性がある事になる。
本当にそれでいいの?

920 :デフォルトの名無しさん:2013/01/30(水) 00:22:48.57
エラーを値として扱うのであれば
副作用ではなくなるとは思うが

921 :デフォルトの名無しさん:2013/01/30(水) 00:22:55.73
除算が副作用をもつなんていったら、副作用をもたないプログラムなんて存在しないことになる
ほぼ全ての関数呼び出しはスタックオーバーフローの可能性があるわけだし

922 :デフォルトの名無しさん:2013/01/30(水) 00:27:51.74
エラーの捕捉は副作用を伴う処理だろ
Haskellとかだってmonadを使う

923 :デフォルトの名無しさん:2013/01/30(水) 00:43:38.41
エラーというか処理例外の捕捉だね

924 :デフォルトの名無しさん:2013/01/30(水) 01:07:50.93
モナドで扱えるということはむしろ、副作用がないとみなせるということなんじゃないだろうか… モナドの関数だってあくまで純粋な関数なわけで、モナドは副作用を扱うための機構ではないから

まあエラー処理系モナドは、副作用のあるものを純粋な枠組みでとらえるモナドなのだから、ある意味副作用があるとも言えるわけだけど

Haskellでは、undefinedやゼロ除算みたいなエラー類は「どんな型にもなれる値」として扱われていて、評価されない限り副作用はないけれど、評価されるともろ副作用になる
だからHaskellにおける「純粋な関数」は副作用の発生源になる可能性があるけれど、それでもその関数に副作用があるとは言わない

そもそも何をもって「副作用がある」とするかってのはあまり厳密な決まりがない
どんなプログラムも「世界」を暗黙の引数と返り値にしていると考えれば純粋だし
だから「副作用」という言葉は文脈依存なところがある
副作用という言葉の意味のズレで話がこじれてるのもたまに見かけるし…

925 :デフォルトの名無しさん:2013/01/30(水) 01:16:26.52
眠い時に文を書くとわけわからんくなるね

・モナドだから副作用ってわけじゃない
・エラーを発生しうる関数(あるいは関数的なもの)は副作用をもっていると言える
・でもそういう関数を「副作用がある」とは必ずしもいわない
・副作用という概念が文脈依存

と言いたかったのです

926 :デフォルトの名無しさん:2013/01/30(水) 02:46:20.40
(progn (princ "before") (/ 1 0) (princ "after"))
-> (progn (princ "before") (/ 1 0))

(progn (princ "before") (/ 1 0) (princ "after"))
-> (progn (princ "before") (princ "after"))

結局のところ、どっちで最適化して欲しいかって事でしょ?

最適化って事なら後者でして欲しいし、単純にこのケースなら
コンパイル時エラーになってくれるのが嬉しいかなぁ

927 :デフォルトの名無しさん:2013/01/30(水) 13:36:46.83
副作用=代入or印字
という理解でいいのか

928 :デフォルトの名無しさん:2013/01/30(水) 22:01:52.22
>>910 開発者の環境にもよるんじゃね
最近の slime だと, ^U^C^C とか, ^U 付けないとデフォでは
(optimize speed) が渡るみたいだし

929 :デフォルトの名無しさん:2013/02/07(木) 15:27:11.89
Lisp-2のメリットって何なんでしょう。
意図せずに関数を変数で上書きしてしまう可能性があるとはいえ、
Warning出せばいいだけのような気がします。

930 :デフォルトの名無しさん:2013/02/07(木) 17:25:47.42
これは読んだ?
ttp://www.nhplace.com/kent/Papers/Technical-Issues.html

俺は読んでないけどw

931 :デフォルトの名無しさん:2013/02/07(木) 17:41:08.02
Lisp-1から見たらそこで警告出されても鬱陶しいだけのような

932 :デフォルトの名無しさん:2013/02/07(木) 18:25:13.48
>>929
今は歴史的な意義しかないと思うLisperが多いのでは?

MLの議論をまとめてCommon Lispの仕様を書いたSteele先生も、
どうせどのLispとも互換性ないんだから、
function cellとvalue cellはひとつにまとめといた方がよかったと発言。

933 :デフォルトの名無しさん:2013/02/07(木) 20:08:42.71
関数名とかぶる変数名を使い慣れてしまってると
「なんでこんなエラー起こるんだ???」
と、小一時間時間を潰すこともあるので、このままでいい

934 :デフォルトの名無しさん:2013/02/07(木) 21:35:29.72
>>932
レキシカルスコープ前提の話だったと記憶。
その理由は>>933だから。

935 :デフォルトの名無しさん:2013/02/08(金) 04:39:44.92
>>931
あるよ。
以上。
↓次どうぞ

936 :デフォルトの名無しさん:2013/02/08(金) 04:50:47.51
>>935
それはないんじゃないでしょうか?

937 :933:2013/02/08(金) 22:00:21.28
>>934
最初からネームスペースは一つにしておけば funarg 問題とかも起こらなくて、
funcall とか書かなくても良かったんだろうし, 933 に書いたような問題も
起きなかったんだろうけど

# C の "struct foo {...}; struct foo foo; ..." も似たようなもんだけど、
# おいらはそれが当然になっちゃったしな

938 :デフォルトの名無しさん:2013/02/08(金) 22:34:20.23
funarg問題は変数のキャプチャの問題だからちょっと違うんじゃ?

939 :デフォルトの名無しさん:2013/02/09(土) 02:02:27.57
初めてterminal emulator for Xを考え込んで整理した。まあ基本、全画面で使うんだけど。
CLでのcygwinとLinuxのterminal上の出力で互換性が高くやる方法って整理されているの?
topが理想だけど、なんかのモニターとしてn秒毎に単純なshスクリプトで出力する感じで満足なんだけどなあ。

940 :デフォルトの名無しさん:2013/02/09(土) 11:19:53.65
じゃあシェルスクリプトスレで。

941 :デフォルトの名無しさん:2013/02/09(土) 23:03:48.59
このキモさはlisper自身を表現してるの?
http://www.oreilly.co.jp/books/images/picture_large978-4-87311-587-0.jpeg

942 :デフォルトの名無しさん:2013/02/09(土) 23:40:25.01
反知性主義者だろ

943 :デフォルトの名無しさん:2013/02/09(土) 23:43:01.42
>>941
他の言語ユーザーから見ると って書いてあるだろ

944 :デフォルトの名無しさん:2013/02/10(日) 02:15:14.71
>>929
たとえば (f) みたいな式があった場合、
Lisp-1 だと f が関数か毎回調べる必要があるけど、
Lisp-2 だと束縛する時点で関数だと判明しているので、型チェックが不要になる。
なので速度上少し有利。

ってのもある。

945 :デフォルトの名無しさん:2013/02/10(日) 02:19:29.69
はあ?

946 :デフォルトの名無しさん:2013/02/10(日) 10:21:53.32
>>941
o'reillyでこの表紙か。。。
何本と読んだらいいのw?

947 :デフォルトの名無しさん:2013/02/10(日) 11:25:13.09
Lisp alien本?

948 :デフォルトの名無しさん:2013/02/10(日) 11:36:52.57
land of lisp → lol →laugh out loudly →ワロス

ワロス本

949 :デフォルトの名無しさん:2013/02/10(日) 11:41:39.37
既にLet over Lambdaがあるからだめだろう

950 :デフォルトの名無しさん:2013/02/10(日) 11:58:08.08
ラリ本

951 :デフォルトの名無しさん:2013/02/10(日) 12:44:14.18
キモ本

952 :デフォルトの名無しさん:2013/02/10(日) 23:54:15.29
確かにキモい。でも、lisp に慣れるに従って、だんだんとあの姿にも理由があることが分かってくる。他のオライリー動物と同じく、知的で愛らしいんだ。
ひょっとすると、他の動物よりlispエイリアンの方が好きになるかもしれない。
そう、まるで映画アバターに出てくる青い肌の異星人のようにね。

953 :デフォルトの名無しさん:2013/02/11(月) 00:06:59.16
>>952
最後の文意味分からん

954 :デフォルトの名無しさん:2013/02/11(月) 05:54:41.45
アバターもえくぼ

955 :デフォルトの名無しさん:2013/02/11(月) 14:45:14.90
>>952
正直に触手系が好きって言えばいいのに

956 :デフォルトの名無しさん:2013/02/11(月) 15:44:22.20
lisp monsterでぐぐったらland of lispとマンガで分かるlispが引っかかった、、、
http://lambda.bugyo.tk/cdr/mwl/

957 :デフォルトの名無しさん:2013/02/11(月) 17:56:00.07
「マンガで分かるLisp」も日本語版・英語版で書籍化すべき。

日本にも変態LISP文化があることを世界に知らしめるべき。

958 :デフォルトの名無しさん:2013/02/11(月) 18:04:37.52
オーム社とNo Starchのずぶずぶタッグならやりかねない

959 :デフォルトの名無しさん:2013/02/13(水) 01:26:54.03
>>953
アバター観てないの?あの映画に出てくるエイリアンも、最初はキモいけどそのうち慣れて、途中からは色っぽくさえ見えるんだよ。監督がすごく計算し尽くして作ってる作品。
ランドオブリスプもそんな風に、リスプエイリアンがかわいく観えるといいなあ、と思ったんだ。

960 :デフォルトの名無しさん:2013/02/13(水) 01:35:23.95
あじゃぱー

961 :デフォルトの名無しさん:2013/02/13(水) 04:26:52.18
しかしロゴとしてはこっちのトカゲの方がかっこいい。
ttp://www.wikihost.org/w/lisplogogreate/animal_logos

962 :デフォルトの名無しさん:2013/02/13(水) 10:00:21.87
>>961
このロゴ自体は好きだけど
lispにとかげのイメージってありますかねー?

963 :デフォルトの名無しさん:2013/02/13(水) 10:10:04.83
>>961
ActiveStateのロゴとかぶるからなあ…

964 :デフォルトの名無しさん:2013/02/13(水) 22:08:30.93
>>959
そんなに気持ち悪いとも思わなかったしなぁ…
まあでもそういう意味で言ってたのか。納得

965 :デフォルトの名無しさん:2013/02/13(水) 23:22:46.93
>>959
リザードマンなアバター作るようなRPG好きの私に死角はなかったが言いたいことは何となくわかる。
#むしろProduction IGの作る3Dアニメの方がキモイ

966 :デフォルトの名無しさん:2013/02/14(木) 00:15:33.99
land of lisp 、カバー動物の説明ないらしいぞ。超がっかりだ。第二版での修正を強く希望。

967 :デフォルトの名無しさん:2013/02/14(木) 21:19:13.75
lang of lispの著者の経歴って、医学博士じゃなくて薬学?博士ではないかな

968 :デフォルトの名無しさん:2013/02/15(金) 10:09:03.84
sbclって、いつのまにかwindowsポートが一番最新になったのか?
kittenメッセージもなくしてくれよ

969 :デフォルトの名無しさん:2013/02/15(金) 13:45:39.27
しかし未だに64bit WindowsはPort in progressである

970 :デフォルトの名無しさん:2013/02/15(金) 18:42:58.09
実践Common Lispを211ページまで読みました

971 :デフォルトの名無しさん:2013/02/15(金) 19:58:12.72
俺はもう5回読んだ

972 :デフォルトの名無しさん:2013/02/15(金) 19:59:25.57
学びて思わざれば則ち罔く、思いて学ばざれば則ち殆し

973 :933:2013/02/15(金) 20:03:01.74
>>968
> sbclって、いつのまにかwindowsポートが一番最新になったのか?
ほかは, thread 関連以外は変わらず安定しているってことで.
NEWS みても git log 見ても windows 関連の変更が多いし…
いいことなんじゃないの, 使用する人の裾野が広がるのは???

974 :デフォルトの名無しさん:2013/02/15(金) 20:06:31.08
変な反応…

975 :デフォルトの名無しさん:2013/02/16(土) 01:17:15.88
SBCLはずっと前からWindows版を地道に改良してた物が取り込まれて、
その周辺がまだ固まってないからWindowsの変更多いだけだよ。
特別力を入れてるとかそんなんじゃない。 相変わらずLinuxがメインターゲット。

976 :デフォルトの名無しさん:2013/02/18(月) 21:22:16.05
実践Common Lispを224ページまで読みました
FORMATの章でした。
(format nil "(~{(~{~a~^ ~})~^ ~})" '((1 2 3 4) (one two three)))

~^は便利そうですね

977 :デフォルトの名無しさん:2013/02/18(月) 23:47:55.43
60進法で角度を扱うのにreplで
例えば、45.3015と入力して45度30分15秒を表したいのですが
10進法の43.3015と区別するのに45.3015degと入力してもいいです。
こういうのはどういうふうに作るのでしょうか?
"45-30-15"等と文字列扱いも考えたのですが
できればダブルクォートなしで扱いたいのです。

978 :デフォルトの名無しさん:2013/02/19(火) 23:37:50.31
実践Common Lispを235ページまで読みました。
第19章 例外処理を超えて:コンディションと再起動 でした。

;; サンプルを作ってみました。

(define-condition my-error (error)
((text :initarg :text :reader text)))

(handler-case
(error 'my-error :text "test desu")
(my-error (c) (text c)))

(handler-bind ((my-error #'(lambda (c) (invoke-restart 'use-value "restart test"))))
(restart-case
(error 'my-error :text "test desu")
(use-value (value) value)))

現在処理している場所はそのままで、巻き戻らずに、色々な事ができるというのが面白かったです。

ひと月になったのがエラーのキャッチの構文(handler-case)と、再起動のキャッチの構文(handler-bind)が違うということです。
同じでもよさそうです。(前者のほうが簡潔ですし)

979 :デフォルトの名無しさん:2013/02/20(水) 01:29:03.79
lispやってみて、階乗から始まってフィボナッチ、ハノイの塔、クイックソート
正規表現抹茶あたり組んでみたけど、なんか飽きちゃったなあ。
なんか面白いテーマないかな。

プログラマとして勉強になるのかな、と思ってたけど、CでもRubyでもできるよ
ねこんなのは。

980 :デフォルトの名無しさん:2013/02/20(水) 02:02:45.60
>>979
そろそろ自分の作りたいものを作ってみれば?
特にアイデアがなくていかにもlispっぽい物をやってみたいなら記号微分・記号積分とか遺伝的プログラミングなんかも面白いと思うよ。

もちろんオレオレlisp処理系作ってみるのも良い。

981 :デフォルトの名無しさん:2013/02/20(水) 12:18:16.00
進数操作の質問です
(format nil "~vR" 36 120) ; => "3C"
10進数->36進数への変換は分かったのですが、
逆に36進数->10進数に変換するにはどうすればよいでしょうか

982 :デフォルトの名無しさん:2013/02/20(水) 12:40:50.26
(parse-integer "3C" :radix 36)

983 :デフォルトの名無しさん:2013/02/20(水) 12:48:02.87
>>979
Prolog on Haskell

984 :デフォルトの名無しさん:2013/02/20(水) 13:20:52.20
>>979
On Lispは読んだか?
あれ読み終われば一皮むけるぜ。
Webで読める。

985 :デフォルトの名無しさん:2013/02/20(水) 15:06:48.03
404 Blog Not Found:(笑) - 書評 - Land of Lisp
http://blog.livedoor.jp/dankogai/archives/51854832.html

986 :デフォルトの名無しさん:2013/02/20(水) 15:29:35.55
>>985
中の文を一切読まずにマンガだけ眺めて書いたような書評だなあ
次スレ立ててきます

987 :デフォルトの名無しさん:2013/02/20(水) 15:32:26.48
つぎすれ

【入門】Common Lisp その10【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1361341876/

988 :デフォルトの名無しさん:2013/02/20(水) 15:58:08.60
>>979
まさしく俺がそんな感じだ

Project Eulerの問題いくつか解いてたけど、やっぱ速度が出ないからこういう用途には向かないなーとか思った
速度はおいておくとしても、一時変数が即座に宣言できないところも慣れない・・・
マクロだとかLispの良さみたいなのが知りたかったんだけど
やっぱOn Lispとか実践Common Lisp?辺りを読むほうがいいのかな
Lisp関係の本の読書歴は竹内本を半分ぐらい読んだ程度

989 :デフォルトの名無しさん:2013/02/20(水) 16:17:27.01
ずっと気になっていたんだけど
真偽を返す関数名には-pとpで終わるパターンの二つがあるけれど
一定の法則があれば知りたい

990 :デフォルトの名無しさん:2013/02/20(水) 17:02:58.35
>>989
ttp://www.cliki.net/Naming%20conventions
ぱっと思いつく説明はここかな

991 :デフォルトの名無しさん:2013/02/20(水) 17:12:27.24
昔々、どこぞでは

branch-p?
nil

とかって会話してるとかしてないとかいう話があったが
ただの笑い話だったのかな

992 :デフォルトの名無しさん:2013/02/20(水) 19:58:21.79
セックルピー

993 :デフォルトの名無しさん:2013/02/20(水) 20:06:19.26
nori-p

994 :デフォルトの名無しさん:2013/02/20(水) 21:13:18.90
sortは何故nsortにしなかったんだろう?

995 :デフォルトの名無しさん:2013/02/20(水) 22:35:27.35
>>979
アルゴリズムの実装も楽しいよ。ちょっと複雑な奴。

996 :デフォルトの名無しさん:2013/02/20(水) 22:36:06.99
>>987
乙。

997 :デフォルトの名無しさん:2013/02/20(水) 23:39:44.94
geri-p

998 :981:2013/02/21(木) 00:06:17.27
>>982
ありがとうございます。

999 :デフォルトの名無しさん:2013/02/21(木) 00:49:04.72
>>990
なるほど、ハイフンがあるものは原則として-pと考えてよく、
ただ例外的にpどまりのもの(string-lessはless + string-と捉え直す)もあるということですね。
すっきりしました。

1000 :デフォルトの名無しさん:2013/02/21(木) 00:55:59.78
 
         ,,_
         ノ `'ーァ、       このスレッドは999を超えました
    ,,.- ‐、ノ   ./゙/   @   新しいスレッドを立ててください
  ;<,.-‐ァ|実|    `ヽ,//
  `ヽi,. / |況| .,∧ l l           実況はサッカー実況板で
    .l  |禁| ,l .l  l l     ∧,,∧     http://live2ch.net/
    |  ヽ止ヽLiヘ_l,l \ ミ゚Д゚;,彡つ彡
    .l,  .l, ヽ、__.l    \\ (⊃ J ミ´
     .l  'l l.  l ,|.     Σ⊂゙,,, ,,,ミ〜
     ゙i,,__'|,l,._l,_l          \)

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

298 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)