【入門】Common Lisp その9【質問よろず】
344 :
uy :
2012/06/19(火) 18:17:48.25 チャーチ数っての知ったんだけど それ使ってプログラム作ってる奴いるの?
もっと勉強しなよ
346 :
uy :2012/06/19(火) 23:36:43.61
お前が勉強しろ いないわけね
お前が何も知らないだけだ Brainfu*kでまともなもの組む奴いないだろ?
丸投げ以下でワロタ 自分が何をしたいのかも考えられない奴が 何を威張ってるんだろうね
何でこんなギスギスしてんのw
ム板は殺伐としているのがデフォ
SchemerがいちいちCommon Lispのスレまで出張してくんなよ。
>>349 あなたが優しくバカの相手をしてやってください
353 :
uy :2012/06/20(水) 10:52:29.39
>>347 例えがおかしすぎ
所詮2chLispスレものこの程度
>>353 ではラムダ算法やチューリング等価の勉強でもしてみたら?
あなたの勉強が足りないだけです
このスレでうゆの相手をしないように。 LLバトロワスレあたりでやってください。
実用性はともかくYコンビネータとか考えるの面白いよなw
International Lisp Conference なるものを締切り前日(先週土曜)に知って 急いで論文書いたけど間に合わずにabstだけ登録した もっと早く知りたかった せっかく途中まで書いた論文だし 類似の雑誌とかあったら投稿したい どの雑誌になるんだろう
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は定義される時に一度だけ局所関数を生成する、 と思っていたのですが違いました。 」 が、ましな日本語です。
計算の効率上、等価なクロージャを何度も生成する意味ってないですけど、 何のために必要なんでしょうか。明後日の方向に全力疾走してるように見えます。
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))))
>>355 uyのせいでバトロワスレが1000いったみたいだなw
>>362 そういう話であれば、両者は本来同じ処理なのですから、
同様に効率が良いコードにコンパイルされた方が良いですよね?
なので、最近のコンパイラでは式の変換なども含めて最適化をしているそうです。
Ozについては知りませんが、何らかの事情でそういうことをしてないんでしょう。
>>359 > (defun my-length1 (lst)
> (labels ((rec (lst acc)
> (if (null lst)
> acc
> (rec (cdr lst) (1+ acc)))))
> (rec lst 0)))
recに外側の環境(my-length1)への参照がないので、局所関数を
作る必要がない。
(rec内のlstはrec自身の仮引数だから外側の環境への参照でない)
なので、実験したければ、my-length1の仮引数を参照するように変更
するとよいかと。
367 :
デフォルトの名無しさん :2012/06/21(木) 01:03:50.68
359 & 362です。
「求根」が「球根」になってた。ニュートンが開発した、たまねぎ栽培法みたいだ。Orz
>>365 さん
おっしゃる通り、非効率なソースコードでも、
きちんと最適化してコンパイルしてもらえることはありがたいことです。
他の部分はわかりませんが、my-sqrt4とmy-sqrt5のコードに関しては、
OzのコンパイラよりSBCLの方が賢いコンパイラなのですね。
>>366 さん
その通りですね。
359の例は適切な例ではなかったようです。
もう一度しっかりと本を読み返し、次のmy-sqrt2を試したところ、
my-sqrt4やmy-sqrt5とは違うアセンブリコードがでました。
;; ニュートン法による求根(第2版)
(labels ((improve (guess x) (/ (+ guess (/ x guess)) 2.0))
(good-enough? (guess x)
(< (/ (abs (- x (* guess guess))) x) 0.00001))
(sqrt-iter (guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x))))
(defun my-sqrt2 (x)
(let ((guess 1.0))
(sqrt-iter guess x))))
368 :
uy :2012/06/21(木) 05:56:20.40
>>354 なめてのかお前
ラムダ計算で作れないと決め付けてるお前がまず勉強しろよ
所詮Lispスレもこの程度
以下さわったら負け。自演に釣られても負け
>>357 今日、またCFPが出てたよ。締切り伸びたのかな?
個人で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
最近のcommon lispの学術的トレンドってどういうものなの? ここ10年ぐらいキャッチアップしていないから分からん
実際ラムダ計算のIFってIFだとだまされてたけど違うなこれ IFじゃないよこれ ただ引数に応じて関数の状態が変化するひとつの関数の定義に過ぎない Yコンビネータも同じ 引数に応じてネストの個数が変わるだけのもの つまり応用していくとソースコードから 条件分岐とループ文がなくなることが既に証明されてるわ・・・ やってらんねーな やはり近々プログラミングという分野は消滅するとしか思えない ソフトウェアに限界はない、 組み合わせに限界個数はない しかしソフトウェアに、完成はある やっている事があまりに無駄すぎる
こいつ本当にバカだ
376 :
デフォルトの名無しさん :2012/07/08(日) 22:53:03.42
Schemeでは対話インタプリタに渡せばシンボルが何を指すのかがわかるんですが、Common Lispで似たようなことをしようと思うとどうすればいいんでしょう? やっぱググるしか無いですか
シンボルをググる?
379 :
デフォルトの名無しさん :2012/07/09(月) 23:09:06.34
380 :
デフォルトの名無しさん :2012/07/11(水) 02:05:09.06
Common-Lispの勉強のため、GNU CLISP 2.49をWindows XPにインストールしました。 Emacs等は使わず単体で使用しているのですが、 日本語を含むパス名(たとえば"P:/ソフト/test.lisp"など)が使えません。 そういうものなのでしょうか。
とか思ったんですが、今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>になっていましたので、 これらの変数の問題ではなさそうだということですね。
あー、やっぱエンコーディング変えても駄目かもしれません。嘘つきました。 ちょっと解決策は思い付きません。*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というもの、知りませんでした。
検索するとターミナルエミュレータがでてきますがそれのことでしょうか。
また、コマンドプロンプトのかわりにもなるのでしょうか。
仰るとおり、PuttyはtelnetとかSSHで接続するときなんかに使うターミナルエミュレータです。 コマンドプロンプトの使用感に満足できないので、CygwinとCygTermとPuttyを組み合わせて使ってます。 UTF-8の出力を表示できたりして便利です。最近ではより手軽に使えるMinttyというのもあります。 処理系は、Clozure CL 1.8とSteel Bank Common Lisp 1.0.52では同条件で問題なかったです。 CLISPは環境依存の問題に真面目に取り組んだのが仇になった感じですね。
横レスで質問します emacs+slimeでcommon lispのソースファイルをいじりすぐに実行するからよく分からないのですが、 ターミナルエミュレーターを使用するのはどういう場面なのでしょうか
SLIMEを使うので、普通の開発時に使いたいと思うことはほぼないです。 他プロセスから処理を起動したいときとか、swankをロードしないイメージを作りたいときとか、 そんなときに。UNIX系のOS使う場合はEmacsでansi-term使っちゃいますけど。
>>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 それがコマンドプロンプトではだめなようなのです。
皆様ありがとうございました。
またわからないことがあったら質問させていただきます。
わかりやすくまとまっているね
長い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 です
(let ((*print-pretty* nil)) (format t "~{~A ~}" tmp)) かな
>>398 お〜!!うまくいきました。そんな変数があったのですね、Perlみたいです。
common lisp 自動改行 させない 等でググったのですが見つけられなかったので無理なのかなぁと思っていたところでした。
ばっちりのレスありがとうございました。
CLtL2の22,27章は一度目を通しておくべき。
(setq data '(global)) (let ((data '(lexical)) (sexp '(cons "HOGE" data))) (eval sexp)) ;=> ("HOGE" GLOBAL) なぜevalではletで定義した局所変数ではなく setqで定義したグローバル変数が使われるのでしょうか?
局所環境は空にして評価されるからです。 局所環境を反映させたければ、`などを使ってS式を作る時に行なってください。 > [Function] > eval form > > The form is evaluated in the current dynamic environment and a null lexical environment.
>>403 レスありがとうございます。
すみません、局所変数が使われない理由が局所関数は空にして評価されるからというのはトートロジーに聞こえます。
理由が知りたいのです。
理由は知りません
仮にローカルな環境を引きずるのであれば、 (setq f (let ((data '(lexical)) (sexp '(cons "HOGE" data))) (lambda () (eval sexp)))) (funcall f) => ("HOGE" LEXICAL) とならなきゃいけないけど、それはとても非現実的な仕様。 クロージャにすべてのローカル環境を引き継がせねばならなくなっちゃう。
>>404 グローバル変数はパッケージに登録されてて、
実行時のルックアップがし易いけど、
ローカル変数はコンパイル時に解決してしまうからじゃないかなぁ。
最適化をかけたら変数が消滅することすら有るわけで。
eval のために最適化を諦めるのも馬鹿馬鹿しいし。
REPLをevalで実装するとして、CLISPみたいに、 式を評価するごとに自然数をインクリメントしてプロンプトに表示し、 それをnというレキシカル変数で管理しているとする。 ここでもし、evalがレキシカルな束縛を参照できる場合、 nを破壊的に変更すると、プロンプトに表示される数も変わってしまい、 機能が破綻する。 こんな感じで、実用上も色々悲惨なことになる気が。
>>404 > ローカル変数はコンパイル時に解決してしまうからじゃないかなぁ。
これに尽きると思う。
インタプリタだけに限るなら、そういう実装があってもいいと思うけど。
ローカル変数はコンパイル時に解決してしまうとはどういうことでしょうか?
つまりコンパイル後のコードには変数のアドレスだけがあって名前は残らないので (機械語的にはアドレスさえ判れば値を読み書きできるから名前は要らない) 名前で検索することはできないということ
それだけじゃなくて、一般的にはどの変数が参照されるかわからないから、 レキシカル環境を空にしない仕様だと、環境を全て持ち運ばないといけない。
しかしクロージャはその時見えていた環境を全て持ち運びますよね? クロージャの環境持ち運びはなんとか実現できたが、 evalでのそれは難しかったのでしょうか。
CLでは、レキシカルスコープを採用している上に、
クロージャは#'(lambdaの特殊な形に限定されてる。
ところがevalは引数を一度評価してからevalので、
引数評価時にS式を生成することも可能で、
基本的に実行時にならないと何を参照するかわからない。
(
>>402 のケースは単純だから最適化する「コンパイラ」もいるだろうけど)
インタープリタの気持ちになって追ってみるか、
インタープリタを作ってみれば分かる。
始めたばっかだけど、Lispの関数の命名センスがなぁ・・・
たとえばどんなの?
cdrないなぁ とかw
好きなだけ自分好みの別名を付ければ良いよ。 S式さえ受け入れられれば、文法面では好き勝手できるのがLispなんだし。
だが俺のプロジェクトでは許さん
個人的には rplacd に怨念めいたものを感じた。
リプレース カー と リプレース クダー だろ? 確か当時は、名前に使えるのが6文字まで、とかいうシステムがあったりして、 そういう省略名は今よりだいぶ一般的だったはずだと思われる。
strdupとかmemcpyとかbzeroとか、その手の省略なんて腐るほどあるじゃないですかー! やだー!
eltって何の略なの?
エレメント(element)でねーべか
リストに対する処理をする関数の引数順が 要素 リスト、の順だったり、リスト 要素の順だったりでわかりにくい
SLIMEのサポートに頼りっきりなので、もう引数の順番とか気にしなくなった。
sexp
>>425 原則t的に省略可能なものが後ろに来るんじゃなかったっけ?
実践common lispの26章はAllegroServeを使ってwebプログラミングをしているのですが、 当方emacs+slime+sbclの環境でこの章まで読み進めてきましたので できれば既存の環境+アルファで済むようなものがあればそれを使ってみたいのですが 何かありますか?
>>429 AllegroServe は確か SBCL でも動いたと思うよ
PortableServe だったかそんな名前。
quicklisp でインストールできたは分からないけど。
(car sex)
aserve だった。quicklisp にもあった。
上につづく (defmacro do-forever (&rest body) `(if (equal (car ',body) '(return)) nil (progn (car ',body) ; ←リストが返り実行されず (do-forever (cadr ',body))))) ;←不定個数の残りだけ渡すのはムリ
Common Lisp は末尾呼び出しの最適化を保障してないから、 永久ループを再起呼び出しで書いちゃダメ。 quasiquote の意味がわかってないんじゃない? do-forever 内に do-forever を書くとマクロ展開が終わらなくなるよ。 というのは置いといて、 スタックオーバーフローしていいならこれでどう? (defmacro do-forever (&body body) (let ((g (gensym))) `(block nil (labels ((,g () (progn ,@body) (,g))) (,g)))))
>>435 回答ありがとうございます。
>quasiquote の意味がわかってないんじゃない?
はい、わかりません。勉強します。
もしよろしければ、quasiquote意外にも知っていた方が良いと
思われる事がありましたらURLやキーワードだけでも結構です。
教えていただけませんか。当方、入門書を読み終わった程度です。
マクロ書くなら、パッケージとフェイズ(コンパイル時、ロード時、実行時) については知っておいた方が良いと思う。特にフェイズ。 参考資料はHyperSpecとかCLtL2とかくらいしか思い付かなくて申し訳ないけど。
>>435 >Common Lisp は末尾呼び出しの最適化を保障してないから
知らなかった。意外だな。
これっていちばんLispらしいところだと思うんだけどどうなの?
コンパイラは出来る時にはやるから別にどうとも。 CLOSのafter method, around-methodとの相性も悪いし。
formatについての質問です (mapc #'(lambda (x) (format t "~3D~%" x)) '(267 42 8)) このようなことをするときに ~3dの3の部分を数値の桁数+1として動的に変化させる方法はありませんか?
" ~D~%"みたくスペースいれとくのじゃ駄目なの
すいませんすごく素朴な質問をさせてください C/C++や、あるいは、アセンブリ言語ではむずかしいけれど、 Lispならあっさり対応できる問題(なるべく実用的なのがいいです)の 典型例はなんかないでしょうか?
ぶっちゃけた話、アセンブリ言語とC99相手なら、数少ない例外を除いて、 ほとんどの分野の問題で圧勝できると思うけど、C++11は変態なので多分そこまでの差はない。 メタプログラミングの分野では一日の長があるか、って感じじゃないの。
445 :
443 :2012/08/06(月) 09:50:41.99
実装の手間とか、設計スタイルとかで差は出ないんでしょうか? エレキ上がりの上司にヒト泡吹かしてやりたくて情報収集中で、 そいつが「下が分かればすべてできる」みたいな思想の持ち主なんですが、 俺のほうは「できると適切は別だボケ」と反逆心をみなぎらせているわけです
不便そうな言語でスラスラ書いちゃう人もいるからねえ まあ何か大規模なもんやらせれば?
マ板に行ってくれないか?
その上司の言っていることは、そんなに間違ってないよ。 >俺のほうは「できると適切は別だボケ」と反逆心をみなぎらせているわけです まさに同じ理由で上司が正しいとも言える。 コンピュータにも得手不得手があって、ハードが分かっていれば、自ずとそれが分かる。 コンピュータに苦手な方法を採用すると、実行効率が落ちるだけの結果になる。 コンピュータにとって素直な形で実装されてて、しかも表現力も有るC++に勝つのは難しい。
449 :
uy :2012/08/06(月) 14:40:08.78
>>436 可愛らしいお名前ですね^^v
れいこちゃんのティロをフィナーレしたい・・・
(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) となるようにできると便利だと思うのですが…。 教えて下さい。
実装できない理由はないと思うけれど、 &optional でないものを省略できていいのだろうか 後者は便利というより混乱の元にならないかな
>>443 やはり記号処理じゃないかな。
パズルを解くとか
>>440 (mapc (lambda (x) (format t "~vd~%" (+ (truncate (log x 10)) 2) x)) '(267 42 8)) ; required (plusp x)
>>442 >>453 ありがとうございます。
>>453 のlogと~vを使うテクニックがすぐに思いつきませんでした。
まさにこの処理をしたかったのです。
>>444 C++11はlambdaのおかしい部分が次のバージョンC++??で直れば
schemeと同等ぐらいになると思う
457 :
453 :2012/08/07(火) 16:25:49.04
マジで
>>441 な話だったのかw
桁の大きい数字に合わせて整形したいって話なのかと思ったのに。
LISPは人工無能向けだと聞いたのですがそうなのですか?
っPAIP
つOn Lisp
arcってこけちゃった?
そういう視点でLisp方言をみる習慣がLisp界隈ではない。
物事を勝ち負けでしか考えられない奴のために、一年中オリンピックやってくんないかな
まとめるとarcはこけました
randomを使ったシミュレータもどきをつくろうとしています。 同じシミュレーションでは常に同じランダムステートを使用して どんな場合でも同じ結果が出るようにしたいのですが 常に同じランダムステートを得るにはどうしたらよいのでしょうか?
イメージをダンプしておけば良いんじゃないかと思うけど、どうだろう。 sb-ext:save-lisp-and-dieとか、ccl:save-applicationとかで。
>>469 たいしたもんを作ろうしてるわけではないんでそれでもいいんですが
大規模なのをやる時はそれだとなんかいやだなあ、と思ってます
>>471 最初にそれ試したんですが、
:SMPLOCKERなんてキーワードしらねーよって言われるんで諦めてました
外したらいけたんでそれで行きます、ありがとうございます
lispの勉強を始めたばかりです 文字列をそのまま、ダブルクォーテーション無しで出力する方法が分かりません (format nil "~A" "Hello, World") "Hello, World" どうすればいいのでしょうか。 処理系はWindows7でのSBCLです
(format t "~A" "Hello, World") Hello, World 返り値としての文字列に""がつくのはどうしようもないのでは。
REPLの出力関数いじればいいが、だからどうなのって話だ。
>>468 CLはよく知らないけど,通常のプログラミング環境でいう乱数は厳密には疑似乱数だよ.
疑似乱数生成器に初期パラメタとして与える乱数の種(random seed: 普通は大きな素数
が好まれる)が決まれば,その後得られる疑似乱数列は一意に決まる.
だから同じ結果を得たければ,最初に同じ乱数の種を与えるだけでいいはずだよ.
478 :
横レス :2012/08/18(土) 15:40:51.06
擬似乱数の知識がないのかな? seedはstateとは違う。seedはstateの初期値のこと。 古典的な擬似乱数アルゴリズムの場合、同じ型であることが多いが。 sbclの場合は、make-random-stateで作ることが出来る。 読み書きもできるから、保存も簡単。 使われているアルゴリズムはMersenne Twister。 他の処理系は知らない。
>>477 >>478 そうかい.「CLはよく知らないけど」って書いといてよかった.w
それにしてもCLだけがそんなに本質的に異なる言語だとも思えないんだけどな.
ちなみに俺も数値実験とかシミュレーションとかやっているけど,
途中の乱数をすべて保存しておかないと結果を再現できないような開発環境じゃ
とてもやる気しないぞ.
そういう処理が必要になるモデルのアルゴリズムに問題があるんじゃないの?
完全に理解不足ならお許しください.俺生粋のSchemerだから.(もう来ない)
480 :
横レス :2012/08/18(土) 16:06:56.77
>>479 > 途中の乱数をすべて保存しておかないと結果を再現できないような開発環境じゃ
> とてもやる気しないぞ.
そんなこと誰も書いてない。
えーと、つまり、CLでは擬似乱数生成器の状態をrandom-state型のオブジェクトで管理してて、 writeで書き出せてreadで読めるって理解で良い?
そう。それ以外は実装依存。
把握。ありがとー。
横レスだがそのやりとりを見て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。
sbcl依存で問題ないなら、それでいい。
ランダムステートの実装は処理系依存ですが、
関数 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
計算機プログラムの構造と解釈って本の例を試しながら読み進めようとして 右も左もわからず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 とか言われて失敗します。一体どうすれば?
>>488 「計算機プログラムの構造と解釈」が扱ってるのはLisp処理系のうちschemeって呼ばれている物
clispはCommon Lisp処理系
どちらもLisp族だけど書籍のコードを動かしたいなら「scheme処理系」でググって使ってるOSに合う物をいれなされ
>>489 apt-cache search scheme で山ほどヒットして、その中にmit-schemeとかいう一番それっぽいのがあって入れてみたらdefineのエラーが消えました!多謝!そしてさようならcommon lisp。;;
>>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だけ出力するには自分で出力関数を書かないといけない
ということでよろしいのでしょうか?
>>492 評価について何か勘違いしてる気がするよ
>>492 インタプリタのREPループの外で実行すればOK
>>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
って実行すれば出力だけ表示されるよ
カブッタ
リスト操作の質問です リスト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*) 肝心の置き換え(???の部分)が分かりません。どうすればいいですか
*list1* *list2*のように分けるんじゃなくて 対のリストを作った方がいい '('("あ" "ア") '("ぃ" "ィ") '("い" "イ" ) ・・・
(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 のところちゃんと最適化したがいいと思う。
>>501 ちょっと苦しいけど, こんな感じ?
(format t "~v,,,'*A~%" (funcall fn i) "")
それです!vでしたか。ありがとうございます。
(format t "~V@{*~}" (funcall fn i) t) とかでも行けるかも
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をソースからインストールできた方いますか?
自民党のすごい有力な議員に聞いたんですが「日韓関係どうなりますか?」。
すると「元に戻ることはありえない」と。
元に戻るとは、李明博大統領が竹島に来る前です。
「そこに戻ることはどんな状況になってもありえない。」
「日本は選挙をやって政権交代の可能性が高いでしょう。
韓国も大統領選挙で政権交代して、多少の歩み寄りはあるかもしれないが元に戻ることは絶対ない。」
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は正常に使えるので、方法はあるはずなのですが…。
>>510 反応遅くなって申し訳ない。
テストに引っかかって必要なものが正しくインストールされないのかと思ったけど、違うのかー。
それはそれとして、そのバイナリはどこから入手した物? sbcl.orgから? どこかのパッケージシステムの?
パッケージシステムでインストールしたものなら、独自のパッチをあててる可能性があるけども。
あと思い付くのは、ビルド処理に介入して、警告とかエラーが出てる部分を探ってみるとか。
うーん。こちらもMac持ってれば良かったんだけど。何かあんま力になれなくてごめんねー。
512 :
デフォルトの名無しさん :2012/09/07(金) 00:07:41.23
>>511 親切にありがとうございます。
パッチそのものは以前のバージョンへのパッチで、1.0.58ではパッチの当てられている箇所にいくつか変更が加えられています。
そのためそもそもこちらが正しくパッチを当てられている保証もないのですが。
結果的には、このバグのない以前のバージョンを採用することで解決しました。
1.0.39まではsb-posixは正しくインストールされ、1.0.40以降になると駄目のようです。
ずっと古い版を使うわけにもいかないので、近いリリースで解決してほしいところですが。
514 :
デフォルトの名無しさん :2012/09/07(金) 08:10:59.89
実用 Common Lisp と 実践Common Lisp どちらを先に読んだほうがいいですか?
516 :
デフォルトの名無しさん :2012/09/08(土) 00:39:02.55
>>513 パッチのdiffのうち、修正箇所をご指摘の部分のみに限定したところ、1.0.58でsb-posix込みのインストールに成功しました。
本当にありがとうございます。
残念なのは、流れを見るかぎり、当分本家での修正はなさそうですね。どうしてなのでしょう。
>>516 おー。良かった良かった。おめでとー。
多分、Mac OSの新しいバージョンだと、その辺りに変更があって、問題が発生しないんじゃないかな。
ビルド処理のバグとしてもう一度報告したら、改めて対応されることはあるかもしれない。
518 :
デフォルトの名無しさん :2012/09/08(土) 06:23:59.65
>>515 ありがとうございました。
注意点などございますか?
>>515 実用から入ると「なかなかの難問だ、ここはわたしのマクロで解決しましょう(眼鏡がキラリ)」てな感じのクールなハッカーになれる。
実践から入ると「うおおおおれとlispは最強のコンビだうおおお!!」みたいな熱いハッカーになれる。
実用と実践が逆じゃね? 実用にはマクロがそんなに出てこなかったような気がする
実践と実用まちがえた、てへぺろ
522 :
デフォルトの名無しさん :2012/09/08(土) 17:24:31.81
実践からでいいですよね?
523 :
デフォルトの名無しさん :2012/09/08(土) 20:03:39.61
>>522 どっちからでも大丈夫だよ。どっちもとても良い本。
個人的には実用を勧める。確実に技術レベルというか考え方が
変わる、AIの本。実践はCLの本。
実践からでいいよ。先に実践を読めば、 実用のほうでCLについて困ることはないので内容に集中できる。
そもそもCLってどういうことができてどういう部分が嬉しいの? ということを手っ取り早く知りたいなら、実践からの方が良い。 実践という本の存在目的がそれだし、実用に比べれば薄いから比較的素早く一巡できる。 そして、モヤモヤを抱えなくて済む。
526 :
デフォルトの名無しさん :2012/09/09(日) 04:56:16.81
どちらからでもいいですよね?
もちろん読みたい方から読めば良い
実用って読むのに数ヶ月かかりそうな鈍器みたいな本じゃなかったっけ
529 :
デフォルトの名無しさん :2012/09/10(月) 01:47:18.83
読み通してからじゃないとプログラミングできないってものでもないし むしろなにがしかの経験があった方がいい
531 :
デフォルトの名無しさん :2012/09/10(月) 02:27:36.37
そんな大層な話じゃない 自分でプログラミングしてつまったり分からなかったりという経験
533 :
デフォルトの名無しさん :2012/09/10(月) 06:28:42.24
535 :
デフォルトの名無しさん :2012/09/10(月) 23:51:31.75
迷わず行けよ、行けばわかるさ で初心者なのにOn Lisp表紙買いして撃沈して paul grahamのAnsi Common Lisp -> 実践と読み進めた。 実践は良書
537 :
デフォルトの名無しさん :2012/09/11(火) 00:11:24.77
案ずるより産むが易し。
539 :
デフォルトの名無しさん :2012/09/11(火) 10:58:37.01
>>443 CommonLisp なら、インタプリタや CUI のプロトタイプが
BNF とか無しで直ぐにできちゃいますよね。
541 :
デフォルトの名無しさん :2012/09/11(火) 18:19:14.69
H本を読むのと一緒だ とにかく読め。そして手を動かせ
そしてメール欄にsageと書くんだ
544 :
デフォルトの名無しさん :2012/09/12(水) 00:19:53.80
>>542 >>543 おまえら見たいなのは、ガイ・スティールやリチャード・ストールマンとは
相容れないバカ人間だ。
二度と Lisp を語るな。
沸点低すぎ あたまだいじょうぶ?
546 :
デフォルトの名無しさん :2012/09/12(水) 00:32:20.37
>>545 酔ってる。
見直したら、悪くなかった。
許せ、542, 543
絶対許さない
548 :
デフォルトの名無しさん :2012/09/12(水) 03:00:32.23
真面目に答えてくださいよ
お前ら釣られすぎだろw
550 :
デフォルトの名無しさん :2012/09/12(水) 03:39:27.63
>>548 読み方のコツか。
四の五の言わずにサッサと本を買ってきて本文を読め。
読んだ上でわからないことがあったら改めて質問せよ。
これ以上実際に読みもせずにウダウダ言っているのは、誰にとっての得にもならない。
以上。
toplevelでdefvarやdefconstantする変数や定数に*や+で耳あてするな! って主張してるのはどの本だっけ?
>>552 Let Over Lambdaの2.7節
554 :
デフォルトの名無しさん :2012/09/13(木) 00:58:13.43
>>552 そこまで強く言ってたっけ?
「主に主観的なもので、耳当ては暑苦しいからだ、読者のプログラムにはそう勧めるつもりはない」
って書いてあったような
初学の頃は、本に載っているコードは全部手で入力して実行するのを奨めます。
558 :
デフォルトの名無しさん :2012/09/18(火) 02:36:39.01
このスレに居る人はcommon lispで生計を立てている人が多数?
common lispの案件なんて見たことないな
Franzの中の人くらいじゃね?
>>559 生計は立ててないけど
業務で言語指定されない限りは CL つかうかな
指定されても, 使い捨てのツール類は CL だよな
ツールが生き延びる場合は, CL のコアイメージとソース渡しておしまいかな
突然失礼します MAXIMA使っててlispの存在を知ったのですが 今後のためにlisp層に降りるべく勉強をしてます とりあえず、「On Lisp」を読んでる最中ですが これを理解するうえで助けになる資料がありましたら 教えていただければ幸いです よろしくお願いします。
>>564 参考になりました
ありがとうございます
スレ汚し失礼しました
その二冊がOn Lispを理解するうえで助けになるか? On LispはOn Lisp単独で、ひとりで黙々と読めばいい。 時間はかかるが力になるよあの本は。
なんと中身の無いレス
lispのschemeを、やってみたい。 プログラミング初級ですが、できますかね?ニート26歳高卒。
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には 何も影響しない、ということでしょうか。
ポインタ図を書いてみれば? setfの第二引数は評価されることを念頭に置いて。
そうでもない。 (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))) こんな感じなことを踏まえると、仕組みが分かるんじゃないだろうか。
576 :
572 :2012/10/03(水) 01:04:16.14
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))
で何も値が返ってきませんでした
どこが間違っているのでしょうか
>>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
一応補足しておくけど、whileにしてもまだ正しく動かないはず。 自分で考えたいだろうから具体的どこが間違っているかは言わないけど。 擬似コードと比べてみれば分かると思う。 というか元のノートの字の汚さにびびったよw
壁紙にしても違和感がなさそう
581 :
577 :2012/10/12(金) 10:16:22.52
ありがとうございます。ご指摘の通りwhileを使うべきだったのに whenを使ってしまいました。 こう書き直したら動きました。 (defun insertion-sort (a) (do ((j 1 (+ j 1))) ((= j (length a)) a) (let ((key (nth j a)) (i (- j 1))) (loop while (and (>= i 0) (> (nth i a) key)) do (setf (nth (+ i 1) a) (nth i a)) (setf i (- i 1)) ) (setf (nth (+ i 1) a) key) )))
>>582 ありがとうございます。ご指摘の通りです。
DO一色やLOOP一色はすごいですね。
ところで、loopに:forとありますが:を使うのが主流なのでしょうか。
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
Qiitaのを書いたのは別の人ね。見つけたのでせっかくだから紹介してみた。 :forとかはそこまで主流じゃないけど、たまに見かけることはある、って感じかなー。 Emacsとかだと色が付くし、loopのキーワードってことが分かりやすいのが利点だと思う。
なるほど、そうだったのですか。勉強になります。
ASDFの今のメンテナの人だね。
>>587 google mapのルート案内にCL使うんじゃないだろうな?
型クラスというより、1st-class "interface"だよね。
あのG社も使っているCL!キミも使おう!!
外部から買ったコードをメンテナンスするだけで 新規プロジェクトとかには使わないだろ
クラッシュ・バンディクーもLISPを使ってたらしい。
最近だとLuaが多いだろうな
使わないコードをわざわざ買収しないよw
luaは組み込み専門でしょ。 小さいシステム構築以外は 厳しい言語仕様。
CFFIとかiterate保守ってるLuis Oliveiraは幼女。メアド的な意味で。
slimeを使っていて、Lispコードの慣用句を よく忘れるんだけど、何か対策ない?
具体的には?
yasnippet とか使えばいいんでね。
おまえにLispは無理
みんなは家計簿ってつけていないの? 家計簿のためだけにOooを立ち上げるのがめんど くさくなってきた。マウスに触らないといけないし。 bash上で動く単純な家計簿システムならかなり 小さくなるかな。
> Ooo 今時は Libre じゃないの? (家計簿 (小遣い ...) (書籍 ...) ...) とかするんじゃねえの, lisper だったら?
すごく初心者的な質問かもしれないけど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でも動くようなポータブルなやり方を知りたい
>>607 ヒント:エラーメッセージないとエスパーにしか分からない
Quicklisp使ってるなら、わざわざrequireしないで素直に
(ql:quickload "usocket")
しなされ。マクロを使う場合は
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload "usocket"))
しなされ。Quicklispがロードされてることを確認しなされ。
詳しくなりたいならASDFとQuicklispについてググりなされ。
loadは今だと直接使うことはほぼありませぬ。
>>608 ありがとうございます
common lispの仕組みを知りたかったので、それが聞きたかった答えです
quickloadしたらもうライブラリは読み込まれてるってことでいいんですかね
load やら asdf やら素人目にはやり方がいろいろあるように見えてしまいます
階層をなしてるんだから複数やり方があって当たり前。 open→fopen, ソケット→xmlhttprequest→jQueryみたいなもん。
Quicklispはパッケージ管理システム。他言語のRubyGemsやCPAN、Haskellに相当。 ASDFはビルドツール。多言語のmakeやRake、Apache Mavenに相当。 loadはCommon Lispの言語の機能。指定したファイルを読み込む関数。 QuicklispはASDFを利用して作られ、ASDFはloadを利用して作られている。
Haskellに相当てwHaskellのCabalねw
haskell→hackageと言いたいのかな? CPANも、cpanと書いた方がCPANシェルと分かりやすいと思う。 CPANはアーカイブの名前だから。
CPANで合ってる。QuicklispはAmazon S3上に構築されたシステムの名前。 ql:quickloadとかのフロントエンドとか全部ひっくるめてQuicklisp。
別の初心者が横から質問なんですけど 他の言語でのimportみたいなのは loadを使うのが一般的なんですか? ql:quickloadですか?
>>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に対応させます。
手動でコンパイルしたり依存関係の面倒をみるのは面倒ですから。
名前空間については、モジュールの読み込みとは別の仕組みで管理します。
パッケージとシンボルって呼ばれるものの組み合わせですね。
名前空間全体を取り込む場合はcl:use-package、一部を取り込む場合はcl:importを使います。
そういうパッケージを作る場合は、cl:defpackageの中で:useや:import-fromを使う場合が多いです。
名前空間に関しては、プリフィックスを省略せずに書くスタイルの人や、
気にせずどんどんuse-packageしていくスタイルの人など十人十色な感じです。
詳しくは、
http://weitz.de/packages.html 辺りを読むと良いんじゃないでしょうか。
faviconがZappaだw
>>617 ,618
なるほど。ありがとうございました。
イメージがつかめてきた。
clackって使われてる? 将来性あるのかな?
cklack とかなんか恩恵あるの? 基本的に組み込み物が多いんで、 lisp でHTML 吐き出す parrenscript で javascrip 作る あとは, XMLHttpRequestだけで処理が普通なんだけど...
clackは作者のブログがうざいのが何より使いたくない理由。
そういうのはまあ誰しもあるから、それはそれで良いんじゃね? Oracleうざいから、GPLうざいから、って感じの似たような話は割とあったりするしな。
sbclをデーモン化したいので調べてみた screen、detachtty、save-lisp-and-die、sb-daemonとかあったけど ぶっちゃけおすすめはどれ?
初歩的な事ですみません lispbuilder+win+sbclでguiアプリをつくってるんですけど、 exeにして起動するとプロンプト?が出るのですが、 これを非表示にしたいですのですがどうすればよいでしょうか?
皆さんlispで普段何するプログラムを書いてるんですか?(仕事以外で)
確かに気になる 他の言語じゃなくてあえてcommon lispを選ぶ理由も。
仕事で使ってる人なんているんですか?
>>636 使っている側から言わせて貰うが、どうして使わないと決めつけられるんだ?
何書いても読まない人の発作 相手にすんな
少尉さんのほうが指揮上手いよね?
ちょっと前まで構文木を直接入力するようなキチガイ沙汰だとおもって大嫌いだったのに、今だとC++の方がキチガイ沙汰にみえる orz paredit-modeすげー
>>641 何を云ってるんだ?
C に輪をかけたあの変態構文に C++11 の変態構文まで加わってるんだ,
キチガイ沙汰じゃないほうがおかしいだろ?
pareditいいね 知らなかった 3q
>>633 > 皆さんlispで普段何するプログラムを書いてるんですか?(仕事以外で)
Podcastをwgetで落とすshスクリプトの方をイメージしちゃったのでLinux + emacsで書いちゃった。
自分のSBCLのボキャブラリーが少ないし、使える時間を割いてその数時間を費やして
ボキャブラリーを補完できずに、スクリプトが完成しない率が多い。
wgetに類する関数を覚えなくても、CL上でwgetコマンドを使えれば満足するんだけどね。
後日、wgetに類する関数を覚えて、修正版をできれば良いわけだし。
ちょっとしたスクリプトもCLで書くようにしないと覚えないかな。
非プログラマなんだけど、実用言語のGaucheに浮気しない方が良いよね?
ドキュメントとかが使いやすいGaucheだったら書けそうな気がするんだけど。
それは暗に肛門lispをディスってるんですか?
646 :
644 :2012/11/14(水) 21:22:10.31
>>645 > それは暗に肛門lispをディスってるんですか?
黄門Lisp?
アナルLisp?
ディスっていないよ。
Podcastスクリプトの機能拡張で数字→N進数、N進数→数字変換器等を作りたい
んだけど、それ関連でshスクリプトを書くために調べるのが馬鹿らしくなって
きた。調べれば具現化できるんだろうけど、shだとスマートじゃないし、あと
あとCLで使いまわしたい機能・知識なんだよね。
私が始めて書いたCommon Lispのプログラムは S式をGraphVizのソースに変換するトランスレータと 出力のグラフ上を飛び回る強盗エイリアンを探しだし射殺するゲームでした それはS式と高階関数の強力さを実感させてくれる素晴らしいものでした そんな私も今ではどうぶつの森に夢中 なぜなら彼もまた特別な存在だからです
Common Lispということか。
>>646 parse-integer、format、digit-char-p、digit-char
>>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進数も変換できるとうれしいです。
それっぽいものを投げやりに書いてみた。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))))
>>651 すばらしい。
こうやって書くんですね。
読解してみます。
連番のエロ画像をダウンロードするスクリプトください
>>655 つか、どお見てもうに甚のあのスレに対する誤爆だと思うんだが…
emacs + sbcl + slimeで、with-gensymsが style-warning: undefined function: WITH-GENSYMS になりす。 関数が無いのはなぜなんでしょうか?
>>658 ん?それは標準のマクロじゃないから、どっかからとってくるか何かしないと使えないよ
どんな形式のH画像もマクロでダウンロードできるようにならないとな 再帰で関連リンクも自動でたどるんだ sxpathあたりを駆使するんだ
スレ違いな話題な上に間違ってる。
663 :
デフォルトの名無しさん :2012/11/19(月) 18:58:57.84
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が茶帯ぐらいになってきたかも。
loopマクロで (loop :for i :in '(1 2 3 4 5) :if (evenp i) :collect i) みたいにloop内の構文シンボルをキーワードシンボルで書くのって少数派? エディタのハイライトで色がつくから、見やすくていいんだけど。 あと、ここでキーワードシンボル使うと、どっか他の部分でデメリットとかある?
>>665 ちょっと前にも同じような質問があったと思うけど。
自分で使ってる名前空間でインターンされるのが嫌な場合は
キーワードで書けば良いんじゃないの。デメリットは特にないと思う。
common lispのテキストの類いでは :forじゃなくてfor表記の方が多いきがする インターンの現象をデメリットだと執筆者は思っていないのかも
リストの再帰探索をやってくれるような標準関数はありますか?
REPLからCライブラリを呼び出してみたいとおもっています。
そこでclikiのFFIのページを見てみました。
http://www.cliki.net/FFI 色々あるようなのですが、今から始めるならどれがよいでしょうか。
CLの処理系としてはFreeBSD上で
Allegro CL Free Express Edition8.2を主に使っています。
SBCLを使う事もあります。
671 :
669 :2012/12/03(月) 18:30:09.84
ありがとうございます SWINGなんてのがあるんですね 早速勉強してみます
Nつけちゃ駄目だ
Shibuya.lispがまた動き出した感じ? また一部のマニアだけで盛り上がるトークセッションをやるのかね。
>>673 Lisp で大衆向けにしたら需要ないだろ…
ニッチだから盛り上がるんだよ。
ぶっちゃけどうでもいい。参加する人に任せとけば良いんだよ。
>>673 > また一部のマニアだけで盛り上がるトークセッションをやるのかね。
自分のトークセッション観と称して要望メールを出せばいいんじゃないの。
トークセッション観がまだ未熟なら随時出せば良い。
内容が薄けりゃ薄いで文句を言うんだよこういう手合いは。 ぶっちゃけいちゃもんを付けたいだけ。
一部のマニアだけだとしても、盛り上がってるんならそれでいいだろw
Lisperはこの世のゴミ
誤爆したスマン
いいってことよ
683 :
デフォルトの名無しさん :2012/12/07(金) 23:01:55.51
そのゴミを集めるのもLispです
ゴミ集めがうまいcommon lisp
集めるだけじゃなく解放してやれよ
昔の著名な小説家が死んだ後にノート公開みたいにプログラマのメモ帳・ (プライベート)スクリプトを公開とか、やらないかな。 その小説家は公開されると分かっていて、仕事しているだろうし、死後に 取捨選択・管理する役目を受ける人も決まっていそうだ。 ファンの要望に応えて、第二弾の公開。以下、ループ。 死後に評価される人もいるのかな。
>>686 まとめる人に相当の技量が必要になるから、
難しいんじゃないかな。
>>688 > まとめる人に相当の技量が必要になるから、
> 難しいんじゃないかな。
引き受ける人が任せた人が死ぬ前に死後に読み込む環境(*0)を整えるために
打ち合わせすることは可能だろうし、引き受けた人は高度なプログラムを
書ける必要はないけど、プログラムは読めないとダメだね。
大雑把に取捨選択して、高度なプログラムを評価できる専門家にそれを評価
してもらえばいい。そして引き受けた人が法的な権利関係もある程度(*1)把握
できていればいい。
あと全部精読する必要はないけど、流し読みはしないとダメなんだろうな。
量がいっぱいあるなら、何弾回かに分けるつもりでとりあえず当たりをつけて
手づかみした部分だけを解析して公開して、反響の度合いで解析量を増やす
感じになるのかな。
*0 独自の略語とか、暗号とか、ルールとか。
*1 どこに問い合わせればいいとか、どこに頼めば法的部分をクリアするとかを
知っている程度。
github 以降で自分が公開してないスクリプトって、小物すぎたり著作権や特許に引っかかってたり 自分専用でUIが無茶だったり公序良俗によろしくないとかで何かしら問題あるんからなんだが、 小説家のノートの場合そういうのどう解決してるんだろう
;; チラシの裏 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できると便利。
>>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 はゲームしかやらないのでどうなってるかしらない.
unix風なら、sort がやるべきかもしれない。 外部から任意のソート順序を与えられる sort を sbcl で作る、というのなら結構嬉しいかも。 集合の反転は考えずに、[]内に出現しなかった文字は後ろに通常どおり辞書順にくっつけばいいよね。 リストにある文字列の集合を並び替えられると、コマンドラインツールとしても通常の関数としても使えるから便利そう。 sort用DSLからpredicateの作成。 既にありそうな気がするけど、どうなんだろ? rsync の例は xargs でなんとかなる問題なのかな?
cat $(for i in [0-9][0-9].txt; do echo "$i"; done | sort -nr) rsync --quiet
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 こう書けるんだね。
>>694 それだと, 91,90,80,70,68,60 にならないか?
>>695 > > 上の例だと[!987z-a6Y-B0]とかで文字クラス反転された場合の解釈は?
> 反転ってどういう意味?
[987z-a6Y-B0]に含まれない文字の集合
[] 内の先頭が ! または ^ の場合, 続く文字クラスに含まれない文字クラスを示す
実践Common Lispを25ページまで読みました
そうか。
>
>>695 ごめん。投稿前に反転と予想して確認したんだけど、結果を見間違っていた
みたいだ。
>>651 のように記号も含めて独自の文字テーブルを作って、その文字の集合を
反転ということなのかな。
独自テーブルは(loop :for i :to 130 :collect (code-char i))で出てくる
0-9A-Za-z -~で、記号はコードの昇順にする。
やる気はないけど、簡単にテーブルを作れるならひらがな・カタカナ・漢字って
やっても良いかな。grepの[:alnum:]みたいに[:hiragana:], [:katakana:],
[:kanji:]って表記はgrep拡張で便利なのかな?
実際に必要性ないとポイントが見えないし、作る気しないね。キッチリ作る人は
偉い。
sort 的なもの作るとしても, 空白, クオート, メタキャラクターを含んだ
ファイル名の扱いが問題. 結果は文字列にしかならないから,
うまくクオートした形で結果を表示しないと色々と問題が…
# Unix 的にはファイル名として禁止されている文字は '/' と '\0' だけだ
>>699 > grepの[:alnum:]みたいに
真面目にやるなら, posix 的には grep の [:xxxx:] は必須
grep の [...] の定義と同じもの + '!' でも反転が求められている
(歴史的な事情, grep の '^' のほうが後から?)
> [:hiragana:], [:katakana:],[:kanji:]
unnicode 的にはもっと細かい区分を考えないとまずそう
あれ、あんまりいいアイディアじゃなかったかな…。 (元質問者とは違うんだけどせっかく思いついたので) もう一度だけ説明させてください。 例えば '[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関数 に渡すだけで リスト内の文字列の昇順降順を自在に操ることができそうなんだけど、どうかな?
あればあったで楽できる気はするけど、そういうカスタマイズされたソートが必要なケース自体が、 多くの人にとってあまりない気がする。マッチングとかと違って。
比較関数生成するってだけの話でしょ。
Unicode前提だと \p{InHiragana} が使える処理系もあるんじゃないかな
>>702 むしろそういうソート条件のGenericな表記方法ってのを発明するのが楽しそう
あんまり自分は必要ないけど(特殊なときは泣きながら並べるw)
順序のフォーマルな表記法って面白そうなテーマだね。
比較は込み入った条件だと煩雑になるからな。
そういやsregexやperl 6 rulesでどうよ?
>>701 改めての文字列の昇順降順に興味ないけど、そんなに難しいことなの?
おおむね昇順・降順ができて、動けばいいや。難しいならあきらめるし。
>>705 具体的に泣きながら並べる例ってどういうのですか?
例えば 1 5 10 を辞書順に並べると 1 10 5 だけど、 Windows のエクスプローラだと 1 5 10 になってくれるよね。 漢数字も理解して欲しいもんだ。
>>701 いいアイデアだと思うんだけど, 日頃使ってるものと似てるようで別の制約
付けられると結構ストレスになると思うんだ
<なんとか>sort [<ソート順引数>...] [<シェルの展開したパスリスト>]
だとかなら, まだ許せるんだけど, そのあたりをどう設計するかだと思う
# おいらの特有の現象かも知れないけど…
# CL-ANNOT みたく, ここだけ lisp 書式じゃなくななるのは体が拒否する
# もう少し, 今までの表記法と親和性のある方法だってあっただろうに
どうせ作るなら, Unix 分化とかけ離れない表づらをしていて欲しい
そうしたほうが, おそらくたくさんの人に使ってもらえるだろうとも思う
たとえば, Unix の find って, 完全に他のコマンドとは別の文法持ってるよね?
でも, なんとか他のコマンドとの整合性を取ろうとしてるじゃん
# dd は, 完全に別文化から来たものだから仕方ないんだけど…
実践Common Lispを37ページまで読みました whereのマクロ化による効能に早速ビリビリきました
>>710 XPだと1 10 5だったような。
下品なのかもしれないけど、(裏でやっていいなら裏で)100001 100005 100010
とやるのはダメなの?
コンピュータ上での数字文字の理解ってこういうもんだと思っていたんだけど。
"1 ", "10 ", "5 "とコンピュータが理解しているのは逆にありがたいんだが。
場合分けとソートを一緒にやるようなコマンドがあったら便利なんじゃないか bucket-sort.lisp --bucket bucket-fn-1 sortfn-1 --bucket bucket-fn-2 sort-fn-2 ... target ... みたいな感じで、場合分け関数と、それを満たした要素の集合をソートするための関数の対を引数にしてやる。 で、関数の名前はLISPの任意の関数を指定できて、--load pred.lispとかでさらに追加できる、とか。
最低でも年一のニーズがないと存在する忘れそうなんだけど。 そんなに使うもの?
実践Common Lispを67ページまで読みました。 &optや&restや変数スコープなどについて。 端的な具体例を示すのが上手だなと思います。 (defparameter *fn* (let ((count 0)) (list #'(lambda () (incf count)) #'(lambda () (decf count)) #'(lambda () count))))
実践Common Lispを89ページまで読みました。 Lispプログラマは自分のコードの共通のパターンを見つけたら、自分自信でそのパターンをソースレベルで抽象化出来る。 Javaプログラマは、同じようにパターンを発見しても、その抽象化を言語に追加する価値があるとSunを納得させる必要がある。 うまく納得させることができたら、次はSunはJSRを発行してすべてを見当しつくすための「専門家集団」を産業界から広く収拾 しなければならない。この過程は、Sunによると平均で18ヶ月かかる。その後でコンパイラ製作者は新機能をサポートするように コンパイラをアップグレードさせる。そして、Javaプログラマ好みのコンパイラが新しいバージョンのJavaをサポートしたとしても、 まだ新しい機能を使うことはできない。古いバージョンのJavaとの間でソースレベルの互換性を壊す許可が出るまでは。 Common Lispプログラマが5分以内に解決できるような苛立ちが、長年に渡ってJavaプログラマを苦しめることになる。 面白いww
18ヶ月で新仕様が専門家のレビューを受けて決定するというのは、 LISPに比べるとかなり早いような気がするがどうか
>>717 日記代わりに使うなら誤変換とか誤用とかに気をつけながら書けば
少なくとも自分のためにはなるぞ
ニコニコ学会第3回
5th session「研究してみたマッドネス」
座長:デカこな(コメントアート研究会)、永井美智子(株式会社ドワンゴ)
審査員:栗原一貴(産業技術総合研究所)、塚田浩二(科学技術振興機構 さきがけ)
ttp://live.nicovideo.jp/watch/lv118857295 超IMEが大賞だって
超IMEとはチャット(2ch向けっぽい)で書く・ググる・流通しているベタ画像等を
表現力豊かにできるようにしてすべてをIMEですべてやってしまおうという
システムなんだとさ。
Emacsを知っている立場からするとコメントの反応がすごく良くて逆に驚いた。
Emacsで自明なことを再パッケージすることで日本向けならかなり需要はある
かもしれない。
>>720 どこぞかにあるかも知れない, emacs スレとか elisp スレでやってくれ
まぁ, 誤爆だとは思うが…
実践Common Lispを100ページまで読みました。 マクロに慣れ親しむためdo-primesというマクロを作ってみて、その漏れ(多重評価やgensym関連)を 修正する過程は、On Lispにおけるforのその過程を踏襲しているようだ。 once-onlyマクロの定義を一目見て笑いました。 次回読み解こうと思います。
アプリのユーザーインターフェースってみなさんはどうしてるんですか?
チョロいのならCLI,もちょっとチョロいのならTk がっつりはOpenGLで自前 Franzが安いならなーとおもわんでもない
>>724 組み込みでもない限り, ブラウザに丸投げ何じゃないか, 普通は?
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秒の精度の設定が自身ができてを使えると評価する。
>>729 > (a)同士だったら、マクロとか、関数とか、コードも含めて超狭義のUIなんだ
> よね?
それって、普通、APIとか言わない?
ユーザーインターフェースって言うのは、
「プログラム内部の問題ではなく、動作している何らかの物[1]と人間の
インタラクション部分のことをさす」
言葉だと思っているんだが?
[1] 何らかの物はソフトであってもハードであっても構わない
> (n)はデジタルウォッチやウォシュレットを説明書ありで日常に忙殺されながら
> ちゃんと使えるか、疑問だ。
おそらくウォシュレットの方が早く使えるようになる。
デジタルウォッチは個人的には今でも馴染めない。
針のある時計ってのは一種の計算尺。
つか、いちいち引き算するのはめんどくさい。
デジタル時計ってのは、後何分で何時って感覚が希薄になるような気がする
>>730 「人間」が関数やら何やらを呼出すことだってあるんじゃね?
プログラムが呼出すように設計された関数 (マクロ) 群は API で、
人間が直接呼出すことを想定したら (それがただの関数やマクロでも) UI だと思う。
つまり、ユーザが Liper かどうかよりもそのコードが想定する用途によってどこが UI といえるかが変わってくると思う。
すみません、クリスマスで実践Common Lispを読みませんでした。
>>731 > 「人間」が関数やら何やらを呼出すことだってあるんじゃね?
呼び出す関数やマクロの仕様はどうでもよくて, 呼び出し方法が UI なんじゃね?
shell の history 機能とか readline とか emacs の minibuffer とか
dired とか vi 系のキー割り当てとか ex コマンド呼び出しの方法とか...
機能的に異なっているものを, どれだけ統一がとれた方法で user に提示てきるか?
が UI の良し悪しを決定するし, 設計者のセンスが問われる部分なわけでしょ?
呼び出す関数やマクロの仕様が上で書いたことを左右する部分は大きいと思うけど
個々の関数やマクロの仕様は UI とは呼ばないんじゃね?
竹内郁雄のLISP入門の本、最後の35ページを使って書いてある付録のCLの 全景スケッチ、使えるじゃん。 前書き(嫌後書き)と称して書かれていることは買って読ませる気ゼロだし、 付録について触れられていないし、追加してのの17章はやりたいことが 見えてこないし、読ませたいターゲット層が見えてこないんだよな。 付録はゴーストライターが書いたのかな。加筆された注釈とも微妙に雰囲気が 違うんだよな。注釈でもリンクがされていないようだし。 LISP再入門 or 基礎固めと称して付録を0章にして基礎の本質を伝えることを 主眼に置いた注釈にして、注釈の大幅加筆分を入れると17章は要らないことに なる。他人が書いた物に注釈をつけているわけではないんだから、思いっきり 書けると思うんだけどねー。 一応、原書は古い時代の物ではあるが入門書の体をなしているんだから タイトルは入門者向けと称していいし、日本語のLISP本が枯渇しているん だからLisperは前書きぐらい読むでしょ。
735 :
デフォルトの名無しさん :2012/12/26(水) 09:13:50.37
対話によるCommon Lisp入門て本 少し高いけどわかりやすいね。
>>731 emacs+SLIME環境はGUIですって事だわなw
自分の開発環境だとまさにそんな感じだし。
それでも違和感あるなぁ
allegro common lispってなんで値段書いてないの?>>日本語サイト
あれのUIライブラリ環境すごいと思うけどご相談以外に購入方法無いとか売る気ないとしか
>>736 >allegro common lispってなんで値段書いてないの?>>日本語サイト
法人向けパッケージとかサービス販売では多いよ。
箱売り以外にも、支援見積りなどもある。
>>737 メールで応談ってところにメールして確認すればよいのかな?
売り物のruntimeライセンスとかすごく細かいので、手出すのがおっくうなんだよね。
年開けたら相談メールだしてみる事にします。
>>728 それはhunchentootなどを使って、ということですか?
>>727 Tkとかいくつか利用できるGUIがあるようですけど
どれもメンテされていないのが残念なんですよね。。
>>739 Tk は今年に入ってからもリリースされてるし、積極的にメンテナンスされてる。
Common Lisp から Tk を使うためのライブラリ (バインディング) がってことかな?
Tk はごく簡単な API で操作できるのであらためてライブラリに頼るほどでもないと思うよ。
>>740 そうなんですか!
食わず嫌いでした。まずは安心して試してみます。
教えてくださりありがとうございました。
Tkを知っている前提でCFFIで操作とかそういうのは「簡単」ではないと思うな……! と言っても仕方ないが
Tcl/Tk でいいやん。
Tk勧めるなら普通にLtkで良いと思うんだけど、何か問題あったっけ? あと、CommonQtとかgtk-cffi辺りはそんなに放置されてないと思う。 Windowsの話ならDoorsとかは確かに放置されてるかもしれない。 ただまあ、今時旧来のGUIツールキット頑張ってメンテしても報われんよね。 バックエンドだけCLで書いてブラウザにUIは任せた方が遙かに楽。
>>739 > それはhunchentootなどを使って、ということですか?
何でもいいんじゃね?
CGI系だと起動までの時間がもったいないので、それなりの細工はするけど
fast CGI 系だと, 素から作っても半日かかんないだろ?
747 :
746 :2012/12/27(木) 19:48:24.62
>>739 > fast CGI 系だと, 素から作っても半日かかんないだろ?
言っとくけど, 内部と fast CGI の糊の部分だけの話だ
>>744 > バックエンドだけCLで書いてブラウザにUIは任せた方が遙かに楽。
バックエンドCLじゃなくていいので、ブラウザでUIってどういうのを指して
いますか?
3枚ぐらい画像のリンクを頂けないでしょうか。
あともっと高度な物を望むならjavascriptを使って、Gmail、Google+みたいなヤツですか?
javascriptを使ってもあの程度だとUIの機能として満たされないことが多く
ないですか?
GUIに行くならGUIの良さがありますよね。激安サーバにCLが乗っていないと
いうのもありますし、(自宅)Web鯖を立ててセキュリティまでやるのもローカル
のみのサービスなら良いですが公開となると格段とレベルが上がりませんか?
使う人の幅を狭めますが、ブラウザでUIよりはCUIの方がもっと表現力が豊か
だし、サーバアプリも書いて運用した方がネットセキュリティの手間が少ないと
見積もっているんですが。
あとあとそのアプリを使うもっとも推奨のWebブラウザは何なんですか?
Common Lisp がバックエンドに向いてるっていうのは俺もそう思うけどさ、 折角 CL スレなんだから CL 的な GUI ライブラリの話とか出てこないもんかな? ただのバインディングじゃなくて CL によく馴染むような。
ncursesも良さそう
>>744 で挙げたじゃないですか、やだー!
そういうの好きな人はMcCLIM辺りに走れば良いんじゃないか。
関数的などうこうとかそういうのなら、今はHaskell方面がメインストリームだと思う。
手の混んだものでなければLtkが手軽で良かった気がする。 Webブラウザエンジン載せたアプリ作りたいとか、リッチなGUIがいいとかなら CommonQt使うのもいいと思うよ。 ただ、CommonQtだと、UIエディタ利用できないので結局素のC++/Qt使った方が 楽だったり。 あとは、LispWorksやAllegroCLがGUIライブラリ提供してるけど、商用だしね。
>>753 LispWorksは多バイト文字がアレなので駄目なんだよね。
Allegroは最強っぽいけどマジで値段がしゃれにならん。
ってなわけでごりごりするんだけど、やっぱりAllegroは憧憬のまなざしを送らざるを得ない。
せめてランタイムが安ければいいのに orz
756 :
デフォルトの名無しさん :2012/12/28(金) 06:53:08.72
実用 Common Lispと実践Common Lisp どちらを先に読んだらいいですか?
実践Common Lisp読んでるけどこれ初心者向けじゃないね。 早々にマクロ出てくるけどあれだけの解説でバッククォートと,@の感覚に 初心者は慣れ親しめないと思う。自分はOn Lispでさんざんやった後に 読んだからスラスラ読めて楽しめてるけど。実用は知らない。
『実用』の方は、最低限Common Lispの文法説明してから、 AIの分野でのプログラムをどんどんやってくみたいだ。まだ全部読んでないけど。 実践は確かに初めのほうでマクロが出てくるが、それはさわりで、 さわり部分が終わるとCommon Lispの文法を解説していく内容になっている。 Lispの入門書としてなら実践、Lispでできることが知りたいなら実用、じゃないか?
>>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))))
試しに書いてみました。話の中で説明したコードの作意について説明できていないように感じる。
意外に難しかった。サンプルを書くのにかなりの実力がいるのかもしれません。
オイラも実践CL読んでます。 まったくのCL入門者にはちょっと手強いですがw 最初のCDのDBを真似てお小遣い帳作ってまーす! 最終的にはパーソナル会計アプリ作るんだ^^
分からないってのは自分が脳内で発する雑音が多すぎるからじゃね?
実践の訳者序文によると来年はLispコミュニティ55周年みたいだね。
CLOSってよく使いますか?
764 :
デフォルトの名無しさん :2012/12/28(金) 21:35:40.52
実践と実用どちらが難しいですか?
COMMON LISP 第2版 はみんさん持ってんですか?
実践も実用も、lisper に認められたいい本だよ。だからどっちも読んで後悔はしないよ。
767 :
デフォルトの名無しさん :2012/12/29(土) 00:38:16.86
↑どちらから先に読んでもいいですか?
話がLOOP
>>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)))
こんなんするのが普通だと思いますよー。
>>770 違いがよくわかりません。関数にするか、lambdaにするのかの違いですよね。
let, let*は使えますが、突っ込んだ話まではわからないので省略しました。
slime環境前提の話とします。自分の稚拙なコードの正当性を主張するなら
(loop :for x :in list1 :collect x)とも書き換えられるし、物凄く細々と
した関数を自分で作ってしまうと管理もそうですし、忘れて使わなそう
なんでlambdaで書いた方が扱いやすいし使いやすいかな。もちろん、
関数化は狙っているし、関数化するなら割と汎用的にしないというのが
あって、関数化するのにブレーキがかかってしまいます。数ヶ月後に自分の
コードを見返したときに自作関数を多用した方が良いのか、lambdaで書いた
方が良いのかが整理されると思っています。こういう物を返したいとその
具現化に向けて最短で書くのはlambdaを使った方が今は個人的に合って
いる気がします。具現化の後は書き方の整理したり、関数化の是非を考えた
りする作業をしています。
何個も公開パッケージを書いた人は一発で整理されて書けるんでしょうが、
初めての時は自分の癖が入っているコードで具現化して、その後コードを
整理していると想像しています。一発の人も公開まではしないそのパッ
ケージの開発用(開発環境ではなくそのパッケージ寄り)のコードもある程度
存在するのかなと。ある機能をつけようと思っていたけど、今回は断念した
未実装の書きかけのコードとかもあるでしょうし。
>>771 考え方の違いっすよ。ひとかたまりの処理と考えると、そういうmap系関数がないと思うかもしれんですが、
処理を分解してあげれば、mapの考え方に素直にはまるよ、っつー。
関数なんて気軽に作って気軽に捨てりゃー良いんすよー。いくらでも作り直せるし。
世の中、特定の関数の中でしか使われない補助関数とかに溢れてるわけでー。
必要以上にlambdaでベタ書きしてると、デバッグでテストしづらくて死んだりとかー。
……書いてて思ったけど、我ながらこの語調マジうざいな。
>>771 の中の人は、書き込む前に、もっと発言を推敲した方が良いと私は思いますよ。
SLIMEなんかは引き合いに出す必要のない話の内容ですし、議論なのか質問なのか、
話題をふってるのか独り言なのか、冗長な部分が多くて良く分からないことになってます。
同意。スパゲッティを見てるみたい。
>>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以外に良い環境はありますか
横だけどドットネットまであんだね 知らなかった
abclでswingとか言い出すとどこがCLなんじゃコラ!ってなるけど、案外使えるので困る。
781 :
デフォルトの名無しさん :2013/01/03(木) 14:27:18.28
common-lispはじめてみました。 マクロの使い道がまだわかんねえ。。。
個人が趣味だけでやってるものだと、興味を失ったり忙しくなったりして、 なかなか安定して保守していくのは難しいよね。 業務で使ってフィードバックしてくれる企業や個人と協力できれば良いんだけど、 ことGUIの分野だとCommon Lispではあまりやらないだろうし。
783 :
デフォルトの名無しさん :2013/01/03(木) 15:33:26.60
ファイルの内容を1行ずつではなく、1つの文字列にまとめる方法はありますか? Rubyでいう、open(path).readのことです。
>>781 いらっしゃい。
with-open-fileとかの「with-x」系のマクロとか、入門に良いんじゃないかな。
利点が分かりやすい例だと思う。
>>783 (with-open-file (s "abc.txt")
(let ((buf (make-string (file-length s))))
(read-sequence buf s)
buf))
大きなファイルの場合、32ビット環境だと文字列の大きさの制限に引っかかることがあるのでご注意。
most-positive-fixnumの値くらいまでは大体大丈夫。
間違えた。most-positive-fixnumじゃなくて、array-total-size-limitが正しい。
>>785-
>>786 ありがとうございます!
できた!と思ったら、日本語ファイルだと文字コード関係で怒られてます。。
#\HIRAGANA_LETTER_NA (code 12394) is not a LATIN-1 character.
>>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
>>780 簡単にできるんだけど、移植性まったく無いのでどこがCommonなんじゃーって話になるよね。
ま、FFIとか入ると結局ライブラリがプラットフォームにあるかないかで決まっちゃうのだけど。
Common LispのCommonがLisp側のみの縛りだから外部Lib使うものってどうしようもないのだろうけど。
>>788-789 ありがとうございます。ファイルオープンについては解決しました。
その文字列をGメール(cl-smtp)で送信したいのですが、
送信する場合に以下のエラーが発生するようですorz
#\HIRAGANA_LETTER_NA (code 12394) is not a LATIN-1 character.
ちなみに環境はUbuntu, sbclです。
まとめありがとうございます。あとで復習させていただきます。
>>791 CL-SMTP使ったことないけど、エラーが発生してるのってどこ?
with-smtp-mailとかなら、それにも:external-formatで指定できるようになってるみたい。
バックトレース見てエラーが起きてる場所が分かるなら教えて欲しい。
分かんないならその部分のコード見せて欲しい。
>>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)
>>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を引き継げば修正できるけど、
可能なら他のライブラリ使った方が良いかも。
>>794 おぉ。。。なるほど
わかりました。色々ありがとうございました
>>796 SUGEEEEEEE!自分のところでも動きました!
ありがたやありがたや
コードリーディングして吸収させていただきます。
>>784 レスありがとうございます。
初歩的な質問で恐縮ですが、そういったマクロはどのパスにあるのでしょうか?
>>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でも。
他の言語と感覚が違うので教えてください。 データベースに格納したデータを1つずつ取り出して表示するプログラムですが、 これでどうしてarrayがNILなのか理解できません。。 (ql:quickload :dbi) (dbi:with-connection (conn :mysql :database-name "test") (let* ((query (dbi:prepare conn "SELECT * FROM test_table")) (result (dbi:execute query)) (array '())) (loop for row = (dbi:fetch result) while row do (cons row array)) array)) ; => NIL
801 :
800 :2013/01/04(金) 14:42:32.04
"test_table"にはもちろんレコードは入っています。
多分、やりたいことって、 (dbi:with-connection (conn :mysql :database-name "test") (let* ((query (dbi:prepare conn "SELECT * FROM test_table")) (result (dbi:execute query))) (loop for row = (dbi:fetch result) while row collect row))) じゃないかなー。consかloopのdo節の動作を誤解してると思う。
803 :
800 :2013/01/04(金) 15:34:34.73
> consかloopのdo節の動作を誤解してると思う。 そのとおりでした。おそらくどっちも深く理解していません。。 やりたいことはできました。 そのあたり勉強してきます。
SBCL使っててEXCEPTION_ACCESS_VIOLATIONとか出たけど 原因が分からん\(^0^)/
806 :
デフォルトの名無しさん :2013/01/05(土) 09:17:59.44
>>805 多分、自分が悪い
どういう時にEXCEPTION_ACCESS_VIOLATIONてでるん?
thx! 解決したよ
809 :
デフォルトの名無しさん :2013/01/06(日) 04:16:04.64
実用 Common Lispと実践Common Lisp どちらを先に読んだらいいですか?
実用ってamazonでコメントないんだな
>>809 おれlispで書かれた自動巡回プログラムだけど、どっちから読んでも良いらしいよ
813 :
デフォルトの名無しさん :2013/01/07(月) 03:05:50.24
実践のp202の*acct*のaccount-typeが UNBOUND-SLOT となるんですが それでいいの?
815 :
デフォルトの名無しさん :2013/01/08(火) 05:19:39.63
CFFIの使い方わかりやすいサイト て知っていますか。
>>814 opening-bonus-percentage以降ならそれで良いと思う。
818 :
デフォルトの名無しさん :2013/01/08(火) 07:53:58.41
>>817 ありがとうございます。
では、account-typeのinitialize-instance :after と
opening-bonus-percentage のそれを両方を実行するには
どう書けばいいのでしょう?
Qiitaのcommon-lispタグのフォロワー少なすぎて泣ける
>>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で検索して来いよ的な感じに割り切った。
stackoverflowで無問題。
823 :
デフォルトの名無しさん :2013/01/10(木) 08:26:49.80
Land of Lispの翻訳版て出ないのですか?
出処不明の噂によると、誰かが既に翻訳開始しているらしい。
和田さんじゃないことを祈る
R5RS Scheme処理系であるGaucheの開発者の川合史朗氏が翻訳してるとのこと。 プログラミングClojureを訳した人で、Common Lispにも精通してるから、 品質に問題はないはず。米国在住で日本語の文章も上手く、元ゲーム開発関係者。 Land of Lispの内容を考えても、翻訳者としてはこれ以上を望めないレベル。
このスレ見ててShiro知らない奴なんておらんだろ。
普通にいるだろ。Scheme使ってて知らないのは珍しいだろうが。
829 :
デフォルトの名無しさん :2013/01/10(木) 20:14:37.44
land of lisp おれも首を長くして待ってる。あのミュージックビデオは日本語訳されるのかな。
Land of lispは原書かっちゃったからなー 翻訳でても買うだろうけどepubがいいなー
833 :
デフォルトの名無しさん :2013/01/14(月) 02:26:59.64
個人のブログっぽいけど、こんな書き込みもある。
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 で公開されています
初歩的な質問ですいません。 実践のスパムフィルタの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にばかりいじって来たので ちょっと戸惑ってます。。。 デバッグ中の変数の確認とかできないのでしょうか?
バックトレースそれだけだと自分には判断できない。
そんな感じだと、問題部分の特定のためにブレークポイント仕掛けるとかかなー。
あるいはデバッグ出力。それぞれbreakやprint使う。
ちなみに、まともにバックトレースが表示されてれば、ローカル変数表示できるよ。
「Backtrace:」以下に表示されてるスタックフレームの上でRETで切り替えできる。
http://cl.cddddr.org/index.cgi?SLIME%3ASLDB
839 :
デフォルトの名無しさん :2013/01/15(火) 06:33:48.22
エラーでたらググルしか対処法ないですか?
上の事例はちょっと特殊で普通は自己解決です。
841 :
デフォルトの名無しさん :2013/01/16(水) 04:04:52.95
英語わからなくてもだいじょうぶですか?
842 :
デフォルトの名無しさん :2013/01/16(水) 04:36:18.44
commonlisp学ぶのにプログラミングGaucheて本どうですか?
GaucheはScheme方言だから基本的にCommon Lispとは別物
> 英語わからなくても つか, ソフト業界の連中って英語読めない奴、意外と多いのな ハードだとデータシート英語の事のほうが多いんで, 読むくらいできなきゃやっていけないんだが… ある意味うらやましい
読むのは何とかなっても単語力ないからシンボル名を付けるのにいつも苦労してる みんなどうしてんの?
>>845 Google翻訳で、日本語--->英単語。
>>846 あれだめだよ
ジャーゴンファイル(出来れば昔の版)に目を通すことをおすすめする
おそらくこの図式だろう 読まない --> 辞書引くのがいや --> 単語忘れる --> 読めない でも、大学の教養まで入れると、8年くらいは英語やってるはずなんだよな
英語に限らないよ プログラマーは雑多な知識は多い割に 当面の仕事に関係なさそうと自分で決めた範囲にはまず時間を割けない
それ続けてると、多分どこかで行き詰まるぞ
最近行き詰まりを感じるからLISPより英語勉強してる
>>848 おもしろいね
欲しい語があんまり登録されてない...
技術文書の英語って、中学の文法レベルじゃダメなの?
>>847 > ジャーゴンファイル(出来れば昔の版)に目を通すことをおすすめする
具体的に昔の版のジャーゴンファイルって何?
>>849 大学受験レベルでマニアックでもない普通に使う3,500語ぐらいでほとんど知っていて
損はないレベルなんじゃないの。
>>854 英語に詳しくないけど、中学校の文法でだいたいの意味は読み取れると思うなあ。
+αを求められることもあるだろうけど、そん時に考えれば良い。
英語を読み解く環境を整えて入れば、それなりにいけるでしょ。時間かかるのは我慢するしかない。
東京に住んでいると併存英語案内がすごく多いから、日本語無視して英語と向き合うのはすごく
良いことだと思っている。駅名とか、英語で覚えちゃった方が良いくらい。日本で日本語無視して、
英語で暮らすのは割とできるんじゃないのかね。英語に詳しい人、ツッコミよろしく。
外国人向けに観光地にもなっていない非都市部は知らん。
どこからツッコめばよいものか・・・
( * )<ここで
高橋洋一が英語圏でFAXをファックスって発音すると恥をかくと 言っていたんだけど、POPをポップと言うと恥を書くのかな? 大文字略語は全部アルファベットで読んだ方が良い? あとインフレもinflationと言わないと通じないとも言っていた。 日本語においてのデフレはデフレーションの意味と ディプレッション(不況)の意味が混ざっているとも言っていた。 もっと余談だが、子供を英語圏で育てたので娘に発音が悪いと ボロクソに言われるらしいね。
861 :
デフォルトの名無しさん :2013/01/21(月) 01:59:47.35
methodの引数のクラスの優先順を通常の逆向き、つまり右から左にすることはできますか?
>>860 ”恥をかくかどうか”に拘ってたら、何年たっても話せないよ。
英語ネタ引っ張ってる連中いい加減にしろよ。 HyperSpecとかCLに絡めるならともかく、関係ない話を長々と。 マ板とか英語関係の板に行ってやれよ。
マ板で巻いた
実践Common Lispを169ページまで読みました。
lisp覚えるのって英単語を(目的語とか使用法を込みで)覚えるのとかなり似てるんだね 単語覚えないと何もわからない まぁある程度は他の言語でも同じだけど lispは得にその感が強いな
え、むしろ覚えること少ないよ
このスレの人たちって、CLを仕事で使ってるの?趣味で使ってるの?宗教上の理由?
俺は依存症だから
仕事かどうか気にしてるようじゃプログラミング道を極めることは不可能。将来的には霞を食って暮らすのだから仕事のことを考えても無駄。
わけわかんないこと言ってる男の人って マ板の話が分からなくなってム板へ来たんじゃないの?
普通に仕事で使ってる。
>>868 俺も、普通に仕事で使ってる。
つか、仕事で使って悪いような宗教上の理由とかがあるの?
Lisp使うってどんな案件ある?興味ある。
>>874 コンシューマゲームとかPCゲーム以外なら何でもあるぞ。(プラットフォーム上の縛りがあるからこれらは来ない)
>>874 社内のバックエンドは結構な率で CL 使ってるな
で、一応、 売り物にもしてる(あんま出て行ってないみたいだけど)
(4.2BSD 時代の franz から lisp 使ってたらしくってその名残みたい)
ネットワーク管理系とかは、ヒストリー調べて自己修正やらしてる所が
多いから S式ベースじゃないと結構辛い
(こっちは, ここ 10 年くらいかけて, うちのチームが開発した)
組込みだけど、使うライブラリの構成ツールとして使ってるな。 チップ・デバイスメーカーが標準化してくれればいいんだが。
よく分からないけれど、古典AIっぽいものを作る上では今も健在ってこと?
879 :
876 :2013/01/23(水) 22:59:26.71
すくなくともうちのネットワーク管理系はAIとはいわんな
>>878 AI作成に使われた、というよりAI関連のアイディア・仮説の検証・実装用言語作成に使われた。
少なくとも当時、AIとは何かについて大勢の意見がまとまっていたわけではないから、関連しそうなものなら何でも試すという雰囲気。
最近の研究は知らない。
>>874 データ処理のバックエンド側でそれなりに使ってるよ。
あとは実験的にあれこれ試行錯誤したい時のプロトタイプ実装の時とか。
最近のAI、特に機械学習やパターン認識の分野では、 統計解析のテクニックを多用するためか、MatlabやRを使う研究者が多い。 LispにもかつてLisp-statという統計解析ソフトがあったが、 実装はCLじゃなくてxlispという俺Lispだったし、その開発者はRの開発に回ってしまったと聞く。 CLにもcommon-lisp-statというのがあるけど、実用レベルとは言い難いな。
xlispは俺LispというよりSLISP後継の結構メジャーな処理系。 Common Lispではないという意味の「俺Lisp」ならその通りだが。
land of lisp 翻訳、来月らしいね。読みたい。
on lispやプログラミングClojureのようにebookも出るのかな。
land of lispが翻訳されるのか Grand Theft Autoのもじりのヒャッハーな感じがどう訳されているのか期待してる
>>79 > あとは定評のあるソースをたくさん読んで、とにかく何か自前で書く。
> どの言語でも入門がすんだ後の本はあまりない。他人のソースを参考に自前で書くのが一番。
亀レス。このソースの非Lispの割合ってどんな感じですか?
あと自前で書く意図は何ですか?
>>79 じゃないんだが
> 亀レス。このソースの非Lispの割合ってどんな感じですか?
どの言語でも, って書いてあるじゃん.
入門書 -> 間がない -> 中の上向け -> 飛びまくって -> 規格書
って, 構造の言語は結構ある
> あと自前で書く意図は何ですか?
同じ物を書くんじゃなくって,
自前で必要なものを他人のソースとか他の言語での実装を参考に書く
って, 趣旨じゃないか?
個人的には, 車輪の再発明がおすすめ
オレオレ簡易コンパイラを作るとか, オレオレ簡易リアルタイムモニター作るとか
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を忘れたので補完して見て下さい。
>>893 lambda式中の最後の式以外は副作用が目的なので、
そこで副作用なしの式を評価したら最適化の過程で無視されたということだろうと思います。
disassembleしてみるとそもそも除算命令が無いことがわかります。
なので副作用を必要とする場合はエラーを捕捉するはずです。
(handler-case
(progn (princ "before")
(princ (/ 1 0))
(princ "after"))
(error (c) (princ "catch")))
=> "catch"
>>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"
>>895 ありがとうございます、これは気づきませんでした。
SBCLでしたが、あらゆるコードはエラーが出れば副作用をもつので、これはバグなのでは…。
最適化の話であってバグではない
>>899 自分がコンパイラを書くなら、副作用がなく返り値を求められないコードは、コンパイル時に一度評価し、エラーが残ればエラーコードのみを残す設計にします。まあいずれにせよ大した問題ではないのですが…。
>>900 > コンパイル時に一度評価し
ちょっと冷静に考えてみろ
>>901 コンパイル時にコードを実行するなという意図であれば、self-compilingな言語ではあまり意味のないことかと思います。
ちなみにですが、CMUCLではエラーは捕まるようです。
コード:(handler-case (progn (princ "before") (/ 1 0) (princ "after")) (error (c) (princ "catch")))
印字:beforecatch
返り値:"catch"
>>902 いや、そうじゃなくてコンパイル時に評価出来るのは定数式だけという認識はあるのか?
CMUCLは知らないが、無意味だけどエラーになる定数式はコンパイル後も残って、
変数が入っていると最適化で削除されるなら、コンパイラに一貫性がないと考える事も出来る。
>>903 疑問点は、部分計算を行う場合にエラーの挙動を考慮しないことが仕様として許容されているのかということです。
副作用がなく意味がない事がわかってるコードを最適化で除いてるだけだ そのコードについて、ゼロ除算が起きる事が分かっている、という意味なら 「コンパイル時」にゼロ除算でエラーにする処理系もあるかもね
>>906 >>900 はその場合に、コンパイル時にコードを削除するのではなく、エラー関数をコードに残すべきなのではということです。
削除されてるのは(/ 1 0)だけだぞ、errorは残ってる (/ 1 0)を削除するなって主張なら、そういう最適化をしない 処理系を使うか、されないように設定しろ
>>908 何度も恐縮ですが、コンパイル時に(/ 1 0)を(error 'division-by-zero)に変換すべきではないかということです。
ちなみにSBCLでは下記のオプションを加えることで正常な挙動をするようになったので、問題ではないのですが、仕様ではどうなのでしょう。
(declaim (optimize (speed 0) (safety 3) (compilation-speed 0)))
SBCLならデバッガ入ればcompilation policyがdebug, safetyになるんじゃないかな? まあdebugger policyの設定にも依るんだけど。
>>909 policy通りの動作でなければバグです。
その処理系の最適化の方針によって決められるべきで 変換すべきと一律で決めつけられる話じゃない
>>912 最適化によって計算の結果が異なるというのは初めてだったのでやや驚いたのですが、SBCLとしてはエラー処理は「計算」の範疇外だというところでしょうか。
とにかくdeclaimで対処することにします。皆さんありがとうございました。
確かに気持ち悪さは残るが、 実際にプログラムを書くときに問題が起こるとも思えない。
> 最適化によって計算の結果が異なるというのは初めてだったので 最適化によっては動かない OS カーネルもあるし、 コンパイルできない、ソフトウェアもある これは言語によらない
prognの最後の式以外で副作用が無い時、それは実行する意味が無いコード という考えで最適化されている、って事も理解出来てなさげ 最適化を切る事で君の期待する挙動になったわけだけど それを"正常な挙動"とは言わないから
>>915 >>916 ありがとうございます。
>>917 どう読めばそうなるのか…。さらに、エラーは通常「計算外」の処理ではなく、仕様で厳密に決定された、勝手に削除されるべきではない計算の一部です。つまり(/ 1 0)は副作用を持ちます。
SBCLの場合は
>>914 に書かれた実際的な理由によりそれを削除していると理解しています。荒れそうなのでこれ以上は書き込みません。
エラーは副作用なのか? エラーが副作用だとすると、あらゆるコードは副作用を持つ可能性がある事になる。 本当にそれでいいの?
エラーを値として扱うのであれば 副作用ではなくなるとは思うが
除算が副作用をもつなんていったら、副作用をもたないプログラムなんて存在しないことになる ほぼ全ての関数呼び出しはスタックオーバーフローの可能性があるわけだし
エラーの捕捉は副作用を伴う処理だろ Haskellとかだってmonadを使う
エラーというか処理例外の捕捉だね
モナドで扱えるということはむしろ、副作用がないとみなせるということなんじゃないだろうか… モナドの関数だってあくまで純粋な関数なわけで、モナドは副作用を扱うための機構ではないから まあエラー処理系モナドは、副作用のあるものを純粋な枠組みでとらえるモナドなのだから、ある意味副作用があるとも言えるわけだけど Haskellでは、undefinedやゼロ除算みたいなエラー類は「どんな型にもなれる値」として扱われていて、評価されない限り副作用はないけれど、評価されるともろ副作用になる だからHaskellにおける「純粋な関数」は副作用の発生源になる可能性があるけれど、それでもその関数に副作用があるとは言わない そもそも何をもって「副作用がある」とするかってのはあまり厳密な決まりがない どんなプログラムも「世界」を暗黙の引数と返り値にしていると考えれば純粋だし だから「副作用」という言葉は文脈依存なところがある 副作用という言葉の意味のズレで話がこじれてるのもたまに見かけるし…
眠い時に文を書くとわけわからんくなるね ・モナドだから副作用ってわけじゃない ・エラーを発生しうる関数(あるいは関数的なもの)は副作用をもっていると言える ・でもそういう関数を「副作用がある」とは必ずしもいわない ・副作用という概念が文脈依存 と言いたかったのです
(progn (princ "before") (/ 1 0) (princ "after")) -> (progn (princ "before") (/ 1 0)) (progn (princ "before") (/ 1 0) (princ "after")) -> (progn (princ "before") (princ "after")) 結局のところ、どっちで最適化して欲しいかって事でしょ? 最適化って事なら後者でして欲しいし、単純にこのケースなら コンパイル時エラーになってくれるのが嬉しいかなぁ
副作用=代入or印字 という理解でいいのか
>>910 開発者の環境にもよるんじゃね
最近の slime だと, ^U^C^C とか, ^U 付けないとデフォでは
(optimize speed) が渡るみたいだし
Lisp-2のメリットって何なんでしょう。 意図せずに関数を変数で上書きしてしまう可能性があるとはいえ、 Warning出せばいいだけのような気がします。
Lisp-1から見たらそこで警告出されても鬱陶しいだけのような
>>929 今は歴史的な意義しかないと思うLisperが多いのでは?
MLの議論をまとめてCommon Lispの仕様を書いたSteele先生も、
どうせどのLispとも互換性ないんだから、
function cellとvalue cellはひとつにまとめといた方がよかったと発言。
関数名とかぶる変数名を使い慣れてしまってると 「なんでこんなエラー起こるんだ???」 と、小一時間時間を潰すこともあるので、このままでいい
937 :
933 :2013/02/08(金) 22:00:21.28
>>934 最初からネームスペースは一つにしておけば funarg 問題とかも起こらなくて、
funcall とか書かなくても良かったんだろうし, 933 に書いたような問題も
起きなかったんだろうけど
# C の "struct foo {...}; struct foo foo; ..." も似たようなもんだけど、
# おいらはそれが当然になっちゃったしな
funarg問題は変数のキャプチャの問題だからちょっと違うんじゃ?
初めてterminal emulator for Xを考え込んで整理した。まあ基本、全画面で使うんだけど。 CLでのcygwinとLinuxのterminal上の出力で互換性が高くやる方法って整理されているの? topが理想だけど、なんかのモニターとしてn秒毎に単純なshスクリプトで出力する感じで満足なんだけどなあ。
じゃあシェルスクリプトスレで。
反知性主義者だろ
>>941 他の言語ユーザーから見ると って書いてあるだろ
>>929 たとえば (f) みたいな式があった場合、
Lisp-1 だと f が関数か毎回調べる必要があるけど、
Lisp-2 だと束縛する時点で関数だと判明しているので、型チェックが不要になる。
なので速度上少し有利。
ってのもある。
はあ?
>>941 o'reillyでこの表紙か。。。
何本と読んだらいいのw?
Lisp alien本?
land of lisp → lol →laugh out loudly →ワロス ワロス本
既にLet over Lambdaがあるからだめだろう
ラリ本
キモ本
確かにキモい。でも、lisp に慣れるに従って、だんだんとあの姿にも理由があることが分かってくる。他のオライリー動物と同じく、知的で愛らしいんだ。 ひょっとすると、他の動物よりlispエイリアンの方が好きになるかもしれない。 そう、まるで映画アバターに出てくる青い肌の異星人のようにね。
アバターもえくぼ
「マンガで分かるLisp」も日本語版・英語版で書籍化すべき。 日本にも変態LISP文化があることを世界に知らしめるべき。
オーム社とNo Starchのずぶずぶタッグならやりかねない
>>953 アバター観てないの?あの映画に出てくるエイリアンも、最初はキモいけどそのうち慣れて、途中からは色っぽくさえ見えるんだよ。監督がすごく計算し尽くして作ってる作品。
ランドオブリスプもそんな風に、リスプエイリアンがかわいく観えるといいなあ、と思ったんだ。
あじゃぱー
>>961 このロゴ自体は好きだけど
lispにとかげのイメージってありますかねー?
>>961 ActiveStateのロゴとかぶるからなあ…
>>959 そんなに気持ち悪いとも思わなかったしなぁ…
まあでもそういう意味で言ってたのか。納得
>>959 リザードマンなアバター作るようなRPG好きの私に死角はなかったが言いたいことは何となくわかる。
#むしろProduction IGの作る3Dアニメの方がキモイ
land of lisp 、カバー動物の説明ないらしいぞ。超がっかりだ。第二版での修正を強く希望。
lang of lispの著者の経歴って、医学博士じゃなくて薬学?博士ではないかな
sbclって、いつのまにかwindowsポートが一番最新になったのか? kittenメッセージもなくしてくれよ
しかし未だに64bit WindowsはPort in progressである
970 :
デフォルトの名無しさん :2013/02/15(金) 18:42:58.09
実践Common Lispを211ページまで読みました
俺はもう5回読んだ
学びて思わざれば則ち罔く、思いて学ばざれば則ち殆し
973 :
933 :2013/02/15(金) 20:03:01.74
>>968 > sbclって、いつのまにかwindowsポートが一番最新になったのか?
ほかは, thread 関連以外は変わらず安定しているってことで.
NEWS みても git log 見ても windows 関連の変更が多いし…
いいことなんじゃないの, 使用する人の裾野が広がるのは???
変な反応…
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))) ~^は便利そうですね
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でもできるよ ねこんなのは。
>>979 そろそろ自分の作りたいものを作ってみれば?
特にアイデアがなくていかにもlispっぽい物をやってみたいなら記号微分・記号積分とか遺伝的プログラミングなんかも面白いと思うよ。
もちろんオレオレlisp処理系作ってみるのも良い。
進数操作の質問です (format nil "~vR" 36 120) ; => "3C" 10進数->36進数への変換は分かったのですが、 逆に36進数->10進数に変換するにはどうすればよいでしょうか
(parse-integer "3C" :radix 36)
>>979 On Lispは読んだか?
あれ読み終われば一皮むけるぜ。
Webで読める。
>>985 中の文を一切読まずにマンガだけ眺めて書いたような書評だなあ
次スレ立ててきます
>>979 まさしく俺がそんな感じだ
Project Eulerの問題いくつか解いてたけど、やっぱ速度が出ないからこういう用途には向かないなーとか思った
速度はおいておくとしても、一時変数が即座に宣言できないところも慣れない・・・
マクロだとかLispの良さみたいなのが知りたかったんだけど
やっぱOn Lispとか実践Common Lisp?辺りを読むほうがいいのかな
Lisp関係の本の読書歴は竹内本を半分ぐらい読んだ程度
ずっと気になっていたんだけど 真偽を返す関数名には-pとpで終わるパターンの二つがあるけれど 一定の法則があれば知りたい
昔々、どこぞでは branch-p? nil とかって会話してるとかしてないとかいう話があったが ただの笑い話だったのかな
セックルピー
nori-p
sortは何故nsortにしなかったんだろう?
>>979 アルゴリズムの実装も楽しいよ。ちょっと複雑な奴。
geri-p
998 :
981 :2013/02/21(木) 00:06:17.27
>>990 なるほど、ハイフンがあるものは原則として-pと考えてよく、
ただ例外的にpどまりのもの(string-lessはless + string-と捉え直す)もあるということですね。
すっきりしました。
1000 :
デフォルトの名無しさん :2013/02/21(木) 00:55:59.78
,,_
ノ `'ーァ、 このスレッドは999を超えました
,,.- ‐、ノ ./゙/ @ 新しいスレッドを立ててください
;<,.-‐ァ|実| `ヽ,//
`ヽi,. / |況| .,∧ l l 実況はサッカー実況板で
.l |禁| ,l .l l l ∧,,∧
http://live2ch.net/ | ヽ止ヽLiヘ_l,l \ ミ゚Д゚;,彡つ彡
.l, .l, ヽ、__.l \\ (⊃ J ミ´
.l 'l l. l ,|. Σ⊂゙,,, ,,,ミ〜
゙i,,__'|,l,._l,_l \)
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。