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

このエントリーをはてなブックマークに追加
344uy
チャーチ数っての知ったんだけど
それ使ってプログラム作ってる奴いるの?
345デフォルトの名無しさん:2012/06/19(火) 22:18:39.85
もっと勉強しなよ
346uy: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
350SCHEME餃子 ◆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
あなたが優しくバカの相手をしてやってください
353uy: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))))
368uy: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
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年ぐらいキャッチアップしていないから分からん
374uy ◆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
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)
とならなきゃいけないけど、それはとても非現実的な仕様。
クロージャにすべてのローカル環境を引き継がせねばならなくなっちゃう。
407SCHEME餃子 ◆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は変態なので多分そこまでの差はない。
メタプログラミングの分野では一日の長があるか、って感じじゃないの。
445443: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++に勝つのは難しい。
449uy: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と同等ぐらいになると思う
457453: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
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
508デフォルトの名無しさん:2012/09/04(火) 08:05:11.63
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
576572: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
壁紙にしても違和感がなさそう
581577: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
具体的には?
601SCHEME餃子 ◆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
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
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をディスってるんですか?
646644: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
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使うと楽だよー。
671669: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がまた動き出した感じ?
また一部のマニアだけで盛り上がるトークセッションをやるのかね。
674SCHEME餃子 ◆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ページまで読みました
698SCHEME餃子 ◆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)
706SCHEME餃子 ◆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
具体的に泣きながら並べる例ってどういうのですか?
710SCHEME餃子 ◆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)はデジタルウォッチやウォシュレットを説明書ありで日常に忙殺されながら
> ちゃんと使えるか、疑問だ。
おそらくウォシュレットの方が早く使えるようになる。

デジタルウォッチは個人的には今でも馴染めない。
針のある時計ってのは一種の計算尺。
つか、いちいち引き算するのはめんどくさい。
デジタル時計ってのは、後何分で何時って感覚が希薄になるような気がする
731SCHEME餃子 ◆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があるようですけど
どれもメンテされていないのが残念なんですよね。。
740SCHEME餃子 ◆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で操作とかそういうのは「簡単」ではないと思うな……!
と言っても仕方ないが
743SCHEME餃子 ◆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 系だと, 素から作っても半日かかんないだろ?
747746: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とか無理だし。
750SCHEME餃子 ◆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" "[email protected]" "[email protected]"
"subject" str :ssl :tls
:authentication '(:login "[email protected]" "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
801800: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節の動作を誤解してると思う。
803800: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っぽいものを作る上では今も健在ってこと?
879876: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
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
それはないんじゃないでしょうか?
937933: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
学びて思わざれば則ち罔く、思いて学ばざれば則ち殆し
973933: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
998981: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          \)
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。