【入門】Common Lisp その9【質問よろず】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/03/05(月) 04:06:46.71Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。
それ以外でもCommon Lispについての話題なら歓迎します。
ま、ゆっくりやりましょう。
「いいものの本質は、いかなる時代においても変わらない」byパワーズ
■前スレ
【入門】Common Lisp その8【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1309940115/
■Wiki
http://wiki.fdiary.net/lisp/ (id:guest pass:cl)
http://cl.cddddr.org/
http://tips.lisp-users.org/common-lisp/
0002デフォルトの名無しさん
2012/03/05(月) 05:04:54.940003デフォルトの名無しさん
2012/03/05(月) 05:26:00.370004デフォルトの名無しさん
2012/03/05(月) 05:38:24.33質問の内容が良く分からないけど、ネイティブコードにコンパイルする処理系なら、
内部でアセンブリ言語を中間形式として使ってたりするよ。SBCLとかCCLとか。
>>3
事例があるか、って話ならGoogleに買収されたITAが商売でやってたし、
日本でいるか、って話ならpaserveとかHunchentootとか使ってやってる人はいる。
0005デフォルトの名無しさん
2012/03/05(月) 10:11:56.100006デフォルトの名無しさん
2012/03/05(月) 11:21:39.40今から新規にウェブアプリを開発するときにCommon lispを
使うのはかなりの冒険だろ
0007デフォルトの名無しさん
2012/03/05(月) 11:49:41.83深町さん、はてなをLispに染めてくれんかな。
0008デフォルトの名無しさん
2012/03/05(月) 16:13:57.080009デフォルトの名無しさん
2012/03/06(火) 16:57:33.54http://www.usamimi.info/~ide/programe/stg_doc/index.html
common lispでGUIシューティング・ゲームを動かすみたい
land of lispはCUI上のゲームだったっけ
0010デフォルトの名無しさん
2012/03/06(火) 17:34:44.27これFFIなのかな
FFIで呼び出した先で落ちたりすると結構涙目なデバッグする羽目になることあると思うのだけど頑張ってほしいな
0011デフォルトの名無しさん
2012/03/07(水) 02:29:23.17すぐに俺実装を作りたがって開発リソースが分散しがちというのが
大きな理由としてあると思っている。例えば clojure-py を見ろ。
0012デフォルトの名無しさん
2012/03/07(水) 07:14:56.040013デフォルトの名無しさん
2012/03/07(水) 12:06:07.77あとスレチなんよ。
0014デフォルトの名無しさん
2012/03/07(水) 19:21:02.62とどなたかわかりませんが書いていた覚えがあるのですが、
ご存じの方はいらっしゃいますか?
0015デフォルトの名無しさん
2012/03/07(水) 22:46:19.82並列実行できると高速になるはずなのですが
sbclはスレッドが不安定とも聞きます
i7で一番高速な処理系はどれになるのでしょうか
0016デフォルトの名無しさん
2012/03/07(水) 23:05:05.360017デフォルトの名無しさん
2012/03/07(水) 23:24:39.36>sbclはスレッドが不安定とも聞きます
ソースはどのあたり?
0018デフォルトの名無しさん
2012/03/08(木) 00:42:35.40突っ込みどころは捨て置くとしても最速はFranzだと思うぞ
高いけど
0019デフォルトの名無しさん
2012/03/08(木) 00:42:49.56ソースは以前にいろいろブログみてまわってた時の印象です
0020デフォルトの名無しさん
2012/03/08(木) 00:47:43.94> We still don't consider threads on non-Linux platforms good enough to enable
> them by default, but they're in a clearly better shape now.
って書いてるし、Linux以外の環境ではあながち外してもないんじゃいか。
とはいえ、>>15のソースは別口だとは思うけど。
この所SBCLはリポジトリに動きがない。みんな忙しいんだろうか。
0021デフォルトの名無しさん
2012/03/08(木) 00:52:29.17残念ながらAllegro CLはWindows以外ではネイティブスレッド非対応。
ユーザレベルスレッドだから、マルチコアでスケールしたりしないはず。
http://cl.cddddr.org/index.cgi?Allegro%20Common%20Lisp
http://common-lisp.net/~dlw/LispSurvey.html
http://www.franz.com/support/faq/#s-mp
0022デフォルトの名無しさん
2012/03/08(木) 01:02:18.88Windows だけでってのは珍しいな。
0023デフォルトの名無しさん
2012/03/08(木) 01:17:04.26いますか?
ググってみたところecl,abcl、cclあたりが候補になるのかな?
あとsl4aというスクリプト実行環境を
利用する手もあるみたいです。
どれも敷居がたかそうだけど、lispで
android開発できたら素敵だなっと。
0024デフォルトの名無しさん
2012/03/08(木) 04:30:03.42CommonLispでなくて良いならClojureがswank丸ごと動くのでSlime使って開発できたりするよ
0025デフォルトの名無しさん
2012/03/08(木) 23:34:50.531桁なら0を10の位に挿入して文字列として、
そうでなければそのまま文字列として返す処理はどう書けばよいですか?
(defun num->string (i)
(if (<= 10 i)
(princ-to-string i)
(format nil "0~A" i)))
こう書いてみたのですが、princ-to-string と format が似たようなことをしているので
他の書き方は無いかと気になりました
princ-to-stringとformatのどちらかを書かずに同じ結果を取得できないものでしょうか
0026デフォルトの名無しさん
2012/03/08(木) 23:42:34.890027デフォルトの名無しさん
2012/03/08(木) 23:49:19.250028デフォルトの名無しさん
2012/03/08(木) 23:49:48.10かな。
0029デフォルトの名無しさん
2012/03/09(金) 00:19:45.06ありがとうございます。>>28でOKでした。
0030デフォルトの名無しさん
2012/03/12(月) 19:48:12.32http://common-lisp.net/project/clazy/
ここでthunkというものが出てくるのですが、なぜthunkというものを
使おうとするのでしょうか?
0031デフォルトの名無しさん
2012/03/12(月) 20:54:29.68delayとforceが何をするものかを考えれば
簡易的な実現の一つとして、例えば
(defmacro delay (expr) `(lambda () ,expr))
(defun force (thunk) (funcall thunk))
というのもありだと分かるだろう。
0032デフォルトの名無しさん
2012/03/12(月) 21:01:55.71最初の方だけ読めばいいよ
0033デフォルトの名無しさん
2012/03/15(木) 15:53:53.81ありがとうございます。理解できました。
0034デフォルトの名無しさん
2012/03/17(土) 01:20:38.04"
ここにコメントを書く
"
foo)
コメント部分に"とかを含めたい時ってどうやるんでしょ?
Pythonみたいに"""みたいなことって出来るんでしょうか?
0035デフォルトの名無しさん
2012/03/17(土) 05:53:51.52\でエスケープするしかないんじゃなかったっけ。
奥義のリーダーマクロを使えばどうとでもなるとは思うけど。
CL-INTERPOLに望みの機能があった気が。
http://weitz.de/cl-interpol/
0036デフォルトの名無しさん
2012/03/20(火) 10:07:11.65C言語のreturnのように、途中で処理を戻す方法はありますか?
(defun test-func ()
<中略>
(if flag
(message ”stop”)
(message ”continue”))
<中略>
)
0037デフォルトの名無しさん
2012/03/20(火) 10:26:15.55(defun f ()
(dotimes (n 10)
(when (= n 5)
(return-from f))
(print n)))
多分、return-fromが期待してるものだと思う。
http://www.lispworks.com/documentation/HyperSpec/Body/s_ret_fr.htm
ただ、最近は、loop以外ではあまりreturn-fromって使わないと思う。
003936
2012/03/20(火) 21:26:44.25すいません。以下をEmacsの上で実行したのですが、
(defun temp (x) (if x (return-from temp 'dummy)) 44)
(temp nil) => 44 はうまく行くものの、
(temp t) のほうは、以下のようにエラーが出てしまいます。
Debugger entered--Lisp error: (no-catch --cl-block-temp-- dummy)
正常終了してくれると助かるのですが。
0040デフォルトの名無しさん
2012/03/20(火) 22:17:01.66GNU Emacs Lispリファレンスマニュアル: Catch and Throw
http://www.geocities.co.jp/SiliconValley-Bay/9285/ELISP-JA/elisp_127.html
>Common Lispに関した注意: Common Lispを含むほとんどの他のLispには、
>非逐次的に制御を移す方法がいくつかある。
>たとえば、return、return-from、go。
>Emacs Lispにはthrowしかない。
common lispの関数がemacs lispにあるとは限らない一例だね
0041デフォルトの名無しさん
2012/03/20(火) 22:21:45.26CLOSでオブジェクト指向をやろうとすると、オブジェクトのスロットの値の変更が必要になったりしますが、
Lisper的には普通にsetfで代入してしまうのか、あるいは変更する度に新しいオブジェクトを作ってそれを渡したりするのでしょうか。
そもそも関数プログラミングとオブジェクト指向やクロージャって相容れないように思えます。
0042デフォルトの名無しさん
2012/03/20(火) 22:40:53.03(require 'cl)
でreturn-fromを使えるようになるけれど、
elispのdefunはブロックを作らないので、
(defun temp (x)
(block temp
(if x
(return-from temp 'dummy))
44))
とするか、Common Lispのdefun互換のdefun*を使って
(defun* temp (x)
(if x
(return-from temp 'dummy))
44)
ここまで書いといてなんだけれど、elispに関してはこっちで
Emacs Lisp 3
http://toro.2ch.net/test/read.cgi/tech/1191875993/
004336
2012/03/20(火) 23:15:25.05>common lispの関数がemacs lispにあるとは限らない一例だね
あー、なるほど。
>>42
何から何まで親切にありがとうございました。
0044デフォルトの名無しさん
2012/03/20(火) 23:19:46.670045デフォルトの名無しさん
2012/03/20(火) 23:25:16.97CLOSは普通に代入するスタイルですねー。
ただし、仰るような、関数的なオブジェクトシステムも存在します。
自分は以前Schemeで書かれたものをちらっと見掛けた程度ですが。
それと、OOPはさておき、クロージャは関数プログラミングでは不可欠な概念だと思います。
これがないと、例えばHaskellでもモナドのbindができなくて困るんじゃないでしょうか。
0046デフォルトの名無しさん
2012/03/20(火) 23:28:00.07>41
CLの基本データ構造はミュータブル。
racket,clojureはイミュータブル。
・・・らしい。
イミュータブル(純粋な関数型)とオブジェクトの話は、CLではあまり関係ないかも。
またイミュータブル中心でも、ocamlやscalaみたいに、直交させてるのもあるし、clojureみたいに別の方法で代用させたりしてるのもある。
クロージャーはウィキぺさんに書いてあるみたいに言語によって扱いが違うかも。
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3
そして純粋な関数型でも、限定継続みたいな手法で、複雑な制御構造を復活させたりしてる。
0047はちみつ餃子 ◆8X2XSCHEME
2012/03/20(火) 23:51:13.61例えば C++11 に導入される lambda 構文を見てみると、
実態はオブジェクトに過ぎない。
http://cpplover.blogspot.com/2009/12/lambda.html
クラス定義をちょろっと省略できるだけの構文糖だ。
C++ は GC を前提としていないので変数キャプチャのルールが少しばかり面倒だが、
要するにクロージャとオブジェクト (レコード) は抽象化の仕方が違うだけで
変数の束を閉じ込めるという意味では同じとも言える。
C++ で lambda が導入できるなら逆に Lisp でオブジェクト (レコード) とメソッドで
オブジェクト指向するのも別にアリじゃね?
クロージャとオブジェクトの関係を説明した面白い記事があるので紹介しておく。
http://www.ibm.com/developerworks/jp/opensource/library/itm-progevo3/index.html
http://www.ibm.com/developerworks/jp/opensource/library/itm-progevo4/index.html
0048デフォルトの名無しさん
2012/03/21(水) 01:18:50.29自作オブジェクト指向システムも良いかもしれないけど、
自作ライブラリには、もれなく自作オブジェクト指向システムも付いてくることになったら正直辟易
0049デフォルトの名無しさん
2012/03/21(水) 01:53:19.980050デフォルトの名無しさん
2012/03/21(水) 06:06:37.80(let ((n 0))
(defun f ()
(print (incf n))))
とかのことですか?
この手のコードは、変数のエクステントが分かりやすいから良く例に使われますけど、
関数fに参照透明性がない(副作用がある)のは、単に破壊的変更のせいです。
(let ((n 0))
(lambda () n))
のような形でもクロージャは良く使われますが、この式が返す関数に副作用はありません。
0051デフォルトの名無しさん
2012/03/21(水) 06:27:42.40流石に例が不親切だった気がするので、もう少し実際のコードに出てきそうな例を。
(defun x+-all (x l)
(mapcar (lambda (y) (+ x y)) l))
こんな感じで、レキシカル変数を参照することは多いです。
0052デフォルトの名無しさん
2012/03/21(水) 10:23:39.39(defun x+-all (x l)
(mapcar (lambda (y) (lambda () (+ x y))) l))
0053デフォルトの名無しさん
2012/03/22(木) 08:34:48.40λ式の評価器に必要なのがクロージャですから。
funarg問題のために。
0054デフォルトの名無しさん
2012/03/23(金) 21:01:06.44リストか何かでまとめて渡したいのですが、どう記述すれば良いですか?
(setq item1 '(item ”1”))
(setq item2 '(item ”2”))
(setq item3 '(item ”3”))
(widget-create 'radio-button-choice item1 item2 item3)
の代わりに、
以下のように記述したいのですが。
(setq itemList '(item1 item2 item3))
(widget-create 'radio-button-choice 'itemList);; //NG
0055デフォルトの名無しさん
2012/03/23(金) 21:19:50.26005654
2012/03/23(金) 22:42:16.67applyとwidget-createの組み合わせだとうまく行きませんでした。
(apply 'widget-create 'radio-button-choice '(item1 item2 item3)) ;;NG
(widget-create 'radio-button-choice item1 item2 item3) ;;OK
以下だとうまく行ったのですが。
(defun seki3 (x y z) (interactive ”r”) (eval (* x y z)))
(apply 'seki3 '(2 3 4)) ;;OK
(apply 'seki3 2 '(3 4)) ;;OK
widget-create関数の使い方として以下を参考にしています。
なんとかリストで渡して選択画面を作りたいのですが。
http://www.dina.kvl.dk/~abraham/custom/widget.html#SEC16
0057デフォルトの名無しさん
2012/03/23(金) 23:01:52.31Emacs Lisp 3
http://toro.2ch.net/test/read.cgi/tech/1191875993/
(setq itemList '(item1 item2 item3))
だと item1などが評価されない。
(setq itemList (list item1 item2 item3))
(apply 'widget-create 'radio-button-choice itemList)
0059デフォルトの名無しさん
2012/03/24(土) 06:22:34.52リストのn番目の要素の値を変更はどのように書けば良いのでしょうか?
たとえば、
(setq x '(”a” ”b” ”c” ”d”))
というリストがあった場合に、"c"の値を"C"と変更するにはどう書けば良いのでしょうか?
0060デフォルトの名無しさん
2012/03/24(土) 06:28:40.96http://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp10.html#chap20
とか参照
0062デフォルトの名無しさん
2012/03/24(土) 19:47:28.72(setf (car x) "1") とか (setf (nth 2 x) "2") とか…
function ではなく accessor と分類されているオペレーターは setf と組み合わせて
破壊的操作に使用可能
詳細は以下の 5.1.1 と 5.1.2
http://www.lispworks.com/documentation/HyperSpec/Body/05_a.htm
0063デフォルトの名無しさん
2012/03/26(月) 16:47:20.88slime-eval-last-expressionで任意のs式を評価した結果(返り値)を
そのs式の直後に改行して結果を貼り付けることはできないでしょうか。
今はソースのs式をコピーしてslimeのreplで評価し、
その結果をソースに手作業で貼り付けおり、面倒です
たとえば(ceiling 1.1)とあるとき
(ceiling 1.1)
;; result: 2
;; result: -0.9
こういうふうに結果をs式の後に追記したいのですが、何か方法はありますか。
0064デフォルトの名無しさん
2012/03/27(火) 07:09:50.360065デフォルトの名無しさん
2012/03/27(火) 07:14:32.670066デフォルトの名無しさん
2012/03/27(火) 07:15:22.350067デフォルトの名無しさん
2012/03/27(火) 17:15:23.32ありがとうございます。捗るようになりました。
0068デフォルトの名無しさん
2012/03/27(火) 17:32:57.870069デフォルトの名無しさん
2012/03/27(火) 22:16:40.23CommonLispでclojureの -> みたいな関数ありましたでしょうか?
0070デフォルトの名無しさん
2012/03/27(火) 23:04:33.45で確認する。
もしくは、slimeで、 -> の上にカーソルを持っていき、M-x slime-hyperspec-lookup すると
ミニバッファに->が表示され、スペースや、リターンでは、[No match]になる。
つまり標準にはないということが分かる
0071デフォルトの名無しさん
2012/03/27(火) 23:16:01.18同じような機能のものってことなら、CommonLispにはないんじゃないかな
Clojureのはメタ情報を活用してるから、同じ使い勝手のものを再現するのはなかなか難しいかも
0072デフォルトの名無しさん
2012/03/27(火) 23:49:05.61(list (int (Math/sqrt 25))) を (-> 25 Math/sqrt int list) と書けるのか
0073デフォルトの名無しさん
2012/03/28(水) 17:20:39.81そこで質問しますが、common lispのスキルを上げるというかステップアップするには
どういうものに取り組めばよいでしょうか?
2,3年で廃れてしまうかもしれない流行に左右されるよりも、
10年20年先でも通用するような新しい試みが何かあれば知りたいです
0074デフォルトの名無しさん
2012/03/28(水) 17:58:32.17パッケージやCLOS、MOPなどの細かい機能について調べれば良いと思うけど、
そういうこと? あとはマクロの応用とか。好みから微妙に外してる気がするけど。
現在のLispの世界では、あまり先進的な言語機能って研究されてないと思う。
Common Lispは今進化が止まってるし。Schemeのhygienic macroくらい?
0075デフォルトの名無しさん
2012/03/28(水) 18:30:00.45他には計算機科学系の論文でも漁ってCommon Lispの機能で実装してみるとか?
数年先にどんな技術が通用するかなんて分からんよ。
それに言語は目的があって使うものだから、言語自体のスキルアップの意味が分からん。
先進的な機能はライブラリとして実装されるから、言語自体の進化には見えないだけ。
0076デフォルトの名無しさん
2012/03/28(水) 19:03:10.94元ネタはFilinskiの論文? まあこっちもSchemeなんだけども。
言語自体を深く知ってもあまり意味がないことには同感。
他の言語で基礎はもうできあがってて、単にCommon Lispに親しみたいのか、
言語の機能は把握したので、次にアルゴリズムやデータ構造を知っていきたいのか、
その辺も教えてもらえれば、みんなもっと適切な助言をしてくれるんじゃないかな。
0077デフォルトの名無しさん
2012/03/28(水) 20:32:25.56>>74 処理系自体を改変することよりも、使い方を磨こうと思っています。うまく言えなくてすみません。
>>75
>先進的な機能はライブラリとして実装されるから、言語自体の進化には見えないだけ。
これは盲点でした。たしかにそうですね
そして、paipを読んで強く思ったのですが、
>>76さんのおっしゃるところのアルゴリズムやデータ構造が知りたい内容だとわかりました。
それらを体系的に(試しながら)勉強できる、(common)lispを使う教材があれば知りたいです。
0078デフォルトの名無しさん
2012/03/28(水) 20:50:13.66まあこんなとこから始めて様子を見たらどうだろう
http://www.geocities.jp/m_hiroi/xyzzy_lisp.html
0079デフォルトの名無しさん
2012/03/28(水) 23:48:51.63言語毎の差異は小さいから、アルゴリズム系の本を買ってCommon Lispで実装すると良いよ。
逆引きCommon LispやCommon Lisp CookBookのコード例も参考になる。
あとは定評のあるソースをたくさん読んで、とにかく何か自前で書く。
どの言語でも入門がすんだ後の本はあまりない。他人のソースを参考に自前で書くのが一番。
あとOn Lispは必読。
0080営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 08:10:18.10限定じゃない継続を使ってさくっと実装できるし。
0082営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 14:57:12.70上のような連想リストallListのなかの、"b"に対応する配列を差し替えたいのですが、
以下の(1)のように直書きするとうまく行くのですが、(2)のように(setf (nth 1 allList) '("b" . bList));と実行すると、
(3)以降を実行するのに、Wrong type argument: sequencep, bListとエラーが出ます。
どのように記述すればできますか?
(setf (nth 1 allList) '("b" . ("b01" "b02" "b03" "b04")));;(1)OK
(setq bList '("b01" "b02" "b03" "b04"))
(setf (nth 1 allList) '("b" . bList));;(2)NG
(setq myList (cdr (assoc "b" allList)));;(3)bの内容の表示
(setq i 0)
(while (< i (length myList))
(message (concat "myList(" (int-to-string i) "):" (nth i myList)))
(setq i (+ i 1)))
0083営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 15:13:17.35(assoc "b" allList :test #'equal)
http://www.lispworks.com/documentation/HyperSpec/Body/f_assocc.htm#assoc
http://www.lispworks.com/documentation/HyperSpec/Body/17_ba.htm
0084営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 22:59:57.73'("b" . bList) だと bListが評価されないから (list "b" . bList)に置き換えてみ。
0085営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 23:15:35.66間違えたorz
(cons "b" bList) か。
008682
2012/03/31(土) 23:15:56.58ありがとうございます。
>(setf (nth 1 allList) '("b" . bList));;(2)
(2)のbListになにか符号をつけるなりして、(1)と同じかたちで読み込ませることはできるのでしょうか?
008782
2012/03/31(土) 23:17:18.540088営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 11:55:56.24http://www.slideshare.net/mtraven/lisp-in-the-cloud
0089営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 12:01:58.560090営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 12:12:50.47buildpack使って書いたみたいね。
https://devcenter.heroku.com/articles/buildpacks
0091営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 12:18:17.88これはClozure CLベースで、それを元に作った
https://github.com/jsmpereira/heroku-buildpack-cl
がSBCLベースだな。
0092営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 18:41:37.93複数のサブドメインを一つのサーバで扱おうと考えています。
cc.bb.com://AA/BB.html => cc.bb.com://cc/AA/BB.html
の様にしてサブドメインをディレクトリに変換したいのです。
hunchentoot:hostでドメイン名が取得出来る事は分かったのですが、
うまくフック出来ません。
(defmethod handle-request :before ((*acceptor* hunchentoot::acceptor)(*request* hunchentoot::request))...)
(defmethod hunchentoot:process-request :before ((*request* hunchentoot::acceptor))...)
共に全く引っかかりません。(一度も実行されないって事です)
あと、この変換後の値で通常のディスパッチをさせたいのですが、そのやり方も教えて頂けませんでしょうか。
ググってもうまくサンプルが見つけられません。HUNCHENTOOTのドキュメントは簡単過ぎて私には全く役に立ちません。
ちなみにLISPもCLOSもWEBアプリケーションも初心者ですんで見当外れな事を書いてるかもしれませんので
目的が達成出来るなら手法にはこだわりません。ヒントで構いませんのでお願いします。
0093営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 19:48:07.09コンテンツごとに別々のacceptor作って。
0094営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 20:51:44.84ありがとうございます。
それも検討してみます。Apacheなんかで受けて各々振り分ける形ですよね。
あとは全てのアクセスを引き取って自分でディスパッチャー実装しちゃうとかも考えています。
レンタルVPSなんでメモリーがタイトなんですよ。出来たら裏で重い処理を走らせたいし。
アクセスはほとんど無いんで勿体ないってのもあります。
やり方さえ分かれば数行で出来る処理だと思うんだけどいかんせん資料が見つからないんですよ。
全称関数に:beforeを付ければ処理に割り込めるってのはあってます?
hunchentootのソースコード読めば理解出来るものでしょうか?
googleコードサーチも終わっちゃったんで、サンプル探すのに
koders上でhunchentootで検索しても25(重複入れても59)件しか無いとかどうしましょう。
あと、PORT指定なんかしてたんで混乱してました。
http://cc.bb.com/AA/BB.html => http://cc.bb.com/cc/AA/BB.html
ですね。自分でも笑っちゃいます。
0095営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 22:28:50.87適当にacceptorを継承したクラスを作って、それ用のacceptor-dispatch-requestを定義して、
そのメソッドの中でrequestのホストを見て処理を分岐すれば良さそうな気がする。
acceptor.lispとかeasy-handlers.lispに書いてる既存の定義を見ればやり方は分かると思う。
流し読みなんで外してたらごめん。
0096営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 22:36:28.400097営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 22:43:35.76> (ql:system-apropos "vhost")
#<SYSTEM hunchentoot-vhost / hunchentoot-vhost-20110418-git / quicklisp 2012-03-07>
0098営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 23:34:26.97流石です。発想が柔軟ですね。
私の中ではまだどうもLISPとオブジェクト指向が繋がっていないんですよ。
コードまで参照して下さったのですか?
理屈の上ではそれで行けそうです。あとは私の努力次第ですかね。
ありがとうございます。
>>96
ありますね。これは用途的にはバッチリみたいなんですが
使い方が簡単には見つかりませんね。探してみます。
ソースは短いんですけど私には難しいです。
>>97
お陰様でQLでロードまでは出来ました。
0099営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 00:27:47.14サンプルコード書いたよー。
http://paste.lisp.org/display/128721
hunchentoot-vhostは~/quicklisp/dists/quicklisp/software/hunchentoot-vhost-20110418-gitに
READMEがあるので、そこに使い方書いてるよー。
0100営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 00:40:29.33http://paste.lisp.org/display/128725
0101営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 01:52:24.31vhostのそれをずっと見ていたのですがserverに何入れるのかとか
ずっと悩んでいました。hunchentoot:serverってあるのに。。。
LISPのドキュメントやエラーメッセージなんか今一つコツが掴めません。
エラーなんかもパラメタの数が違うとかは見つかるのですが
どこのエラーだか見当もつきません。書いてあるのですかね?
>>100
素晴らしい!
localhostと127.0.0.1で切り替わりました。これで行きたいと思います。
わざわざサンプルまでありがとうございます。
hunchentoot:acceptor-dispatch-requestなんですね。
もう一つ下だったか。。。
0102営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 03:15:19.72要望はありませんが、嬉しいので勝手にあげます。
以下を追加するだけで今までのコードを一切変更する事なく
ttp://cc.bb.aa/AA/BB.html => ttp://cc.bb.aa/aa/bb/cc/AA/BB.html
として扱う様になります。(仕様が変わっていますが、当初の目的はこれです)
ASPECT指向(って言うのかな?)万歳???
---
(defmethod hunchentoot:acceptor-dispatch-request :before ((acceptor hunchentoot:easy-acceptor) request)
(flet ((add-prefix (x)
(format nil "~{/~a~}~a" (reverse (split-sequence:split-sequence #\. (hunchentoot:host))) x)))
(setf (slot-value request 'hunchentoot::uri)
(add-prefix (hunchentoot:request-uri request))
(slot-value request 'hunchentoot::script-name)
(add-prefix (hunchentoot:script-name request))))
)
---
fletやらadd-prefixなんかの意味は分かっていないのですが、動いたのでOKです。
0103営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 03:52:19.47fletはローカルな関数を定義する特殊形式で、
件のコードではadd-prefixってローカル関数を定義してる。
似たような処理が複数あるけど他では使わない、ってときに使うと便利。
0104営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 18:56:29.74ありがとう!
LISPすごいよ!他の言語じゃこうはならないんじゃないかな。
LISPもっと早く始めていればよかったな。
LISPERの人に怒られそうだけど、括弧がキモくて避けていたんですよね。
UNIXシェル程度にLISPのREPLが使えてたら生産性が段違いだったろうに。
fletも一応軽くネットで調べたんですけどよく分からなかったのですよ。
>似たような処理が複数あるけど他では使わない、ってときに使うと便利。
と言われてみると何となくやってる事がわかりますね。
ありがとうございました。
0105営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 01:48:02.07(not (pathname-match-p x #p"~/quicklisp/dists/**/"))))
(cl-fad:walk-directory "~/quicklisp/" #'print :test #'test))
0106営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 02:04:25.45(flet ((test (x)
(not (pathname-match-p x #p"~/quicklisp/dists/**/*"))))
(cl-fad:walk-directory #p"~/quicklisp/" #'print :test #'test))
0107営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 21:50:35.95mapcarした物をappendで繋げるという関数です。その実装がこうなっています。
(defun mappend (fn &rest lsts)
(apply #'append (apply 'mapcar fn lsts)))
なぜ&restを使っているのでしょうか?
可変長にした所で可変長の引数を使うとエラーになりますし ex: (mappend #'identity '(asdf zxcv) '(asdf zxcv))
applyを使いたいがためにしか思えません。(applyを使うと周りの括弧が一つ外れるが、&restは副作用で周りに括弧が一つつくから)
↓なぜこうしないのでしょうか?
(defun mappend (fn lsts)
(apply #'append (mapcar fn lsts)))
0108営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 22:07:14.322引数以上取れる関数を使えや
ex: (mappend #'list '(asdf zxcv) '(asdf zxcv))
0109営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 22:09:35.99エラーが出てるのはidentityがひとつの引数しか取らないからだと思う。
(mappend #'list '(0 1 2) '(3 4 5) '(6 7 8))
;=> (0 3 6 1 4 7 2 5 8)
後者の場合、多くのケースでわざわざリストを一度作って渡さないといけなくて不便。
(mappend-2 #'identity '((0 1 2) (3 4 5) (6 7 8)))
0110営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 22:28:23.29なるほど!2つ以上の引数を取る関数について考えていませんでいた。
その際&restが生きてきますね。御二方レス有難うございました
0111営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 22:30:18.290112営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 23:12:38.27というような事ができないという事を言いたいのですか?
0113営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 01:57:15.50(mappend #'list '(asdf zxcv) '(asdf zxcv))
;=> (ASDF ASDF ZXCV ZXCV)
(defun mappend-2 (fn lsts)
(apply #'append (mapcar fn lsts)))
(mappend-2 #'list '((asdf zxcv) (asdf zxcv)))
;=> ((ASDF ZXCV) (ASDF ZXCV))
(defun mappend-3 (fn lsts)
(apply #'append (apply #'mapcar fn lsts)))
(mappend-3 #'list '((asdf zxcv) (asdf zxcv)))
;=> (ASDF ASDF ZXCV ZXCV)
0114営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 20:37:11.59&restもapplyも使っている関数を再現しようとした所でした。
(mappend #'list '(asdf zxcv)) ;=> (asdf zxcv)
(mappend-2 #'list '(asdf zxcv)) ;=> (asdf zxcv)
引数を2個取る関数について考慮していなかったのでダメでしたが。
では、これにて失礼します。ありがとうございました。
0115デフォルトの名無しさん
2012/04/11(水) 20:59:50.24MacOSX(LION) の CLISPにASDF-INSTALL を導入したいのですがやりかたがどうにもわかりません。
いちばん普通のやりかたはどうやればいいのでしょうか。
0116デフォルトの名無しさん
2012/04/12(木) 01:58:54.87インストールもquicklisp.lispをロードして画面の指示に従うだけだし。
http://www.quicklisp.org/beta/
http://cl.cddddr.org/index.cgi?Quicklisp
0117デフォルトの名無しさん
2012/04/12(木) 21:15:14.310118デフォルトの名無しさん
2012/04/12(木) 21:37:40.360119デフォルトの名無しさん
2012/04/12(木) 21:58:44.010120デフォルトの名無しさん
2012/04/13(金) 00:05:59.70ありがとうございました。おかげさまですんなり行きました。
いいですねQUICKLISP。
0121デフォルトの名無しさん
2012/04/13(金) 00:48:11.62上手くいったようで何より。楽だよね。
0122デフォルトの名無しさん
2012/04/13(金) 20:48:17.87Lisp Schemeスレと間違えてたw
0123デフォルトの名無しさん
2012/04/20(金) 01:31:19.33外部プログラムを動かそうとして
CL-USER> (sb-ext:run-program "ls" '())
こう書いたら
Couldn't fork child process: No error
[Condition of type SIMPLE-ERROR]
となりました
どうすればよいのでしょうか
0124デフォルトの名無しさん
2012/04/20(金) 07:46:52.34こうすれバインダー。
(sb-ext:run-program "ls" nil :search t)
> :search
> Look for program in each of the directories in the child's $PATH environment variable.
> Otherwise an absolute pathname is required.
0125デフォルトの名無しさん
2012/04/20(金) 09:22:21.47できました!ありがとうございます。
0126デフォルトの名無しさん
2012/04/20(金) 11:05:46.73たとえば
(defun foo1 (arg1 arg2)
(princ (+ arg1 arg2)))
や
(defun foo2 (arg1 arg2)
(princ (- arg1 arg2)))
で
(foo1 1 2)や(foo2 3 4)とする動作を単純化して、
(foo #'+ 5 6) や (foo #'- 7 8)でokにする方法はありますか
0127デフォルトの名無しさん
2012/04/20(金) 11:55:38.46うほほーい。
(flet ((f (fn &rest rest)
(princ (apply fn rest))))
(values (f #'+ 5 6) (f #'- 7 8)))
個人的には畳み込み。
(ql:quickload :alexandria)
(let ((fx (alexandria:compose #'princ #'+))
(fy (alexandria:compose #'princ #'-)))
(values (reduce fx '(5 6))
(reduce fy '(7 8))))
0128デフォルトの名無しさん
2012/04/20(金) 19:48:28.18(defun foo (fn x y)
(princ (funcall fn x y)))
もしくは可変長引数を使って
(defun foo (fn &rest args)
(princ (apply fn args)))
呼び出し方はどっちも (foo #'+ 5 6) とかでおk
0129デフォルトの名無しさん
2012/04/20(金) 21:06:36.46(remove-if (lambda (x) (string= "@" (subseq (string x) 0 1))) '(t1 t2 @t3 t4 @t5 t6 @t7 t8 t9))
これでremove-ifとremove-if-notで@がついているグループとついていないグループに分けられました。
つぎに、@が出現したらその直後のatomを
((@t3 t4) (@t5 t6) (@t7 t8))
のようにまとめて、残った物は
(t1 t2 t9)
とリストにまとめて最終的にvaluesで両方を返したいです。
リストの先読み?が必要そうだと思っているのですが処理を思いつきません。
よろしくお願いします。
0130デフォルトの名無しさん
2012/04/20(金) 21:40:38.36'(@t1 @t2 @t3)の場合はどうなってほしいの?
0131デフォルトの名無しさん
2012/04/20(金) 21:54:16.68@つきシンボルの直後がatomでない場合は?
0132129
2012/04/20(金) 22:06:04.23>>130
((@t1 @t2) (@t3 nil))
こういう風にまとめたいです
つまり左から走査して@~のつぎはとりあえずまとめてしまい、
尻切れトンボになっているときはnilで補完する、ということです
>>131
その場合も強制的にまとめてしまいたいです
たとえば
'(@t1 (test) @t3 '())
これは
((@t1 (test)) (@t3 nil))
こういう風にです
0133デフォルトの名無しさん
2012/04/20(金) 23:03:36.250134デフォルトの名無しさん
2012/04/20(金) 23:33:41.06fare-matcherを使いたくない場合は頑張って条件分岐書いてくだしあ。
(ql:quickload :fare-matcher)
(defpackage :fare-matcher.use (:use :cl :fare-matcher))
(in-package :fare-matcher.use)
(labels ((@-p (x)
(match (coerce (string x) 'list)
((cons #\@ _) t)
(_ nil)))
(rec (rest acc)
(match rest
(() (values (nreverse (car acc)) (nreverse (cdr acc))))
((like-when (list x) (@-p x))
(rec nil (cons (cons (list x nil) (car acc)) (cdr acc))))
((list x)
(rec nil (cons (car acc) (cons x (cdr acc)))))
((like-when (list* x y rest) (@-p x))
(rec rest (cons (cons (list x y) (car acc)) (cdr acc))))
((cons x rest)
(rec rest (cons (car acc) (cons x (cdr acc))))))))
(values (rec '(t1 t2 @t3 t4 @t5 t6 @t7 t8 t9) (cons nil nil))
(rec '(@t1 @t2 @t3) (cons nil nil))
(rec '(@t1 (test) @t3 '()) (cons nil nil))))
0135デフォルトの名無しさん
2012/04/20(金) 23:47:06.52(defun @-p (x) (eql (position #\@ x) 0))
とかのが効率良いと思う。subseqは新しくシーケンス作るので、
それが必要な場合以外では効率悪いで。
0136デフォルトの名無しさん
2012/04/20(金) 23:50:47.76ありがとうございます
ご指摘のとおりfuncallかapplyを使うことでokでした
http://common-lisp.net/project/alexandria/draft/alexandria.html
alexandriaの存在は知っていましたがcompose関数をこう使うとは分かりませんでした
大変勉強になります
0137デフォルトの名無しさん
2012/04/20(金) 23:51:36.57Scheme版書いてみて、移植。
Common Lisp的にはどうやるのがフツー?
(defun test (lst)
(labels
((myloop (r1 r2 lst)
(if (null lst)
(values r1 r2)
(if (and
(symbolp (car lst))
(string= "@" (subseq (string (car lst)) 0 1)))
(myloop (append r1 `((,(car lst) ,(if (null (cdr lst)) '() (cadr lst))))) r2 (if (null (cdr lst)) '() (cddr lst)))
(myloop r1 (append r2 (list (car lst))) (cdr lst))))))
(myloop '() '() lst)))
0138デフォルトの名無しさん
2012/04/21(土) 00:02:42.63キショいコードが出来上がったという、どうしようもない結果になったでござる
http://ideone.com/1JVva
0139デフォルトの名無しさん
2012/04/21(土) 00:11:52.06* Common Lispの文化ではnullで空リストかどうか判別しない(() = nil)
* よって、'()とかないわー。nil以外使ったことないわー
* 再帰を使わずにloopやiterateを使うことが多い
* lstという変数名はScheme文化なので堂々とlistと書け
* 気が利いた奴はcarやcdrではなくdestructuring-bindを使う
* appendは甘え
だけど、そんな非実在Common Lisperとか気にせず好きなスタイルで良いのではないかと思う。
0140デフォルトの名無しさん
2012/04/21(土) 00:57:18.84>* appendは甘え
ここ詳しく聞きたい
0141デフォルトの名無しさん
2012/04/21(土) 00:58:18.08それだと最初の文字以外も調べちゃうから
(defun @-p (x) (eql (elt (string x) 0) #\@))
(defun @-p (x) (eql (char (string x) 0) #\@))
の方が良くね?
0142デフォルトの名無しさん
2012/04/21(土) 01:37:53.52Schemeでもそうなんだけど、consで逆順に繋いでいって、最後に反転した方が効率が良いんだ。
appendで繋げていくと、最終的に不要な中間データが複数作られるのでかなり効率が悪い。
;; ある処理系でのappendの実装
(defun append (&rest lists)
(declare (dynamic-extent lists))
"Construct a new list by concatenating the list arguments"
(if lists
(let* ((head (cons nil nil))
(tail head))
(declare (dynamic-extent head)
(cons head tail))
(do* ()
((null lists) (cdr head))
(let* ((list (pop lists)))
(if (null lists)
(rplacd tail list)
(dolist (element list)
(setq tail (cdr (rplacd tail (cons element nil)))))))))))
これは、Lispでリストに要素を追加していくときに良く使われる定番の手法なので、
覚えておくと、他人のコード読むときなんかでも便利だと思う。
0143デフォルトの名無しさん
2012/04/21(土) 06:49:28.220144デフォルトの名無しさん
2012/04/21(土) 07:40:00.280145デフォルトの名無しさん
2012/04/21(土) 09:54:14.37(x :test)で":test"を得るような関数xは作成可能でしょうか?
0146デフォルトの名無しさん
2012/04/21(土) 10:03:00.28(format nil "~S" :test)
0147デフォルトの名無しさん
2012/04/21(土) 11:10:19.18formatでできるのですか。盲点でした。
ありがとうございました。
0148デフォルトの名無しさん
2012/04/21(土) 14:34:41.30解説してるテクニックが前半と後半で違くね?
cons+nreverseと、cdrを繋いでいく方法の2種紹介ってことだったらわかりづらい説明だね
あと、なんでもappendってのはSchemeでも駄目でしょ
0149デフォルトの名無しさん
2012/04/21(土) 19:57:11.58最終的には 「tconc とか queue って呼ばれてるものを使え」 になるような気が…
0150デフォルトの名無しさん
2012/04/21(土) 22:13:44.75ギブアップしてしまいました。どなたかこのページを解説していただけませんか。http://www.sbcl.org/getting.html
0151デフォルトの名無しさん
2012/04/21(土) 22:15:06.190152デフォルトの名無しさん
2012/04/21(土) 22:27:11.150153デフォルトの名無しさん
2012/04/21(土) 22:48:12.74とりあえず何がわからんのか質問してみそ。
0154デフォルトの名無しさん
2012/04/21(土) 23:16:41.58unpack the tarball:
bzip2 -cd sbcl-1.0.56-x86-linux-binary.tar.bz2 | tar xvf -
replacing sbcl-1.0.56-x86-linux-binary.tar.bz2 with the name of the tarball you downloaded. Then enter the directory which was unpacked, and run the installation script to install SBCL in your /usr/local directory:
cd sbcl-1.0.56-x86-linux
sh install.sh
0155デフォルトの名無しさん
2012/04/21(土) 23:17:34.35ターミナルから入力するコマンドだから
しばらく一般的なcui操作に慣れた方がいいかと
0156デフォルトの名無しさん
2012/04/21(土) 23:25:19.71指定した文字を複数個連続して作りたいのですが、
(defun repeat-string (num string)
(format nil "~{~A~}" (loop repeat num collect string)))
(repeat-string 100 "?")
これで一応はできるのですが、
loopを使わずに出来ないものでしょうか。
0157デフォルトの名無しさん
2012/04/22(日) 00:02:49.72(make-string 100 :initial-element #\?)
0158デフォルトの名無しさん
2012/04/22(日) 00:06:08.17流石にそんなアクロバティックな誤読されても困る。最初のコメントに書いてあるように、
斯様にappendは非効率的だから、使う場合に注意を要するって意味なんだけど。
0159デフォルトの名無しさん
2012/04/22(日) 00:08:46.28つまり「例えばある処理系ではこういう実装をしているけど、非効率的でしょ?」って話。
0160デフォルトの名無しさん
2012/04/22(日) 00:11:08.50文字を連続ってことなら157の方法だね。
文字列ってことなら
(defun repeat-string (num string)
(format nil "~V@{~A~:*~}" num string))
とか
0161デフォルトの名無しさん
2012/04/22(日) 00:15:19.23「cons+reverseは」って置き換えてくれるとありがたい。
0162デフォルトの名無しさん
2012/04/22(日) 00:30:44.49ありがとうございます。
0163デフォルトの名無しさん
2012/04/22(日) 20:14:48.90CUI勉強してやってみましたが、sh install.shを打ち込むと、
mkdir: /usr/local: Permission deniedとなります。次はどうすればいいでしょうか
0164デフォルトの名無しさん
2012/04/22(日) 20:38:50.28$ sudo sh install.sh
0165デフォルトの名無しさん
2012/04/22(日) 21:36:18.49mac os x用のbinaryとはなんでしょうか
0166デフォルトの名無しさん
2012/04/22(日) 21:46:46.84ここ読め。テーブルをクリックできる。
0167デフォルトの名無しさん
2012/04/22(日) 21:53:52.94WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.
To proceed, enter your password, or type Ctrl-C to abort.
Password:
ってなりました
0168デフォルトの名無しさん
2012/04/22(日) 22:01:19.530169デフォルトの名無しさん
2012/04/22(日) 22:08:23.79Mac OS Xの初心者スレ、CUIスレ、ターミナルスレのどれかに行って。
(後ろ二つはまだあるかどうかしらんけど)
0170デフォルトの名無しさん
2012/04/22(日) 22:30:48.43WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.
To proceed, enter your password, or type Ctrl-C to abort.
Password:
ってなりました
0171デフォルトの名無しさん
2012/04/22(日) 22:34:22.070172デフォルトの名無しさん
2012/04/22(日) 22:37:20.84ありがとうございます
そっちに行ってみます
0173デフォルトの名無しさん
2012/04/22(日) 23:16:41.980174デフォルトの名無しさん
2012/04/22(日) 23:20:49.530175デフォルトの名無しさん
2012/04/22(日) 23:44:56.05わかりました。 ありがとうございます。
それについてもターミナルスレで聞いてみます。
0176デフォルトの名無しさん
2012/04/23(月) 13:32:13.32GNU Make not found. Try setting the environment variable GNUMAKE.
と出てきました。これはこちらで聞いていい質問ですか?
0177デフォルトの名無しさん
2012/04/23(月) 13:50:28.56おおざっぱに言えば処理系を起動してからがこのスレの話題。
初心者ってのはそういうもんだというのはわかってるが、
このスレの住民からするとたいそう「もどかしい」状態。
0178デフォルトの名無しさん
2012/04/23(月) 14:10:34.440179デフォルトの名無しさん
2012/04/23(月) 14:22:34.94lispworks試用版のmacosx版でもつかったら良いんじゃないかな
http://www.lispworks.com/downloads/index.html
とりあえず処理系動かすだけならフリーの処理系も試用版も同じかな五時間の時間制限あるけど
0180デフォルトの名無しさん
2012/04/23(月) 16:02:49.260181デフォルトの名無しさん
2012/04/23(月) 18:46:12.05エラーメッセージ(の一部)でググレ。
さすがに釣りに思えて来た。
0182デフォルトの名無しさん
2012/04/24(火) 10:41:13.06http://ideone.com/
とかでも。
0183デフォルトの名無しさん
2012/04/26(木) 23:16:09.72ttp://common-lisp.net/project/lispbox/
WindowsとMacとLinuxに対応していて、
ダウンロードして解凍してダブルクリックすればすぐ使える。
処理系はSBCLじゃなくてCCLだけど、初心者からしたら違いはない。
0184デフォルトの名無しさん
2012/04/26(木) 23:28:21.60On Lispの例がそのままでは動かなかったりするのですが
0185はちみつ餃子 ◆8X2XSCHEME
2012/04/26(木) 23:39:21.30そもそも規格では未定義にされていたり、規格以上の機能を提供しようと拡張されていたりすることもある。
そういった言語の微妙なところに依存してしまっている記述はあるかもしれない。
あと、定義を書く順番が関係してくる箇所もあるので、動かないという箇所を具体的に提示すればこのスレで何らかの助言を得られるかもしれない。
0186デフォルトの名無しさん
2012/04/26(木) 23:50:21.73CLISPは代表的なCommon Lisp処理系のひとつですよ。
オープンソースだとSBCLやCCLに次ぐくらいには使われている。
On Lispの著者のお気に入りの処理系のひとつでもあります。
>>185の言うように、書籍のミスなのか、あなたのミスなのか、
>>184の情報だけではわれわれとしても何とも言えません。
0187デフォルトの名無しさん
2012/04/27(金) 14:33:07.78このリストの各要素を逐一足し合わせて
(6 10 10 14 22 25 32 36 41 48)
こういうリストを作るにはどうすればいいですか?
reduceを使えばいいのかと思ったのですが、
reduceに#'+を渡す例を考えると最終的な値はリストではなく一つの値になってしまいます
0188デフォルトの名無しさん
2012/04/27(金) 15:54:04.530189デフォルトの名無しさん
2012/04/27(金) 16:02:39.06for ... then を使えばこんなにすっきりと書けるんですね。
0190デフォルトの名無しさん
2012/04/27(金) 16:56:48.09--> (6 10 10 14 22 25 32 36 41 48)
でもいけるね
0191デフォルトの名無しさん
2012/04/27(金) 18:44:37.150192デフォルトの名無しさん
2012/04/28(土) 00:04:03.22reduceでの解ということでひとつ。
(nreverse (reduce (lambda (r x) (cons (+ (or (car r) 0) x) r))
'(6 4 0 4 8 3 7 4 5 7)
:initial-value nil))
こういうのはloopやiterate、Seriesとかの方がすっきりできる感じがする。
あるいは内包表記とかもこういうの得意分野な感じ。
https://github.com/g000001/srfi-42
CLだとこの辺とか。
0193デフォルトの名無しさん
2012/04/28(土) 00:46:01.06schemeの世界のsrfiってcommon lisp向けに移植されていないのかな
0194デフォルトの名無しさん
2012/04/28(土) 00:59:24.42https://github.com/g000001
に大半のSRFIがあるよ。
0195デフォルトの名無しさん
2012/04/28(土) 02:11:38.340196デフォルトの名無しさん
2012/04/28(土) 17:07:30.76CL詳しくないのでHaskellで
sumlist xs = sumlist' 1 xs
where
sumlist' n xs | n > length xs = []
sumlist' n xs = sum (take n xs) : sumlist' (n+1) xs
CLにも同じ機能あると思うので、参考までに
0197デフォルトの名無しさん
2012/04/28(土) 17:23:23.520198デフォルトの名無しさん
2012/04/28(土) 17:33:40.750199デフォルトの名無しさん
2012/04/28(土) 17:38:35.50http://valvallow.blogspot.jp/2010/08/lispscanl.html
0200デフォルトの名無しさん
2012/04/28(土) 18:09:48.51haskellスレじゃ初心者の質問が無くて暇なんじゃよ
0201デフォルトの名無しさん
2012/04/28(土) 19:46:36.42某人の話題で揉めたばかりなのに、場を読まないと嫌われるぞ。
0202デフォルトの名無しさん
2012/04/28(土) 19:49:17.400203デフォルトの名無しさん
2012/04/28(土) 20:01:19.530204デフォルトの名無しさん
2012/04/28(土) 20:52:48.870205デフォルトの名無しさん
2012/04/29(日) 00:46:24.19(dolist (n1 pat)
(dolist (n2 pat)
(fresh-line)
(format t "~A-~A" n1 n2))))
T-T
T-F
F-T
F-F
このようなdolistを100個以上重ねようと思うのですが、
短縮して書く方法は何かあるでしょうか。
0206デフォルトの名無しさん
2012/04/29(日) 02:16:38.52"1. ネストした dolist"
(if (null bindings)
`(progn ,@body)
`(dolist ,(car bindings)
(nested-dolist ,(cdr bindings)
,@body))))
(defmacro with-pattern-comb ((var pat ntimes) &body body)
"2. nested-dolist をつかってパターンを N 段ネストで呼ぶ"
(let (($pat (gensym "PAT"))
($vars (loop for n below ntimes
collect (gensym "VAR"))))
`(let ((,$pat ,pat))
(nested-dolist ,(mapcar (lambda (x) (list x $pat)) $vars)
(let ((,var (list ,@$vars)))
,@body)))))
CL-USER> (with-pattern-comb (x PAT 3) (format t "~{~A~^-~}~%" x))
T-T-T
T-T-F
T-F-T
...
0207206
2012/04/29(日) 02:19:13.34目的がよくわからんからアレだけど、別の作戦を考えたほうがいいのでは?
0208デフォルトの名無しさん
2012/04/29(日) 10:48:44.82ありがとうございます。ご指摘のとおりで、少ない回数ならその処理で回せますが
大きくなるとお手上げですね。
考え直します。
0209デフォルトの名無しさん
2012/04/30(月) 21:48:35.92例えばデバッグプリントをGauche風に#=expressionに割り当ててたらcl-annotと衝突したし。
0210デフォルトの名無しさん
2012/05/04(金) 18:34:41.69(incfやconcfなど)
これは何の頭文字なのでしょうか?
0211はちみつ餃子 ◆8X2XSCHEME
2012/05/04(金) 18:41:45.260212デフォルトの名無しさん
2012/05/05(土) 16:51:50.290213デフォルトの名無しさん
2012/05/05(土) 22:06:19.63なんでたかが式の評価結果となるシンボルの値を設定するのにsetfみたいなしかけが必要なんだろう?
いや、現状そうせざるを得ないのはわかるが、言語仕様の修正でなんとかならなかったのだろうか?
式言語なのに、LISPだけがこんなしかけを必要とするのが不思議だ。
0214デフォルトの名無しさん
2012/05/05(土) 22:35:16.550215デフォルトの名無しさん
2012/05/05(土) 22:37:38.28lexical-scope が導入されたりして、 「評価結果のシンボルの symbol-value の値を更新」すればいい
時代は過ぎ去った。 HyperSpec の 5.1 Generalized Reference を参照。
(set 'foo 100) ;; シンボルの値設定しちゃうぜヒャッハー
(setq foo 100) ;; ヤベェ。quote 分セルが節約www 俺天才www <--- この頃までは「シンボルの値」モデル
(setf foo 100) ;; ついでに field 一般の更新用に拡張!!
…という話ではないのかな?
何をどう「修正」すれば何がどう「なんとかなる」のかよくわからんので外してたら補足して。
0216デフォルトの名無しさん
2012/05/05(土) 23:19:31.09symbol-valueを設定するためにsetfがあるのではなくて、
setfがsymbol-valueの設定にも対応してる、みたいな関係。
なので、>>213がどういうことを主張してるのか良く分からない。
0217デフォルトの名無しさん
2012/05/05(土) 23:24:40.05たぶんそれは「左辺値」という概念があるからで、LISPにも同等の概念があれば
いちいちデータの種類ごとにセッタ(それも任意の式をとれるわけでない不完全な)を用意しなくてもすむのでは? と思った。
0218デフォルトの名無しさん
2012/05/05(土) 23:49:34.71ただしそれは式の意味領域を拡張することになるので、結構大掛かり。
0219デフォルトの名無しさん
2012/05/05(土) 23:56:00.80Cだって&演算子がある。Perlにも。
ある式の結果が収められる場所を知りたいこと、
場所に対する演算を行いたいことは結構ある。
C++なんて&&渡しまで出来たし。
>>217
define-setf-methodに相当する機能がある言語なんて皆無に等しい。
たぶんあなたはCLtLは理解できてないんじゃないか?
Lisp系だがTaoは結構エレガントにまとめたと思う。
0220デフォルトの名無しさん
2012/05/06(日) 00:04:12.97そして、defsetfで任意の式に対応することができる。
あと、データの種類というか、式(place)の種類だよね?
汎変数のplaceをその都度定義するのが面倒という話は、
高機能さとのトレードオフと考えれば良いんじゃないか?
0221デフォルトの名無しさん
2012/05/06(日) 00:04:17.77(setf (if x y z) a)
とかやればいくらでもsetfの設定できる
0222SCHEME餃子 ◆8X2XSCHEME
2012/05/06(日) 00:08:50.70それはどうかな。
C++11 を見ればそのあたりの区別を考察してしまったがために更に区別が必要になって複雑なことになってるぞ。
Scheme はお前の望む形にちょっと近いかも。
0223デフォルトの名無しさん
2012/05/06(日) 00:21:10.43>220
> 汎変数のplaceをその都度定義するのが面倒という話は、
> 高機能さとのトレードオフと考えれば良いんじゃないか?
まさにこれが疑問の核心でした。
つまり
・Cの&演算子のような構文を導入することで左辺値の参照は汎用的に行えるようになる
・しかしそれではC#のプロパティのような、参照時の処理を自由に追加する機能は実現できない
という対立があって、LISPは自由度を選んだということですね。
(別の機能としてもよかったかも知れませんが)
0224デフォルトの名無しさん
2012/05/06(日) 00:23:04.59215のいうようにfieldっていうのが定番の説
http://lambda.s55.xrea.com/20040216.html
0225デフォルトの名無しさん
2012/05/06(日) 00:25:58.31schemeの該当機能は知らないのですが、私もなんとなくそんな気がします。
(e1 e2)で、e1の評価結果が関数値であれば任意の式が取れるあたり
設計思想的に自分の直感に近そうです。
0226デフォルトの名無しさん
2012/05/06(日) 00:27:27.410227デフォルトの名無しさん
2012/05/06(日) 00:38:59.73Common Lispがそんな間抜けな設計のわけねえだろ。
ちゃんと計算されてる。角度とか。
0228デフォルトの名無しさん
2012/05/06(日) 00:46:57.81「まぁ好きではじめた仕事ですから」
最近は良い型が取れないと口をこぼした
まず、λの傾きの入念なチェックから始まる。
0229デフォルトの名無しさん
2012/05/06(日) 00:57:42.89言語機能の直交性などは犬にでも喰わせちまえってんだ!
0230デフォルトの名無しさん
2012/05/06(日) 01:01:21.13assocのちょっとした工夫が、後のsetfのあだとなった。
0231デフォルトの名無しさん
2012/05/06(日) 01:06:31.23歴史を知ることでその関数やマクロ作者の意図を知ることが出来るような。
0232デフォルトの名無しさん
2012/05/06(日) 01:40:55.74shallow bindingだから>>215の説は誤りで、
(setf (car x) y)みたいな代入の汎化がしたいためでしょ。
replacaみたいな関数を個々に用意するのは馬鹿らしいし。
探索系の関数にも使えるし。
0233デフォルトの名無しさん
2012/05/06(日) 02:04:16.82http://www.softwarepreservation.org/projects/LISP/interlisp-d/Deutsch-3IJCAI.pdf
元ネタにインスパイアされて実装したのは、70年代MITのLispマシーングループ
Lispマシーンに導入された時もダイナミックスコープなのでレキシカルスコープ採用が契機というわけではなし
ちなみに、MacLispには、Lispマシーンからポートされたという流れ
0234デフォルトの名無しさん
2012/05/07(月) 16:05:18.97ないかと思ったのですが出来ませんでした。(評価されるのは引数だけでした)
((if t '+ '*) 3 5)
なぜ出来ないようになっているのでしょうか?
0235デフォルトの名無しさん
2012/05/07(月) 16:16:58.39まあ簡単に切り捨てられるものではないが。
0236デフォルトの名無しさん
2012/05/07(月) 20:32:39.610237デフォルトの名無しさん
2012/05/07(月) 20:48:56.90評価したとして、
(let ((car 'cdr)) (car '(a b c))) ==> a ?
(let ((f (if t '+ '*))) (f 3 5)) ==> error?
などはどう解釈すれば良いかはっきりしないし、はっきりさせたとしても今より不恰好になると思う
0238デフォルトの名無しさん
2012/05/07(月) 21:20:09.08同じシンボルでも引数としての評価時と関数としての評価時で参照する所が違うから、
関数部分を引数部分と同じように評価するとややこしい事になるんですね。
なんだか名前空間の分かれていないschemeのほうが整然としている気がしました。(触ったことはないのですが)
そういった整然さを捨ててまで名前空間を分けた理由とは何なのでしょうか。
(let ((+ 10) (- 5)) (* + -))
仕様の選定人の中にこういう趣味の人がいたのでしょうか?
0239デフォルトの名無しさん
2012/05/07(月) 21:22:13.850240デフォルトの名無しさん
2012/05/07(月) 21:28:13.96互換性です。
0241デフォルトの名無しさん
2012/05/08(火) 00:06:36.880242デフォルトの名無しさん
2012/05/08(火) 00:35:45.32http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
0243デフォルトの名無しさん
2012/05/09(水) 00:08:25.25この下の方にあるgenbezマクロなのですが、
x2 y2だけgensym使って過評価保護していないのは理由があるのでしょうか?
と質問しようとしたのですがx2 y2だけ一度しか評価されないからでした。
隅まで神経が行き届いていますね。
0244デフォルトの名無しさん
2012/05/09(水) 07:00:22.69`(defmacro bbb (x-b)
(case x-b
,@(mapcar (lambda (d) ...)
(リスト x-a の展開)))))
みたいなコードの、(リスト x-a の展開) をどのように書けば良いのでしょうか?
x-a では間違い、,x-a でも文法エラー、`,x-a も間違い、、、。
`(...,(... の中でマクロの引数の利用方法が分からないとも言えると思うのですが。
0245デフォルトの名無しさん
2012/05/09(水) 07:58:46.65その(リスト x-a の展開)がどういうことをやりたいのかいまいち分かりませんが、
別のリストとつなげたいとかそういう話なら、appendやconcatenateでくっ付けるなり、
`(0 1 2 ,@x-a)とか(apply #'list 0 1 2 '(3 4 5))みたいにするなりすればいいじゃないですか! やだー!
0246デフォルトの名無しさん
2012/05/09(水) 08:22:03.170247244
2012/05/09(水) 08:41:03.09(リスト x-a の展開)というのは、単に
(defmacro aaa (x-a)
`(mapcar (lambda (d) d) ,x-a))
みたいに、,x-a を mapcar の2番目の引数として
ループのために利用したいといった意味です。でも上のコードでは、
,@( の内側のmapcar にて x-a を利用したいので
既にコンマの中になっていて ,x-a では使えないので困っています。
実際のコードはおおよそ以下のようになっています。 ?x-a? の書き方が?です。
(defmacro generate-data-table (x-a)
(let ((g!arg (gensym)))
`(defmacro query-data (,g!arg)
(case ,g!arg
,@(mapcar (lambda (lst-c)
(setupcaselist lst-c))
?x-a?)))))
0248デフォルトの名無しさん
2012/05/09(水) 08:54:04.050249244
2012/05/09(水) 08:54:18.15バッククォートとカンマとマクロの関係の基本が
何もわかってないということが分かった。。。う〜。
もうちょっと自分で考えてみた方が良いかも。です。
ちなみに、Let Over Lambda の日本語版の p.128、
dlambda について、自分なりにアレンジしてみようと思いました。
0250244
2012/05/09(水) 09:13:06.60それだと文法ミスにはならないのですが、
(generate-data-table *DATA*)
The value *DATA* is not of type LIST.
と、*DATA* としてリストを渡しているにもかかわらず
エラーメッセージが表示されてしまうのです。
0251デフォルトの名無しさん
2012/05/09(水) 09:15:25.49(aaa '(0 1 2))というコードがあったら、aaaに'(0 1 2)という式を渡して評価し、
返される式がコンパイラに解釈されるだけ。
バッククォートも基本は単純で、基本はクォートと同じでリストのリテラルだけど、
中に , や ,@ といったアンクォートされる部分があったら、そこは評価する。それだけ。
どうも、その本の該当する場所で前提とされる基礎知識が足りてない気がします。
復習して基本を押さえてからの方が結果的に近道になると思います。
0252デフォルトの名無しさん
2012/05/09(水) 09:21:04.31そりゃあ、シンボル渡してるんだから、それをmapcarに渡してもエラーになりますよ。
マクロに渡してる*DATA*っていうのは実行時のデータじゃないんですか?
実行時に計算して初めて得られるデータとかを、コンパイル時に利用できると思いますか?
あるいは、*DATA*が最初から用意されている定数だとするなら、マクロに渡す必要はありますか?
マクロの定義内で直接使えば良いのではないですか?
0253244
2012/05/09(水) 09:39:48.52なるほど。実行時にリストになるシンボルをコンパイル時に評価しろと言っているから
問題なんですね。
ちなみにこの *DATA* については、そのうち入力から読み取って作成予定
なので、このマクロではダメですね。わかりました。
少なくとも、"読み込み時","コンパイル時","実行時" の区別が
ちゃんと理解できていないのが問題ですね。まずはそこらへんを復習します。
0254デフォルトの名無しさん
2012/05/09(水) 23:57:54.48http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/anaphoricMacros.html
|Norvigは,ifを次のように再定義したら便利だろうと述べたが,
|
|(defmacro if (test then &optional else)
| `(let ((that ,test))
| (if that ,then ,else)))
|
|参照透明性を侵すという観点からこのマクロを却下している.
|
|しかし問題は組み込みオペレータを再定義したことに因るもので,アナフォラを使ったことに因るのではない.
|上の定義のb)節は,式が「任意のコンテキスト内」で必ず同じ値を返すことを要求している.
この文章がどういう事なのか分かりません。参照透明性を侵すとありますが具体的にどのような場合に侵されるのでしょうか。
「上の定義のb)節は,式が「任意のコンテキスト内」で必ず同じ値を返すことを要求している.」とはどういう事なのでしょうか。
b節とは(if that ,then ,else)の事?
また上記のdefmacro ifは無限ループに陥りますが、あくまでifが現在の物と比べてこういう風にあれば、という理想の話だからですよね。?
0255デフォルトの名無しさん
2012/05/10(木) 01:24:27.53(let ((that 10)) ;; that は 10
(if (+ 5 3)
(print that) ;; 再定義版の if だと、ここで that が 8 になってる!!
...))
となる、ってのが「参照透明性を壊す」ということ。参照透明であるなら、 that の値は
10 でなければならない。 b) というのは、もう少し上のこの文章の部分。
> 参照の透明性が保たれているプログラミング言語とは,\\ a) どの部分式も,値の等しい別の式に置き換えることができ,\\
> b) 式は任意のコンテキスト内のどこで何回使われても同じ値を返す,ようなものだ.
0256デフォルトの名無しさん
2012/05/10(木) 02:56:14.47ASDFとquicklisp同時に使って問題ないものなのでしょうか?
0257デフォルトの名無しさん
2012/05/10(木) 04:00:22.56QuicklispはASDFの上に作られたものなので、ASDFないと機能せんと思いますよ。
さておき、QuicklispとASDFと同時に使うというのはどういうことを指していますか?
質問が抽象的過ぎて何とも言えません。
0258デフォルトの名無しさん
2012/05/10(木) 06:37:18.49レスありがとうございます。
b節とはその事だったのですね。
(if (+ 5 3)
(print that)
...)
の式はどこで使われても同じ 8 が表示されるので参照透明性を侵していないと言えませんか?
0259デフォルトの名無しさん
2012/05/10(木) 10:37:51.84式を普通に読む限り、字面ではthat=10と読める筈
that=10の一貫性を崩してifの中だけで有効な、字面からだけでは読み取れないルールが導入されている方がイレギュラーだとは思わないだろうか
255がわざわざ (let ((that 10)) ;; that は 10 って書いてる意味も考えよう
0260デフォルトの名無しさん
2012/05/10(木) 11:17:08.890261デフォルトの名無しさん
2012/05/10(木) 11:41:23.64ありがとうございました。
0262254
2012/05/10(木) 15:12:39.09モヤが晴れました。要点は、ある関数やマクロが元来新しいコンテキストを生成するものなのかどうかという点と
違うコンテキストであれば式の値は異なってよいという点でした。
letは元来新しいコンテキストを生成するものであるから
(let ((that 10))
(let ((that 8))
(print that)) ; 8
(print that)) ; 10
の中の2つの式thatは異なるコンテキストの中の式であり値が異なっていても参照透明性は壊れていない。
ifは元来新しいコンテキストを生成するものでないから
(let ((that 10))
(if 8 (print that)) ; 8
(print that)) ; 10
の中の2つのthatは同じコンテキストの中にあり、しかしながら値が異なるので参照透明性が壊れている。
私は上記ifの再定義によってifも新しいコンテキストを生成するものに存在が変わった、だから
これはletのケースと同じで参照透明性を壊していないじゃないかと思ってしまいました。これがモヤでした。
しかし元来ifは新しいコンテキストを生成するものではないということが重要なのですね。
既存のコードはifがそのように変わった事など知らないので>>254のように再定義すると
変数が上書きされて今まで正常に動いていたものがうまく動かなくなる場合があるから
危険―つまり参照透明性が壊されると分かりました。
0263デフォルトの名無しさん
2012/05/10(木) 15:53:19.12ifではないコンテキストを生成するような構文、
例えばletでも間違った実装をすれば同じようなことは起きうる。
0264デフォルトの名無しさん
2012/05/10(木) 16:02:19.610265デフォルトの名無しさん
2012/05/11(金) 15:13:00.93CLtL3って話があったとは知らなかったんだけど、
この動向はどうなっているの?
0266デフォルトの名無しさん
2012/05/11(金) 15:16:14.730267!256
2012/05/12(土) 23:15:44.14現代風の標準ライブラリみたいのが欲しい。
もしくは、asdf みたいなライブラリインストールツールの標準化とか。
あと、マルチプロセス、マルチスレッドについてのなんらの仕様が欲しい。
コンパイラやメタオブジェクトまで仕様に含まれているのに
並列化サポートについては遅れているとしか思えない。
0268デフォルトの名無しさん
2012/05/13(日) 01:23:55.34ASDFは事実上の標準になってるから、別に良いんじゃないかな。
マルチスレッドは、標準に入れようとすると、SchemeのR6RSどころじゃなく揉めそうな予感。
ところで、現代風の標準ライブラリって、どういうの欲しい?
0269267
2012/05/13(日) 02:45:05.50そうか〜。やっぱり心変わり。
並列化の仕様化については確かに揉めそう、というか不可能な感じもするので
問題なく使えるライブラリ実装があればいいか。
となるとまぁ、現状でもいいことになるか。
現代風の標準ライブラリについては、とりあえず、Ruby に有るようなもの、
って言おうと思ったけど、これは常時開発中で標準ライブラリとは言わないのかな。
計算機やネットワーク、種々のプロトコルについては日々進化してるわけだから、
仕様に入れるのはやっぱり不可能そう。
0270デフォルトの名無しさん
2012/05/13(日) 03:48:49.09具体的にこういう物が欲しい、欠けてる、みたいな話は良いと思う。
既存の物を知っている人が紹介できるかもしれないし、作る動機になるかもしれない。
抽象的だと議論が発散して得るものがない場合がほとんどで不毛だけど。
Rubyではないけど、Pythonにあるようなもの、というコンセプトなら
https://github.com/garaemon/clap
というのがあるけど、開発は滞りがちみたい。
02711/2
2012/05/13(日) 11:11:35.97例えば、分子構造について標準入力等から読み取った1次元リストデータを、
別の入力である構造化用ルールツリーデータに従って構造化したいといった問題とか。
例:水分子: H2O
入力1:
(setf struct-mol
'("H2O" ;分子名
"3" ;構成原子数
"O" "1.35200" "2.02600" "-0.16900" ;酸素、X, Y, Z 座標値
"H" "0.85000" "2.18800" "-0.96800" ;水素、X, Y, Z 座標値
"H" "1.46300" "1.07500" "-0.14500" ;水素、X, Y, Z 座標値
))
入力2:tree で記述された構造化用ルール
(setf rule-mol
'((str 1 name nil) ;文字列として読んでシンボル name に対応付け。
(int 1 natom nil) ;整数として読んでシンボル natom に。
(nlist natom atoms ;以下を natom 個のリストとして読んで、シンボル atoms に。結果もリストに。
(str 1 atom nil) ;1つの文字列を読んでシンボル atom に。
(float 3 xyz nil)))) ;3つの浮動小数点数を読んでシンボル xyz に。
出力:
((NAME ("STO-3G"))
(NATOM (24))
(ATOMS
((("O") (1.352 2.026 -0.169))
(("H") (0.85 2.188 -0.968))
(("H") (1.463 1.075 -0.145))))
0272デフォルトの名無しさん
2012/05/13(日) 11:12:13.321.構造化用ルールのところの natom の様に、
一旦対応付けられたシンボルを下のルールを読むところで
利用できるようにすること
2.struct-mol、rule-mol について2重ループ以上にする必要が有るのですが、
基本的にどういう構造にするのか分からない。
struct-mol 要素を rule-mol に従って読み進める時に、例えば (float 3 xyz nil) について
処理する等、幾つかのデータをいっぺんに読むことになるのですが、どこまで読んだかを
レキシカルスコープ変数に保存しておくのか、大きな関数内のグローバル変数に置いておくのか、
どのようにするのがスマートなのか分からない。
3.マクロってどこらへんに出番があるの?
誰か見本のプログラムを下さい。と、いうのは甘いですか?
自分で書いたのだと70行くらいになってて、とても可読性が低い感じです。
0273デフォルトの名無しさん
2012/05/13(日) 13:18:19.920274デフォルトの名無しさん
2012/05/13(日) 13:29:56.92http://paste.lisp.org/
ここを使うとか
0275デフォルトの名無しさん
2012/05/13(日) 14:13:12.89(lambda (data)
(labels ((take (n)
(prog1 (subseq data 0 n) (setf data (subseq data n))))
(parse-float (str)
(read-from-string str)) ;; you should use parse-number library
(apply-rule (result rule)
(destructuring-bind (type arg varname &rest subrules) rule
(let* ((num (etypecase arg
(number arg)
(symbol (caadr (assoc arg result)))))
(node (ecase type
(str (list varname (take num)))
(int (list varname (mapcar #'parse-integer (take num))))
(float (list varname (mapcar #'parse-float (take num))))
(nlist (list varname
(loop for i from 0 below num
collect (nreverse
(reduce #'apply-rule subrules :initial-value ()))))))))
(cons node result)))))
(nreverse
(reduce #'apply-rule rules :initial-value ())))))
0276デフォルトの名無しさん
2012/05/13(日) 14:27:45.75http://paste.lisp.org/display/129423
0277275
2012/05/13(日) 14:29:16.841. ルールで表現する => コレはすごくいい考えだとおもう。状況はわからんが、ルールはもうちょっと改善できそうな…
2. 内部的に二重ループになるのはある程度はしかたない。NATOMの回数は事前にわからないんだからね。ループを一個にしても、対して性能に影響ない感じ。
3. なんでもマクロに出番があるわけではない。
私は高階関数が珍しい世代だったので、 rule-interpreterを隠蔽して、 (def-mol-parser h2o <<ルールのリスト>>) にするとか思いつくけれど
最近の Scheme の流行具合をみると、別に不要な気がしますね。
0278275
2012/05/13(日) 14:35:17.22ルールに従ってロードするというような場面を想像をしたけれど。データ表現なら、個人的趣味からいえば、
構造体にしたいし、分子はリストではなく配列で持ちたいなぁ。
0279デフォルトの名無しさん
2012/05/13(日) 15:51:36.16それぞれタスク/プロセス/スレッドのモデルが違ったから標準化出来なかった。
今はほぼMac OS Xを含めたUNIX/POSIX/Mach系とWindows系に絞られてきたから、
標準化しやすいのではないか?
問題はCLtLの全てをMT safeかどうか、どのようにMT safeか決めないといけないこと。
野心的にやろうとするとかなり大変。コンサバにやってもそう簡単なことではない。
0280デフォルトの名無しさん
2012/05/13(日) 17:13:33.23ライブラリで十分。
0281デフォルトの名無しさん
2012/05/13(日) 17:31:56.14Schemeみたいにインプリメンター主導な頭で仕様大事と考えててもCommonLispは衰退するだけだと思いますね
Quicklispみたいなものをプッシュしてユーザーが増えてからで遅くない
0282デフォルトの名無しさん
2012/05/13(日) 17:35:55.28企業でその手の決定を下せる立場にある人にとっては
仕様が確定していることの安心感も必要だったりするぞ。
0283デフォルトの名無しさん
2012/05/13(日) 18:17:04.62どの言語を採用するかを決定する企業も大きくみてユーザーでしょう
CommonLispの言語仕様改訂を強く望んでいる大口ユーザーってどこですか
Franz位しかないのであれば、Franzのlispに機能を組み込んでおけば良いってことになりますね
0284272
2012/05/13(日) 18:40:53.15上の課題は例ですが、私が実際に今のプログラムに必要としているものです。
275 のコードはまだ理解出来ていないのですが、
をもうちょっと読み込んで、適宜コピペさせて頂きます。(ペコリ)
他にも、私のプログラムで問題になっている
バイナリ/テキストファイルに対しての中間データの読み書きについても
すぐさま利用出来て助かります。
私一人が開発しているプログラムなので、ルールの書式についても
より良い方法が無いのか、模索中です。だからこそ、将来のルール変更に
耐えられる様に、ルールを DSL として与えるプログラム形式に
なっている必要があります。
0285デフォルトの名無しさん
2012/05/13(日) 21:54:57.130286275
2012/05/14(月) 00:34:57.04出力をマクロにした例を無理矢理つくってみた。
;; 展開形: http://paste.lisp.org/display/129423
(define-mol-rule standard-mol
(name :type string)
(natom :type fixnum)
(atoms :type list
:count natom
:children ((atom :type string)
(xyz :type float :count 3))))
CL-USER> (standard-mol data)
#S(STRUCT-STANDARD-MOL
:NAME "H2O"
:NATOM 3
:ATOMS (("O" (1.352 2.026 -0.169)) ("H" (0.85 2.188 -0.968))
("H" (1.463 1.075 -0.145))))
0287275
2012/05/14(月) 00:35:48.060288デフォルトの名無しさん
2012/05/24(木) 13:00:13.40(first item))
(first-item '(mr, hoge))
こうすると当然のことですがComma not inside a backquote.と出ます
mr,の部分を文字列にせずに処理する方法は何かありますか
0289デフォルトの名無しさん
2012/05/24(木) 13:08:30.93(first-item '(mr\, hoge)) --> |MR,|
文字列にせずに処理する方法 っていう意味は分からなかった
0290デフォルトの名無しさん
2012/05/24(木) 13:12:57.01'("mr," hoge)とせずに、という意味でした
エスケープするということをすっかり忘れていました
ありがとうございます。
0291デフォルトの名無しさん
2012/05/24(木) 13:17:20.680292デフォルトの名無しさん
2012/05/24(木) 13:18:21.540293デフォルトの名無しさん
2012/05/26(土) 15:13:44.83お力を貸して頂けると大変ありがたいです。
(wanted-fn '((a 0 1 (b 2 3) 4 5)
(c 6 (d 7) 8 9 (e 10) 11)
(f 12 13 (g 14 (h 15) 16) 17 18)
(i 19 20) ...))
=>
((B 0 1 2 3) (A 4 5)
(D 6 7) (E 8 9 10) (C 11)
(H 12 13 14 15) (G 16) (F 17 18)
(I 19 20) ...)
アルファベットの部分には任意のシンボルが入り、
数値の部分には任意の数値または任意の文字列が入ります。
したがって、上の例のアルファベット順や数値順を定義に利用することはできません。
また、'...'は同じような式が任意の数(ただし有限個)続くということを表しています。
0294デフォルトの名無しさん
2012/05/26(土) 15:59:11.01(defun wanted-fn (data &aux fn args)
(labels ((push-fn (x) (push x fn))
(push-arg (x) (push x args))
(flush-unit (result)
(prog1 (append result
(list (cons (car fn) (reverse args))))
(setq fn (cdr fn)
args ())))
(parse-unit (lst &aux result)
(dolist (e lst)
(etypecase e
(symbol (push-fn e))
(string (push-arg e))
(number (push-arg e))
(list (setq result (append result (parse-unit e))))))
(flush-unit result)))
(apply #'append (mapcar #'parse-unit data))))
0295293
2012/05/26(土) 16:26:08.44ありがとうございます!!
再帰を使って関数を定義しようとしたのですが、
どういう手順で考えれば、このような再帰関数を作ることができるのか、
うまくいかなかったのであります!!
感激であります!!
これから関数の動作を理解すべく、じっくりコードを読み込む所存であります!!
ペコリ。
0296294
2012/05/26(土) 16:41:14.32(defun wanted-fn (data)
(labels ((parse-unit (data fn args result)
(if (null data)
(cons (cons (car fn) (reverse args)) result)
(destructuring-bind (x . xs) data
(etypecase x
(symbol (parse-unit xs (cons x fn) args result))
(string (parse-unit xs fn (cons x args) result))
(number (parse-unit xs fn (cons x args) result))
(list (parse-unit xs fn nil (parse-unit x fn args result))))))))
(apply #'append (mapcar (lambda (x) (reverse (parse-unit x nil nil nil))) data))))
0297294
2012/05/26(土) 16:48:15.291. 結果が (fn arg1 arg2 ...) のリストになる。
2. リストを一個ずつパースすることから、終了条件は (null ...)
3. 返す値は (cons (fn arg1 arg2 ...) result) になる。
4. fn はその階層のリスト?をたどった先頭要素 -> (car fn)
5. args はリスト終端時に木をたどったもの全部 -> (reverse args)
=> これで (if (null data) (cons ....) ....) の形が完成
6. あとは、 car / cdr を分解して、関数呼び出しに変換する。
0298293
2012/05/26(土) 16:58:52.92再び、ありがとうございます。
美しいコードなので、動作の構造がすごくわかりやすくて、ためになります。
再帰でdestructuring-bindをこのように使い、リストを小さくしていく手法は初めて見ました。
大変勉強になります。
0299293
2012/05/26(土) 17:00:24.62ああ、考え方まで、参考になります。
0300293
2012/05/26(土) 17:19:31.84今気づいたのですが、「ああ」の意味は二義的ですね。
正確に言うと、ここでの「ああ」は感嘆の「嗚呼」であって、
ついでに「ああ、どーもね」という意味ではありません。
細かなことですが、せっかく教えていただいたのに無礼な態度は取りたくないので、
取り急ぎ。
0301デフォルトの名無しさん
2012/05/26(土) 23:26:05.760302デフォルトの名無しさん
2012/05/26(土) 23:28:18.72(defun first-name (name)
"Select the first name from a name represented as a list."
(if (member (first name) *titles*)
(first-name (rest name))
(first-name)))
こういう関数が出てくるのですが(p.15)、(first-name)は(first name)のタイポでしょうか
0303デフォルトの名無しさん
2012/05/27(日) 01:02:48.97手元の英語版ではちゃんと (first name) になってる。
0304302
2012/05/27(日) 10:19:37.270305デフォルトの名無しさん
2012/05/28(月) 00:12:31.690306デフォルトの名無しさん
2012/05/28(月) 01:18:09.480307デフォルトの名無しさん
2012/06/01(金) 17:16:29.28,をつけないようにすることは出来ないのでしょうか?
(defmacro make-short (short long &rest rest)
`(defmacro ,short (x) `(,',long ,x ,,@rest))) ; あまりいい例ではないと思いますが
(DEFMACRO SHORT (X) `(LONGLONGLONG ,X ,ASDF ,ZXCV ,QWER)) ; macroexpand-1するとこうなります
(DEFMACRO SHORT (X) `(LONGLONGLONG ,X ASDF ZXCV QWER)) ; こうしたいのですが,',@では実現されませんでした
(defmacro make-short (short long &rest rest)
`(defmacro ,short (x) (list ',long x ,@(mapcar (lambda (x) `',x) rest))))
(DEFMACRO SHORT (X) (LIST 'LONGLONGLONG X 'ASDF 'ZXCV 'QWER)) ; 無理やりするとこうですが
0308デフォルトの名無しさん
2012/06/01(金) 17:23:46.23`(defmacro ,short (x) `(,',long ,x ,@',rest)))
これで出来ましたw
おもしろいですね
0309デフォルトの名無しさん
2012/06/05(火) 11:11:40.28初中級者から上級者へのアップグレード方法がわからない。
特にLispはコミュニティーを見つけるのも大変だしプロジェクトを見つけるのも大変。
このスレで充分だろと言われればそれだけだけどもCL上級者とコンタクトをとれる場所ってないものかな
それとどこに行けばCLのプロジェクトが見つかり、参加することができるのか…
0310デフォルトの名無しさん
2012/06/05(火) 11:30:00.62https://github.com/languages/Common%20Lisp
0311デフォルトの名無しさん
2012/06/05(火) 11:38:54.41だが英語が苦手な俺にとってはできれば日本人がいるところがよいのだが…
0312デフォルトの名無しさん
2012/06/05(火) 12:32:13.78ネット経由ならTwitterとか使う手もあるかもしれないけど。
プロジェクトとかは日本発のもの自体が少ないから、英語無理だと選択肢が少ない。
逆に辞書引きながらでも良いなら、今の時代ならGitHubとかで交流余裕。
あとxyzzy界隈なら割と賑わってる印象。
0313デフォルトの名無しさん
2012/06/05(火) 12:56:42.67https://www.google.com/reader/shared/user/09041986761111907232/label/Planet%20CL%20%E8%B6%85%E6%89%8B%E6%8A%9C%E3%81%8D%E7%89%88
とか見れば日本語のLisp情報割と見付かるよ。
0314デフォルトの名無しさん
2012/06/06(水) 00:29:53.76http://international-lisp-conference.org/2012/index.html
International Lisp Conference 2012
Miyakomesse Kyoto Japan
October 21-24, 2012
というのがあるらしい。
0315デフォルトの名無しさん
2012/06/06(水) 07:26:02.21ドキュメント的なものをアウトプットするのが楽しいという人が少ないのでしょうがない.
しかし, アプリ作ることになると結局clだけで完結するわけでもないし,
また, clが他の言語に比べて, それほど突出したり変ったりしてる訳でもないので,
(cl抜きに)中から上級のプログラマであれば, そんなに困らないのではないだろうか.
そんな風にあまり困ってない人がgithubなどで色々作って公開してるんじゃないかな.
意見交換する場があったら活発に意見交換するかというとそうでもないのですぐ廃れてる..
0316デフォルトの名無しさん
2012/06/06(水) 08:15:51.34http:/jp.franz.com/base/seminar-2011-11-18.html
数理システムのユーザーカンファレンスにlispセミナーというのもある。
0317デフォルトの名無しさん
2012/06/07(木) 09:04:19.09309みたいな質問をする人が情報収拾の主力としてるメディア、知りたい
common lispでググってる範囲なのか2chでスレ眺めてるのか
ついでにこのスレの住人御用達の主力メディア、興味ある
0318デフォルトの名無しさん
2012/06/07(木) 09:08:54.930319デフォルトの名無しさん
2012/06/07(木) 12:32:59.47309じゃないけど、おいらはGoogle readerでPlanet lispとlispを眺める程度でしかないなぁ
0320デフォルトの名無しさん
2012/06/07(木) 13:28:38.54あとはGitHubのフィードで大体話題になってる情報は入ってくる感じ。
たまにcomp.lang.lispとかも見てるけど、あんま面白いネタない気がする。
0321デフォルトの名無しさん
2012/06/07(木) 21:24:32.51後はC++くらい?
0322デフォルトの名無しさん
2012/06/09(土) 18:46:13.11いろんなテーマの上級者向けの専門書で、ソースコードが載ってる場合、
シェアに比例してC言語のことが多いから、結果としてC言語が書かれた
上級者向けの本も多い。
0323デフォルトの名無しさん
2012/06/09(土) 19:25:33.19多いっていえば、lispはAI関係の昔の本はほんとう沢山あるね
ウェブプログラミングが近頃のプログラミングで大きな需要を占めるとすると、その辺りで上級なものっていったらほぼ0だよね
セマンティックウェブとかはあるかな
言語機能の解説でいえば、clos、コンディションシステムなどのAIブームが消える前には標準化されてなかった機能達を詳しく説明してる本は少ないね
実践CommonLisp位かな。ここいらの解説は入門書で説明するにはそこまで辿り着くのが大変だし、単体で本になっても売れるもんでもないだろうしってところで空白地帯だね
0324デフォルトの名無しさん
2012/06/09(土) 22:02:36.95ある言語を使って複雑なことをするということはベクトルが違う。
>>312のいう、C++の上級者向けの本というのはC++の使い方の本のことでは?
0325デフォルトの名無しさん
2012/06/09(土) 22:46:12.10という感じかな
0326デフォルトの名無しさん
2012/06/09(土) 22:55:13.67OnLispが初級なのか、、、
0327デフォルトの名無しさん
2012/06/10(日) 05:23:25.870328デフォルトの名無しさん
2012/06/13(水) 18:25:00.26このtestを属性リストのように扱って、
奇数番目のatomが奇数のときには、そのつぎのatomを足し合わせていく、
という処理をしたいのですが、よくわかりません
mapcと(lambda (x y)...)ではできませんでした。
0329デフォルトの名無しさん
2012/06/13(水) 20:16:55.05(defun f (xs a) (if (null xs) a (if (oddp (car xs)) (f (cddr xs) (+ a (cadr xs))) (f (cddr xs) a))))
(defun g (xs) (f xs 0))
> (g test)
12
0330デフォルトの名無しさん
2012/06/13(水) 23:24:18.96(loop for l on '(1 2 3 4 5 4 3 2 1 0) by #'cddr if (oddp (car l)) sum (cadr l))
0331デフォルトの名無しさん
2012/06/14(木) 18:22:41.82On LispのようにLispの文法、意味の基本的なことは知っているのが前提の本を初級って馬鹿じゃないのか?
0332デフォルトの名無しさん
2012/06/14(木) 19:15:20.01基礎は入門に区分されるんじゃね?
0333デフォルトの名無しさん
2012/06/14(木) 20:38:35.910334デフォルトの名無しさん
2012/06/14(木) 23:47:12.030335デフォルトの名無しさん
2012/06/15(金) 11:16:45.240336デフォルトの名無しさん
2012/06/15(金) 12:40:14.64ありがとうございます。たしかに、cddrで順に処理していき、
適宜carで条件分岐させればよかったですね。
勉強になります。
0337デフォルトの名無しさん
2012/06/17(日) 07:03:50.160338デフォルトの名無しさん
2012/06/17(日) 17:02:05.43International Lisp Conference
はどのような趣向で行われるようなものなんでしょう?
折角の日本開催,帰省がてら参加したいなと考えているのだけど
0339314
2012/06/17(日) 17:45:13.64>312の質問を見たときに
DDSKKのメーリングリストで紹介されていたカンファレンス
http://mail.ring.gr.jp/skk/201206/msg00000.html
を思い出したので書き込みしてみた。
自分はこのカンファレンスがどんなものか知らない。
0340デフォルトの名無しさん
2012/06/18(月) 05:00:02.46major influence for almost all programming languages and for all
sufficiently complex software applications.
The International Lisp Conference is a forum for the discussion of
Lisp and, in particular, the design, implementation and
application of any of the Lisp dialects. We encourage everyone
interested in Lisp to participate.
We invite high quality submissions in all areas involving Lisp
dialects and any other languages in the Lisp family, including,
but not limited to, ACL2, AutoLisp, Clojure, Common Lisp,
ECMAScript, Dylan, Emacs Lisp, ISLISP, Racket, Scheme, SKILL, etc.
Topics may include any and all combinations of Lisp and:
* Language design and implementation
* Language integration, inter-operation and deployment
* Applications (especially commercial)
* Reflection, meta-object protocols, meta-programming
* Domain-specific languages
* Programming paradigms and environments
* Parallel and distributed computing
* Theorem proving
* Scientific computing
* Data mining
* Semantic web
0341デフォルトの名無しさん
2012/06/18(月) 05:00:59.27major influence for almost all programming languages and for all
sufficiently complex software applications.
The International Lisp Conference is a forum for the discussion of
Lisp and, in particular, the design, implementation and
application of any of the Lisp dialects. We encourage everyone
interested in Lisp to participate.
We invite high quality submissions in all areas involving Lisp
dialects and any other languages in the Lisp family, including,
but not limited to, ACL2, AutoLisp, Clojure, Common Lisp,
ECMAScript, Dylan, Emacs Lisp, ISLISP, Racket, Scheme, SKILL, etc.
Topics may include any and all combinations of Lisp and:
* Language design and implementation
* Language integration, inter-operation and deployment
* Applications (especially commercial)
* Reflection, meta-object protocols, meta-programming
* Domain-specific languages
* Programming paradigms and environments
* Parallel and distributed computing
* Theorem proving
* Scientific computing
* Data mining
* Semantic web
0342デフォルトの名無しさん
2012/06/18(月) 05:06:51.890343338
2012/06/18(月) 13:54:51.05>>339
まだ発表者を集めておられる途中という感じですね。
今後カンファレンスの題目だけでも発表していただけると
気負わず参加できそうです
>>342
Lispに関心があれば誰も厭わずという感じでしょうか
提言って意味の取り替え面白い,
Lisperはグラップラーってのは妙に説得力あります
0344uy
2012/06/19(火) 18:17:48.25それ使ってプログラム作ってる奴いるの?
0345デフォルトの名無しさん
2012/06/19(火) 22:18:39.850346uy
2012/06/19(火) 23:36:43.61いないわけね
0347デフォルトの名無しさん
2012/06/19(火) 23:49:27.06Brainfu*kでまともなもの組む奴いないだろ?
0348デフォルトの名無しさん
2012/06/19(火) 23:50:43.94自分が何をしたいのかも考えられない奴が
何を威張ってるんだろうね
0349デフォルトの名無しさん
2012/06/20(水) 02:58:29.940350SCHEME餃子 ◆8X2XSCHEME
2012/06/20(水) 07:29:59.230351デフォルトの名無しさん
2012/06/20(水) 07:41:53.270352デフォルトの名無しさん
2012/06/20(水) 10:09:51.02あなたが優しくバカの相手をしてやってください
0354デフォルトの名無しさん
2012/06/20(水) 11:01:19.02ではラムダ算法やチューリング等価の勉強でもしてみたら?
あなたの勉強が足りないだけです
0355デフォルトの名無しさん
2012/06/20(水) 11:58:15.55LLバトロワスレあたりでやってください。
0356デフォルトの名無しさん
2012/06/20(水) 12:00:41.510357デフォルトの名無しさん
2012/06/20(水) 14:10:25.53なるものを締切り前日(先週土曜)に知って
急いで論文書いたけど間に合わずにabstだけ登録した
もっと早く知りたかった
せっかく途中まで書いた論文だし
類似の雑誌とかあったら投稿したい
どの雑誌になるんだろう
0358デフォルトの名無しさん
2012/06/20(水) 15:15:22.47ttp://www.sigplan.org/Resources/Membership ここの Print Option にあるのが、
SIGPLAN の発行物。
0359デフォルトの名無しさん
2012/06/20(水) 17:04:38.36関数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は関数が定義時に局所関数が一度だけ生成される、
と思っていたのですが違いました。
上の意図のような使い分けをするための方法はあるのでしょうか?
情報をいただけるとうれしいです。
0360デフォルトの名無しさん
2012/06/20(水) 17:36:34.48読み返してみたら日本語として変でした。
「上の関数my-length1は呼び出される度に局所関数を生成し、
下の関数my-length2は定義される時に一度だけ局所関数を生成する、
と思っていたのですが違いました。 」
が、ましな日本語です。
0361デフォルトの名無しさん
2012/06/20(水) 18:14:37.24何のために必要なんでしょうか。明後日の方向に全力疾走してるように見えます。
0362デフォルトの名無しさん
2012/06/20(水) 19:00:44.16CTMCPのp.124以降に「局所手続きを使うこと」という節があります。
そのなかで以下のような(ニュートン法により根を求めるための)2つの関数がでてきます。
(もともとのコードはOzによるもので以下のものは私がLispに書き換えたものです)
CTMCPには「my-sqrt4ではimproveとgood-enough?がsqrt-iterの反復の度に生成されるが、
my-sqrt5ではそうではない」と書いてありました。
Lispではどうなっているのか?と思い、以下のコードを考えました。
しかし以下の2つのアセンブリコードは同等のものでした。
必要は特になく、ただ疑問だったので質問しました。
0363デフォルトの名無しさん
2012/06/20(水) 19:02:21.35;; ニュートン法による球根(第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))))
0364デフォルトの名無しさん
2012/06/20(水) 19:59:17.13uyのせいでバトロワスレが1000いったみたいだなw
0365デフォルトの名無しさん
2012/06/20(水) 21:19:16.67そういう話であれば、両者は本来同じ処理なのですから、
同様に効率が良いコードにコンパイルされた方が良いですよね?
なので、最近のコンパイラでは式の変換なども含めて最適化をしているそうです。
Ozについては知りませんが、何らかの事情でそういうことをしてないんでしょう。
0366デフォルトの名無しさん
2012/06/20(水) 21:38:52.62> (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の仮引数を参照するように変更
するとよいかと。
0367デフォルトの名無しさん
2012/06/21(木) 01:03:50.68「求根」が「球根」になってた。ニュートンが開発した、たまねぎ栽培法みたいだ。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))))
0369デフォルトの名無しさん
2012/06/21(木) 05:58:45.560370デフォルトの名無しさん
2012/06/21(木) 10:27:54.85http://toro.2ch.net/test/read.cgi/tech/1340242041/l50
0371デフォルトの名無しさん
2012/06/29(金) 21:28:23.83今日、またCFPが出てたよ。締切り伸びたのかな?
0372デフォルトの名無しさん
2012/06/30(土) 11:07:25.54格安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
0373デフォルトの名無しさん
2012/06/30(土) 13:06:25.13ここ10年ぐらいキャッチアップしていないから分からん
0374uy ◆pdu1UZmweE
2012/07/01(日) 01:10:12.37IFじゃないよこれ
ただ引数に応じて関数の状態が変化するひとつの関数の定義に過ぎない
Yコンビネータも同じ
引数に応じてネストの個数が変わるだけのもの
つまり応用していくとソースコードから
条件分岐とループ文がなくなることが既に証明されてるわ・・・
やってらんねーな
やはり近々プログラミングという分野は消滅するとしか思えない
ソフトウェアに限界はない、
組み合わせに限界個数はない
しかしソフトウェアに、完成はある
やっている事があまりに無駄すぎる
0375デフォルトの名無しさん
2012/07/01(日) 10:38:45.970376デフォルトの名無しさん
2012/07/08(日) 22:53:03.42やっぱググるしか無いですか
0377デフォルトの名無しさん
2012/07/09(月) 00:14:31.670378デフォルトの名無しさん
2012/07/09(月) 02:33:17.28describe 関数使ってみろ
0379デフォルトの名無しさん
2012/07/09(月) 23:09:06.34ありがとうございます
0380デフォルトの名無しさん
2012/07/11(水) 02:05:09.06Emacs等は使わず単体で使用しているのですが、
日本語を含むパス名(たとえば"P:/ソフト/test.lisp"など)が使えません。
そういうものなのでしょうか。
0381デフォルトの名無しさん
2012/07/11(水) 07:41:16.65CLISPの内部エンコーディングは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
0382デフォルトの名無しさん
2012/07/11(水) 08:14:56.05custom:*default-file-encoding*もcustom:*pathname-encoding*も標準でCP932ですね。
CLISPのコードは読んでませんが、コードページに合わせて設定してくれてるのかも。
何か別の問題でエラーが出てる気がするのですが、どういうエラーが出てるんでしょう?
0383デフォルトの名無しさん
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>になっていましたので、
これらの変数の問題ではなさそうだということですね。
0384デフォルトの名無しさん
2012/07/11(水) 12:48:26.65今気付きましたけど、「ソ」って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*などの設定が必要になるでしょうからご注意。
0385デフォルトの名無しさん
2012/07/11(水) 13:21:48.98ちょっと解決策は思い付きません。*pathname-encoding*をISO-8859-1にしても弾かれるみたいですし。
力になれずに申し訳ないです。CLISPに詳しい偉い人が来るのを期待してください。
0386デフォルトの名無しさん
2012/07/11(水) 22:20:38.26シフトJISの「\」の問題はすっかり忘れていました。
「ソフト」を「日本語」にしたら通りました。(「ソ\フト」はだめでした)
勉強用としてはフォルダやファイルの名前を注意すればなんとかなりそうですが、
それより今から他の処理系に乗り換えてもいいかもしれません。
CLISPを選んだのは、単にM.Hiroi氏のサイトで紹介されていたからという理由なので。
http://www.geocities.jp/m_hiroi/clisp/index.html
Common Lisp以外の話ですみませんが、Puttyというもの、知りませんでした。
検索するとターミナルエミュレータがでてきますがそれのことでしょうか。
また、コマンドプロンプトのかわりにもなるのでしょうか。
0387デフォルトの名無しさん
2012/07/11(水) 23:40:01.72コマンドプロンプトの使用感に満足できないので、CygwinとCygTermとPuttyを組み合わせて使ってます。
UTF-8の出力を表示できたりして便利です。最近ではより手軽に使えるMinttyというのもあります。
処理系は、Clozure CL 1.8とSteel Bank Common Lisp 1.0.52では同条件で問題なかったです。
CLISPは環境依存の問題に真面目に取り組んだのが仇になった感じですね。
0388デフォルトの名無しさん
2012/07/12(木) 00:16:44.23emacs+slimeでcommon lispのソースファイルをいじりすぐに実行するからよく分からないのですが、
ターミナルエミュレーターを使用するのはどういう場面なのでしょうか
0389デフォルトの名無しさん
2012/07/12(木) 00:30:13.36他プロセスから処理を起動したいときとか、swankをロードしないイメージを作りたいときとか、
そんなときに。UNIX系のOS使う場合はEmacsでansi-term使っちゃいますけど。
0390デフォルトの名無しさん
2012/07/12(木) 01:10:33.282007年時点だとshiftjisの5c問題にパス名が対応してみたいです。
unicodeパス名使えれば回避出来るんですけど、MBCS対応なのかな。
0391デフォルトの名無しさん
2012/07/12(木) 01:13:02.58Win7 + cygwin + CLISP + mintty(Putty派生) だけど、
(setq custom:*pathname-encoding* "utf-8")
(setq custom:*default-file-encoding* "utf-8")
(setq custom:*terminal-encoding* "utf-8")
で行けたよ。
0392デフォルトの名無しさん
2012/07/12(木) 02:06:06.53Clozure CLかSteel Bank Common Lispを試してみて、
それでもだめならコマンドプロンプト代替になるものに手を出します。
>>390
資料見てみました。
どうやらCLISPをWindowsのコマンドプロンプトから使うというのが間違いのようですね。
ちなみに日本語の入力はできました。
>>391
それがコマンドプロンプトではだめなようなのです。
皆様ありがとうございました。
またわからないことがあったら質問させていただきます。
0393デフォルトの名無しさん
2012/07/12(木) 22:26:32.36なるほど、わかりました
0394デフォルトの名無しさん
2012/07/14(土) 16:32:10.80http://cl.cddddr.org/index.cgi?%E5%87%A6%E7%90%86%E7%B3%BB%3a%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E6%89%B1%E3%81%84#H-13bc8b6tb3akm
0395デフォルトの名無しさん
2012/07/14(土) 19:03:32.550396デフォルトの名無しさん
2012/07/15(日) 15:18:00.53これはありがたい
0397デフォルトの名無しさん
2012/07/22(日) 16:59:30.83改行せずにフォーマットで指定した通りに出力させることは出来ないのでしょうか?
具体的には
(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 です
0398デフォルトの名無しさん
2012/07/22(日) 18:53:31.85(format t "~{~A ~}" tmp))
かな
0399デフォルトの名無しさん
2012/07/22(日) 19:49:57.75お〜!!うまくいきました。そんな変数があったのですね、Perlみたいです。
common lisp 自動改行 させない 等でググったのですが見つけられなかったので無理なのかなぁと思っていたところでした。
ばっちりのレスありがとうございました。
0400デフォルトの名無しさん
2012/07/22(日) 20:49:33.180401デフォルトの名無しさん
2012/07/23(月) 01:12:43.8022章への道しるべ。
clojureのdocstringにもリンクがある。
0402デフォルトの名無しさん
2012/07/23(月) 16:41:04.02(let ((data '(lexical))
(sexp '(cons "HOGE" data)))
(eval sexp))
;=> ("HOGE" GLOBAL)
なぜevalではletで定義した局所変数ではなく
setqで定義したグローバル変数が使われるのでしょうか?
0403デフォルトの名無しさん
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.
0404デフォルトの名無しさん
2012/07/23(月) 18:44:07.77レスありがとうございます。
すみません、局所変数が使われない理由が局所関数は空にして評価されるからというのはトートロジーに聞こえます。
理由が知りたいのです。
0405デフォルトの名無しさん
2012/07/23(月) 19:08:36.710406デフォルトの名無しさん
2012/07/23(月) 20:58:20.60(setq f (let ((data '(lexical))
(sexp '(cons "HOGE" data)))
(lambda () (eval sexp))))
(funcall f) => ("HOGE" LEXICAL)
とならなきゃいけないけど、それはとても非現実的な仕様。
クロージャにすべてのローカル環境を引き継がせねばならなくなっちゃう。
0407SCHEME餃子 ◆8X2XSCHEME
2012/07/23(月) 21:02:23.87グローバル変数はパッケージに登録されてて、
実行時のルックアップがし易いけど、
ローカル変数はコンパイル時に解決してしまうからじゃないかなぁ。
最適化をかけたら変数が消滅することすら有るわけで。
eval のために最適化を諦めるのも馬鹿馬鹿しいし。
0408デフォルトの名無しさん
2012/07/23(月) 21:30:06.51式を評価するごとに自然数をインクリメントしてプロンプトに表示し、
それをnというレキシカル変数で管理しているとする。
ここでもし、evalがレキシカルな束縛を参照できる場合、
nを破壊的に変更すると、プロンプトに表示される数も変わってしまい、
機能が破綻する。
こんな感じで、実用上も色々悲惨なことになる気が。
0409デフォルトの名無しさん
2012/07/23(月) 23:43:25.15> ローカル変数はコンパイル時に解決してしまうからじゃないかなぁ。
これに尽きると思う。
インタプリタだけに限るなら、そういう実装があってもいいと思うけど。
0410デフォルトの名無しさん
2012/07/24(火) 05:20:28.890411デフォルトの名無しさん
2012/07/24(火) 10:44:14.15(機械語的にはアドレスさえ判れば値を読み書きできるから名前は要らない)
名前で検索することはできないということ
0412デフォルトの名無しさん
2012/07/24(火) 11:10:03.07レキシカル環境を空にしない仕様だと、環境を全て持ち運ばないといけない。
0413デフォルトの名無しさん
2012/07/24(火) 16:10:30.93クロージャの環境持ち運びはなんとか実現できたが、
evalでのそれは難しかったのでしょうか。
0414デフォルトの名無しさん
2012/07/24(火) 16:31:06.44クロージャは#'(lambdaの特殊な形に限定されてる。
ところがevalは引数を一度評価してからevalので、
引数評価時にS式を生成することも可能で、
基本的に実行時にならないと何を参照するかわからない。
(>>402のケースは単純だから最適化する「コンパイラ」もいるだろうけど)
インタープリタの気持ちになって追ってみるか、
インタープリタを作ってみれば分かる。
0415デフォルトの名無しさん
2012/07/25(水) 15:20:15.830416デフォルトの名無しさん
2012/07/25(水) 20:27:25.820417デフォルトの名無しさん
2012/07/25(水) 22:59:13.40とかw
0418デフォルトの名無しさん
2012/07/25(水) 23:13:08.86S式さえ受け入れられれば、文法面では好き勝手できるのがLispなんだし。
0419デフォルトの名無しさん
2012/07/25(水) 23:51:54.500420デフォルトの名無しさん
2012/07/25(水) 23:58:10.160421デフォルトの名無しさん
2012/07/26(木) 08:56:01.45確か当時は、名前に使えるのが6文字まで、とかいうシステムがあったりして、
そういう省略名は今よりだいぶ一般的だったはずだと思われる。
0422デフォルトの名無しさん
2012/07/26(木) 09:03:00.370423デフォルトの名無しさん
2012/07/26(木) 19:17:23.220424デフォルトの名無しさん
2012/07/26(木) 19:27:25.300425デフォルトの名無しさん
2012/07/28(土) 13:00:02.41要素 リスト、の順だったり、リスト 要素の順だったりでわかりにくい
0426デフォルトの名無しさん
2012/07/28(土) 14:41:09.120427デフォルトの名無しさん
2012/07/29(日) 15:22:59.220428デフォルトの名無しさん
2012/07/29(日) 21:25:18.35原則t的に省略可能なものが後ろに来るんじゃなかったっけ?
0429デフォルトの名無しさん
2012/07/29(日) 23:48:36.09当方emacs+slime+sbclの環境でこの章まで読み進めてきましたので
できれば既存の環境+アルファで済むようなものがあればそれを使ってみたいのですが
何かありますか?
0430デフォルトの名無しさん
2012/07/30(月) 21:26:40.61AllegroServe は確か SBCL でも動いたと思うよ
PortableServe だったかそんな名前。
quicklisp でインストールできたは分からないけど。
0431デフォルトの名無しさん
2012/07/31(火) 08:54:30.390432デフォルトの名無しさん
2012/08/01(水) 06:20:34.660433かとう☆れいこ
2012/08/03(金) 11:13:42.84http://cl.cddddr.org/index.cgi?M-99
例にある様なtagbodyなど露骨な制御構造ではなく基本関数と再帰で書く事はできないでしょうか。
自分なりに考えて、うまくいかなかった例
下につづく
0434かとう☆れいこ
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))))) ;←不定個数の残りだけ渡すのはムリ
0435デフォルトの名無しさん
2012/08/03(金) 14:01:20.38永久ループを再起呼び出しで書いちゃダメ。
quasiquote の意味がわかってないんじゃない?
do-forever 内に do-forever を書くとマクロ展開が終わらなくなるよ。
というのは置いといて、
スタックオーバーフローしていいならこれでどう?
(defmacro do-forever (&body body)
(let ((g (gensym)))
`(block nil
(labels ((,g () (progn ,@body) (,g)))
(,g)))))
0436かとう☆れいこ
2012/08/04(土) 14:13:23.88回答ありがとうございます。
>quasiquote の意味がわかってないんじゃない?
はい、わかりません。勉強します。
もしよろしければ、quasiquote意外にも知っていた方が良いと
思われる事がありましたらURLやキーワードだけでも結構です。
教えていただけませんか。当方、入門書を読み終わった程度です。
0437デフォルトの名無しさん
2012/08/04(土) 14:53:41.26については知っておいた方が良いと思う。特にフェイズ。
参考資料はHyperSpecとかCLtL2とかくらいしか思い付かなくて申し訳ないけど。
0438デフォルトの名無しさん
2012/08/04(土) 21:22:35.78>Common Lisp は末尾呼び出しの最適化を保障してないから
知らなかった。意外だな。
これっていちばんLispらしいところだと思うんだけどどうなの?
0439デフォルトの名無しさん
2012/08/04(土) 22:58:12.26CLOSのafter method, around-methodとの相性も悪いし。
0440デフォルトの名無しさん
2012/08/05(日) 10:48:33.55(mapc #'(lambda (x) (format t "~3D~%" x)) '(267 42 8))
このようなことをするときに
~3dの3の部分を数値の桁数+1として動的に変化させる方法はありませんか?
0441デフォルトの名無しさん
2012/08/05(日) 23:40:29.160442デフォルトの名無しさん
2012/08/06(月) 07:16:14.82リストの中の一番桁が大きい値に合わせて出力を整形したいって話でいいのかな?
format詳しくないからはっきり言えないんだけど、
http://super.para.media.kyoto-u.ac.jp/~tasuku/format-func.html
http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm
流し読みした限りでは、できないように見える。
個人的には、リストを一度走査して、最大の桁数を調べてから、
その情報を利用してformatで整形するのが楽だと思う。
0443デフォルトの名無しさん
2012/08/06(月) 07:34:34.28C/C++や、あるいは、アセンブリ言語ではむずかしいけれど、
Lispならあっさり対応できる問題(なるべく実用的なのがいいです)の
典型例はなんかないでしょうか?
0444デフォルトの名無しさん
2012/08/06(月) 08:23:46.96ほとんどの分野の問題で圧勝できると思うけど、C++11は変態なので多分そこまでの差はない。
メタプログラミングの分野では一日の長があるか、って感じじゃないの。
0445443
2012/08/06(月) 09:50:41.99エレキ上がりの上司にヒト泡吹かしてやりたくて情報収集中で、
そいつが「下が分かればすべてできる」みたいな思想の持ち主なんですが、
俺のほうは「できると適切は別だボケ」と反逆心をみなぎらせているわけです
0446デフォルトの名無しさん
2012/08/06(月) 10:51:23.29まあ何か大規模なもんやらせれば?
0447デフォルトの名無しさん
2012/08/06(月) 11:17:58.050448デフォルトの名無しさん
2012/08/06(月) 11:21:29.11>俺のほうは「できると適切は別だボケ」と反逆心をみなぎらせているわけです
まさに同じ理由で上司が正しいとも言える。
コンピュータにも得手不得手があって、ハードが分かっていれば、自ずとそれが分かる。
コンピュータに苦手な方法を採用すると、実行効率が落ちるだけの結果になる。
コンピュータにとって素直な形で実装されてて、しかも表現力も有るC++に勝つのは難しい。
0450デフォルトの名無しさん
2012/08/06(月) 18:05:40.74(list a b c))
こう書いた場合、(test 10 :c 30) ; => (10 NIL 30) となるのは良いのですが、
(test :c 10) ; => (NIL NIL 10) となるようにできない理由は、(おもに実装面において) 何があるのですか?
また、(test :c 20 30) ; => (30 NIL 20) となるようにできると便利だと思うのですが…。
教えて下さい。
0451デフォルトの名無しさん
2012/08/06(月) 18:14:13.50後者は便利というより混乱の元にならないかな
0452デフォルトの名無しさん
2012/08/06(月) 22:52:38.58やはり記号処理じゃないかな。
パズルを解くとか
0453デフォルトの名無しさん
2012/08/06(月) 23:50:06.40(mapc (lambda (x) (format t "~vd~%" (+ (truncate (log x 10)) 2) x)) '(267 42 8)) ; required (plusp x)
0454デフォルトの名無しさん
2012/08/07(火) 09:24:32.79ありがとうございます。
>>453のlogと~vを使うテクニックがすぐに思いつきませんでした。
まさにこの処理をしたかったのです。
0455デフォルトの名無しさん
2012/08/07(火) 13:50:23.30CPS変換もそのほうがしやすいよね
0456デフォルトの名無しさん
2012/08/07(火) 13:53:48.07C++11はlambdaのおかしい部分が次のバージョンC++??で直れば
schemeと同等ぐらいになると思う
0458デフォルトの名無しさん
2012/08/08(水) 00:12:40.66桁の大きい数字に合わせて整形したいって話なのかと思ったのに。
0459デフォルトの名無しさん
2012/08/12(日) 05:29:49.340460デフォルトの名無しさん
2012/08/12(日) 07:08:25.200461デフォルトの名無しさん
2012/08/12(日) 20:40:13.120462デフォルトの名無しさん
2012/08/12(日) 20:48:29.80http://www.asahi-net.or.jp/~kc7k-nd/
こいつのはじめの方にlispとはなんぞや?人工知能と関係あるの?という解説があるよ。
0463デフォルトの名無しさん
2012/08/13(月) 08:12:17.950464デフォルトの名無しさん
2012/08/13(月) 14:25:51.030465デフォルトの名無しさん
2012/08/14(火) 09:19:06.420466デフォルトの名無しさん
2012/08/14(火) 16:36:31.660467デフォルトの名無しさん
2012/08/14(火) 20:40:03.84まーこんな感じですし
0468デフォルトの名無しさん
2012/08/17(金) 17:36:48.18同じシミュレーションでは常に同じランダムステートを使用して
どんな場合でも同じ結果が出るようにしたいのですが
常に同じランダムステートを得るにはどうしたらよいのでしょうか?
0469デフォルトの名無しさん
2012/08/17(金) 17:53:12.47作った乱数を保存しとけば。
0470デフォルトの名無しさん
2012/08/17(金) 18:02:56.64sb-ext:save-lisp-and-dieとか、ccl:save-applicationとかで。
0471デフォルトの名無しさん
2012/08/17(金) 18:08:32.90http://www.lispworks.com/documentation/HyperSpec/Body/22_acj.htm
にあるように、read/write invarianceは保証されているそうなので、
適当なファイルにwriteで書き込んでおいても良いかもしれない。
0472デフォルトの名無しさん
2012/08/17(金) 18:24:21.56たいしたもんを作ろうしてるわけではないんでそれでもいいんですが
大規模なのをやる時はそれだとなんかいやだなあ、と思ってます
>>471
最初にそれ試したんですが、
:SMPLOCKERなんてキーワードしらねーよって言われるんで諦めてました
外したらいけたんでそれで行きます、ありがとうございます
0473デフォルトの名無しさん
2012/08/18(土) 01:14:54.54文字列をそのまま、ダブルクォーテーション無しで出力する方法が分かりません
(format nil "~A" "Hello, World")
"Hello, World"
どうすればいいのでしょうか。
処理系はWindows7でのSBCLです
0474デフォルトの名無しさん
2012/08/18(土) 01:43:48.16Hello, World
返り値としての文字列に""がつくのはどうしようもないのでは。
0475デフォルトの名無しさん
2012/08/18(土) 07:00:59.190476デフォルトの名無しさん
2012/08/18(土) 13:51:25.56CLはよく知らないけど,通常のプログラミング環境でいう乱数は厳密には疑似乱数だよ.
疑似乱数生成器に初期パラメタとして与える乱数の種(random seed: 普通は大きな素数
が好まれる)が決まれば,その後得られる疑似乱数列は一意に決まる.
だから同じ結果を得たければ,最初に同じ乱数の種を与えるだけでいいはずだよ.
0477デフォルトの名無しさん
2012/08/18(土) 15:11:46.63その種(シード値)のことを、Common Lispではランダムステートって呼ぶのです。
http://www.lispworks.com/documentation/HyperSpec/Body/t_rnd_st.htm#random-state
で、それが規格上、どのようなオブジェクトとは決められていなくて、
ランダムステートを作るときも、任意の整数などを渡して作ることができないため、
常に同じ状態で擬似乱数生成器を動かすには多少の工夫が必要な次第です。
そういう背景からの質問だと思いますぜー。
0478横レス
2012/08/18(土) 15:40:51.06seedはstateとは違う。seedはstateの初期値のこと。
古典的な擬似乱数アルゴリズムの場合、同じ型であることが多いが。
sbclの場合は、make-random-stateで作ることが出来る。
読み書きもできるから、保存も簡単。
使われているアルゴリズムはMersenne Twister。
他の処理系は知らない。
0479デフォルトの名無しさん
2012/08/18(土) 15:50:44.27そうかい.「CLはよく知らないけど」って書いといてよかった.w
それにしてもCLだけがそんなに本質的に異なる言語だとも思えないんだけどな.
ちなみに俺も数値実験とかシミュレーションとかやっているけど,
途中の乱数をすべて保存しておかないと結果を再現できないような開発環境じゃ
とてもやる気しないぞ.
そういう処理が必要になるモデルのアルゴリズムに問題があるんじゃないの?
完全に理解不足ならお許しください.俺生粋のSchemerだから.(もう来ない)
0480横レス
2012/08/18(土) 16:06:56.77> 途中の乱数をすべて保存しておかないと結果を再現できないような開発環境じゃ
> とてもやる気しないぞ.
そんなこと誰も書いてない。
0481デフォルトの名無しさん
2012/08/18(土) 16:10:11.55writeで書き出せてreadで読めるって理解で良い?
0482デフォルトの名無しさん
2012/08/18(土) 16:16:52.460483デフォルトの名無しさん
2012/08/18(土) 16:18:08.290484デフォルトの名無しさん
2012/08/18(土) 23:07:04.91どこかでランダムステートの解説を読んだ際に、なんか違和感があるなと思ったんだが
すっきりした
0485デフォルトの名無しさん
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。
0486デフォルトの名無しさん
2012/08/20(月) 03:02:53.330487デフォルトの名無しさん
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
0488デフォルトの名無しさん
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
とか言われて失敗します。一体どうすれば?
0489デフォルトの名無しさん
2012/08/20(月) 23:03:51.13「計算機プログラムの構造と解釈」が扱ってるのはLisp処理系のうちschemeって呼ばれている物
clispはCommon Lisp処理系
どちらもLisp族だけど書籍のコードを動かしたいなら「scheme処理系」でググって使ってるOSに合う物をいれなされ
0490デフォルトの名無しさん
2012/08/20(月) 23:08:59.05apt-cache search scheme で山ほどヒットして、その中にmit-schemeとかいう一番それっぽいのがあって入れてみたらdefineのエラーが消えました!多謝!そしてさようならcommon lisp。;;
0491デフォルトの名無しさん
2012/08/21(火) 00:07:27.12ただ
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を使おうとする人もいるんだね
0492デフォルトの名無しさん
2012/08/21(火) 09:25:14.18lispの出力は
(print "obj") (prin1 "obj") (princ "obj")
printとprin1では必ずダブルクォーテーション付きでobjを出力し、さらにダブルクォーテーション付きでobjを返す
princではダブルクォーテーション無しでobjを出力し、さらにダブルクォーテーション付きでobjを返す
(format t "obj") (format NIL "obj")
formatでは書式tだと標準出力にダブルクォーテーション無しでobjを出力し、さらに評価「NIL」を返す
それ以外の書式だとダブルクォーテーション付きストリングを生成して返す
ダブルクォーテーション無し、評価無しでobjだけ出力するには自分で出力関数を書かないといけない
ということでよろしいのでしょうか?
0493デフォルトの名無しさん
2012/08/21(火) 22:41:19.25評価について何か勘違いしてる気がするよ
0494デフォルトの名無しさん
2012/08/21(火) 23:10:19.75インタプリタのREPループの外で実行すればOK
0495デフォルトの名無しさん
2012/08/21(火) 23:20:20.61基本的に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
って実行すれば出力だけ表示されるよ
0496デフォルトの名無しさん
2012/08/21(火) 23:21:22.340497デフォルトの名無しさん
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*)
肝心の置き換え(???の部分)が分かりません。どうすればいいですか
0498デフォルトの名無しさん
2012/08/22(水) 13:14:05.45対のリストを作った方がいい
'('("あ" "ア") '("ぃ" "ィ") '("い" "イ" ) ・・・
0499デフォルトの名無しさん
2012/08/22(水) 14:31:42.05(defparameter *list2* '("ア" "ィ" "イ" "ゥ" "ウ" "ェ" "エ" "ォ" "オ"))
(defparameter *list3* '("る" "く" "わ" "と" "て" "て" "ぶ" "い" "ね"))
(mapcar
(lambda (x)
(let ((rep (assoc x (mapcar #'cons *list1* *list2*) :test #'equal)))
(if rep (cdr rep) x)))
*list3*))
何回も置き換えやるなら、assoc のところちゃんと最適化したがいいと思う。
0500デフォルトの名無しさん
2012/08/22(水) 22:09:10.96ありがとうございます。分かりました!
0501デフォルトの名無しさん
2012/08/25(土) 20:04:02.29http://www.gigamonkeys.com/book/functions.html
(loop repeat (funcall fn i) do (format t "*"))
この repeat の引数の箇所と formatのところを一緒くたにする方法はありませんか?
format文字列の引数として数を与えたらその数分出力するようなものがあった気がするのですが。
0502デフォルトの名無しさん
2012/08/26(日) 05:55:13.76ちょっと苦しいけど, こんな感じ?
(format t "~v,,,'*A~%" (funcall fn i) "")
0503デフォルトの名無しさん
2012/08/26(日) 12:50:37.890504デフォルトの名無しさん
2012/08/26(日) 21:34:50.50とかでも行けるかも
0505デフォルトの名無しさん
2012/08/27(月) 00:57:53.87すっきりしていていいね
0506デフォルトの名無しさん
2012/09/04(火) 03:09:50.10WARNING! 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をソースからインストールできた方いますか?
0507デフォルトの名無しさん
2012/09/04(火) 07:55:10.71https://bugs.launchpad.net/sbcl/+bug/1012811
http://sbcl.git.sourceforge.net/git/gitweb.cgi?p=sbcl/sbcl.git;a=commitdiff;h=9ec385d7e964b5d07f2e075db4c9faa07161aca2
違ってたら申し訳ない。
0508デフォルトの名無しさん
2012/09/04(火) 08:05:11.63https://bugs.launchpad.net/sbcl/+bug/421779
https://bugs.launchpad.net/sbcl/+bug/714633
http://highmt.wordpress.com/2010/10/25/snow-leopard-%E3%81%AB-macports-%E3%81%8B%E3%82%89-sbcl-1-0-43-%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B/
この辺なのかな。何か割と古くからある問題みたいだね。
0509デフォルトの名無しさん
2012/09/04(火) 08:14:05.22すると「元に戻ることはありえない」と。
元に戻るとは、李明博大統領が竹島に来る前です。
「そこに戻ることはどんな状況になってもありえない。」
「日本は選挙をやって政権交代の可能性が高いでしょう。
韓国も大統領選挙で政権交代して、多少の歩み寄りはあるかもしれないが元に戻ることは絶対ない。」
ICJ提訴は官僚が動いています。
こいうとき官僚のいいところは動き始めたら止まらないこと。
政権が明示的に「やめろ」と言わない限りやめません。提訴されるでしょう。
日本国民の世論を考えると政権が「やめろ」と言うことはありえない。
単独提訴は確実にいくだろう。韓国政府は当然応じないでしょう。
その次どうするか。
日本は韓国が提訴に応じるまで、ひたすら圧力をかけないといけない。
島根県竹島ですよね。李明博は韓国軍の総司令官です。大統領ですから。
軍総司令官が不法に我が国の領土に入国したということは安全保障上の問題が成立しています。
安全保障上の問題が成立していたら一ついいことがあります。
いいことといったらあれですが。
例えば、日本が韓国に対して部品とか資本財をうらないとか、
あるいは輸出関税を100%、200%をかけてサムスンとか現代自動車が大打撃。
あきらかな経済制裁するのは基本的にはWTO違反。
ところが、安全保障上の場合は例外です。
ということで、韓国は通貨スワップもそうですが、
経済制裁を受けても日本側が理屈が立つ状況を作ったので
本当に後戻りできない状況になったなと思います。
http://www.youtube.com/watch?v=agWGEImnuoY#t=5m15s
0510デフォルトの名無しさん
2012/09/04(火) 15:21:41.39ありがとうございます。
試してみましたが、パッチはどうやらテストを回避するためのもので、sb-posixのインストールを可能にするものではないようです。
また、コードを見たところ、1.0.58では元々パッチに似た変更が加えられていて、インストール自体は通るようになっています。
バイナリ版のsb-posixは正常に使えるので、方法はあるはずなのですが…。
0511デフォルトの名無しさん
2012/09/06(木) 14:37:46.18反応遅くなって申し訳ない。
テストに引っかかって必要なものが正しくインストールされないのかと思ったけど、違うのかー。
それはそれとして、そのバイナリはどこから入手した物? sbcl.orgから? どこかのパッケージシステムの?
パッケージシステムでインストールしたものなら、独自のパッチをあててる可能性があるけども。
あと思い付くのは、ビルド処理に介入して、警告とかエラーが出てる部分を探ってみるとか。
うーん。こちらもMac持ってれば良かったんだけど。何かあんま力になれなくてごめんねー。
0512デフォルトの名無しさん
2012/09/07(金) 00:07:41.23親切にありがとうございます。
パッチそのものは以前のバージョンへのパッチで、1.0.58ではパッチの当てられている箇所にいくつか変更が加えられています。
そのためそもそもこちらが正しくパッチを当てられている保証もないのですが。
結果的には、このバグのない以前のバージョンを採用することで解決しました。
1.0.39まではsb-posixは正しくインストールされ、1.0.40以降になると駄目のようです。
ずっと古い版を使うわけにもいかないので、近いリリースで解決してほしいところですが。
0513デフォルトの名無しさん
2012/09/07(金) 02:40:06.85https://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
の部分を手動で修正したらいけたりしないかなー。気が向いたら試してみて。駄目ならごめん。
0514デフォルトの名無しさん
2012/09/07(金) 08:10:59.89どちらを先に読んだほうがいいですか?
0515デフォルトの名無しさん
2012/09/07(金) 18:26:51.790516デフォルトの名無しさん
2012/09/08(土) 00:39:02.55パッチのdiffのうち、修正箇所をご指摘の部分のみに限定したところ、1.0.58でsb-posix込みのインストールに成功しました。
本当にありがとうございます。
残念なのは、流れを見るかぎり、当分本家での修正はなさそうですね。どうしてなのでしょう。
0517デフォルトの名無しさん
2012/09/08(土) 01:05:16.34おー。良かった良かった。おめでとー。
多分、Mac OSの新しいバージョンだと、その辺りに変更があって、問題が発生しないんじゃないかな。
ビルド処理のバグとしてもう一度報告したら、改めて対応されることはあるかもしれない。
0518デフォルトの名無しさん
2012/09/08(土) 06:23:59.65ありがとうございました。
注意点などございますか?
0519デフォルトの名無しさん
2012/09/08(土) 06:49:56.38実用から入ると「なかなかの難問だ、ここはわたしのマクロで解決しましょう(眼鏡がキラリ)」てな感じのクールなハッカーになれる。
実践から入ると「うおおおおれとlispは最強のコンビだうおおお!!」みたいな熱いハッカーになれる。
0520デフォルトの名無しさん
2012/09/08(土) 09:41:14.87実用にはマクロがそんなに出てこなかったような気がする
0521デフォルトの名無しさん
2012/09/08(土) 11:03:47.900522デフォルトの名無しさん
2012/09/08(土) 17:24:31.810523デフォルトの名無しさん
2012/09/08(土) 20:03:39.61どっちからでも大丈夫だよ。どっちもとても良い本。
個人的には実用を勧める。確実に技術レベルというか考え方が
変わる、AIの本。実践はCLの本。
0524デフォルトの名無しさん
2012/09/08(土) 22:25:47.93実用のほうでCLについて困ることはないので内容に集中できる。
0525デフォルトの名無しさん
2012/09/09(日) 01:19:30.50ということを手っ取り早く知りたいなら、実践からの方が良い。
実践という本の存在目的がそれだし、実用に比べれば薄いから比較的素早く一巡できる。
そして、モヤモヤを抱えなくて済む。
0526デフォルトの名無しさん
2012/09/09(日) 04:56:16.810527デフォルトの名無しさん
2012/09/09(日) 09:51:01.770528デフォルトの名無しさん
2012/09/09(日) 12:48:59.370529デフォルトの名無しさん
2012/09/10(月) 01:47:18.83読むの大変ですか?
0530デフォルトの名無しさん
2012/09/10(月) 02:05:18.95むしろなにがしかの経験があった方がいい
0531デフォルトの名無しさん
2012/09/10(月) 02:27:36.37どういった経験が必要ですか?
0532デフォルトの名無しさん
2012/09/10(月) 02:52:38.49自分でプログラミングしてつまったり分からなかったりという経験
0533デフォルトの名無しさん
2012/09/10(月) 06:28:42.24おすすめ書籍てありますか?
0534デフォルトの名無しさん
2012/09/10(月) 11:35:06.29実践
0535デフォルトの名無しさん
2012/09/10(月) 23:51:31.75難しいですか?
0536デフォルトの名無しさん
2012/09/11(火) 00:04:45.14で初心者なのにOn Lisp表紙買いして撃沈して
paul grahamのAnsi Common Lisp -> 実践と読み進めた。
実践は良書
0537デフォルトの名無しさん
2012/09/11(火) 00:11:24.77Lisp初めてで実践てどうですか?
0538デフォルトの名無しさん
2012/09/11(火) 02:31:31.920539デフォルトの名無しさん
2012/09/11(火) 10:58:37.01CommonLisp なら、インタプリタや CUI のプロトタイプが
BNF とか無しで直ぐにできちゃいますよね。
0540デフォルトの名無しさん
2012/09/11(火) 17:50:55.23大丈夫だ、問題無い
0541デフォルトの名無しさん
2012/09/11(火) 18:19:14.69読むこつなどありますか?
0542デフォルトの名無しさん
2012/09/11(火) 22:25:15.36とにかく読め。そして手を動かせ
0543デフォルトの名無しさん
2012/09/11(火) 22:41:01.390544デフォルトの名無しさん
2012/09/12(水) 00:19:53.80>>543
おまえら見たいなのは、ガイ・スティールやリチャード・ストールマンとは
相容れないバカ人間だ。
二度と Lisp を語るな。
0545デフォルトの名無しさん
2012/09/12(水) 00:27:12.95あたまだいじょうぶ?
0546デフォルトの名無しさん
2012/09/12(水) 00:32:20.37酔ってる。
見直したら、悪くなかった。
許せ、542, 543
0547デフォルトの名無しさん
2012/09/12(水) 00:33:26.830548デフォルトの名無しさん
2012/09/12(水) 03:00:32.230549デフォルトの名無しさん
2012/09/12(水) 03:30:26.010550デフォルトの名無しさん
2012/09/12(水) 03:39:27.63頼む、許してくれー。
0551デフォルトの名無しさん
2012/09/12(水) 17:09:04.60読み方のコツか。
四の五の言わずにサッサと本を買ってきて本文を読め。
読んだ上でわからないことがあったら改めて質問せよ。
これ以上実際に読みもせずにウダウダ言っているのは、誰にとっての得にもならない。
以上。
0552デフォルトの名無しさん
2012/09/12(水) 21:54:43.730553デフォルトの名無しさん
2012/09/12(水) 22:44:57.31Let Over Lambdaの2.7節
0554デフォルトの名無しさん
2012/09/13(木) 00:58:13.43ありがとうございました。
0555デフォルトの名無しさん
2012/09/13(木) 03:36:43.28ありがとう
0556デフォルトの名無しさん
2012/09/13(木) 10:48:25.16そこまで強く言ってたっけ?
「主に主観的なもので、耳当ては暑苦しいからだ、読者のプログラムにはそう勧めるつもりはない」
って書いてあったような
0557デフォルトの名無しさん
2012/09/13(木) 16:34:46.320558デフォルトの名無しさん
2012/09/18(火) 02:36:39.01ありがとございます。
0559デフォルトの名無しさん
2012/09/18(火) 22:24:29.660560デフォルトの名無しさん
2012/09/19(水) 09:03:53.000561デフォルトの名無しさん
2012/09/19(水) 09:56:52.930562デフォルトの名無しさん
2012/09/19(水) 20:34:35.84生計は立ててないけど
業務で言語指定されない限りは CL つかうかな
指定されても, 使い捨てのツール類は CL だよな
ツールが生き延びる場合は, CL のコアイメージとソース渡しておしまいかな
0563デフォルトの名無しさん
2012/09/21(金) 20:09:36.13MAXIMA使っててlispの存在を知ったのですが
今後のためにlisp層に降りるべく勉強をしてます
とりあえず、「On Lisp」を読んでる最中ですが
これを理解するうえで助けになる資料がありましたら
教えていただければ幸いです
よろしくお願いします。
0564デフォルトの名無しさん
2012/09/21(金) 20:49:28.690565デフォルトの名無しさん
2012/09/21(金) 21:05:57.95参考になりました
ありがとうございます
スレ汚し失礼しました
0566デフォルトの名無しさん
2012/09/21(金) 21:17:11.59On LispはOn Lisp単独で、ひとりで黙々と読めばいい。
時間はかかるが力になるよあの本は。
0567デフォルトの名無しさん
2012/09/21(金) 21:29:54.09アホは失せろ。
0568デフォルトの名無しさん
2012/09/22(土) 18:18:11.890569ニート26
2012/09/28(金) 20:00:08.97プログラミング初級ですが、できますかね?ニート26歳高卒。
0570デフォルトの名無しさん
2012/09/28(金) 20:35:09.67Lisp Scheme Part35
http://toro.2ch.net/test/read.cgi/tech/1348018916/
0572デフォルトの名無しさん
2012/10/01(月) 01:01:29.15(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には
何も影響しない、ということでしょうか。
0573デフォルトの名無しさん
2012/10/01(月) 01:15:45.17setfの第二引数は評価されることを念頭に置いて。
0574デフォルトの名無しさん
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)))
こんな感じなことを踏まえると、仕組みが分かるんじゃないだろうか。
0575デフォルトの名無しさん
2012/10/01(月) 12:39:53.22http://saito.hatenablog.jp/entry/20090323/1237790745
0577デフォルトの名無しさん
2012/10/12(金) 02:28:41.73そのまま書いてみようとしたのですがうまく動きません
擬似コードは↓のノート中程にあります
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))
で何も値が返ってきませんでした
どこが間違っているのでしょうか
0578デフォルトの名無しさん
2012/10/12(金) 08:24:33.67指摘したい部分はいくつかあるけど、無限ループになってるのは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
0579デフォルトの名無しさん
2012/10/12(金) 09:02:14.37自分で考えたいだろうから具体的どこが間違っているかは言わないけど。
擬似コードと比べてみれば分かると思う。
というか元のノートの字の汚さにびびったよw
0580デフォルトの名無しさん
2012/10/12(金) 09:09:19.170581577
2012/10/12(金) 10:16:22.52whenを使ってしまいました。
こう書き直したら動きました。
(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)
)))
0582デフォルトの名無しさん
2012/10/12(金) 12:11:10.02良かった良かった。あと、
http://qiita.com/items/4a8bb50c85c21d5277e9
にinsertion sortの別解が出てるので、興味があったらどうぞ。
0583デフォルトの名無しさん
2012/10/12(金) 22:07:23.58ありがとうございます。ご指摘の通りです。
DO一色やLOOP一色はすごいですね。
ところで、loopに:forとありますが:を使うのが主流なのでしょうか。
0584デフォルトの名無しさん
2012/10/12(金) 22:32:09.10潔癖症の人は :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
0585デフォルトの名無しさん
2012/10/12(金) 22:38:54.72:forとかはそこまで主流じゃないけど、たまに見かけることはある、って感じかなー。
Emacsとかだと色が付くし、loopのキーワードってことが分かりやすいのが利点だと思う。
0586デフォルトの名無しさん
2012/10/12(金) 22:43:47.950587デフォルトの名無しさん
2012/10/15(月) 02:15:04.79https://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/
0588デフォルトの名無しさん
2012/10/15(月) 02:43:31.650589デフォルトの名無しさん
2012/10/15(月) 18:22:47.22google mapのルート案内にCL使うんじゃないだろうな?
0590デフォルトの名無しさん
2012/10/15(月) 18:25:30.630591デフォルトの名無しさん
2012/10/16(火) 00:29:02.470592デフォルトの名無しさん
2012/10/16(火) 01:21:21.12新規プロジェクトとかには使わないだろ
0593デフォルトの名無しさん
2012/10/16(火) 01:26:01.030594デフォルトの名無しさん
2012/10/16(火) 01:31:45.430595デフォルトの名無しさん
2012/10/16(火) 09:38:36.510596デフォルトの名無しさん
2012/10/16(火) 09:40:16.41小さいシステム構築以外は
厳しい言語仕様。
0597デフォルトの名無しさん
2012/10/19(金) 17:03:44.020598デフォルトの名無しさん
2012/10/19(金) 18:22:38.10さらに veira はアイスランド語で「ウイルス」の意味になる。
http://en.wiktionary.org/wiki/veira
0599デフォルトの名無しさん
2012/10/19(金) 21:39:32.68よく忘れるんだけど、何か対策ない?
0600デフォルトの名無しさん
2012/10/19(金) 22:46:01.720601SCHEME餃子 ◆8X2XSCHEME
2012/10/20(土) 00:39:41.130602デフォルトの名無しさん
2012/10/20(土) 03:48:30.230603デフォルトの名無しさん
2012/10/20(土) 21:08:40.47家計簿のためだけにOooを立ち上げるのがめんど
くさくなってきた。マウスに触らないといけないし。
bash上で動く単純な家計簿システムならかなり
小さくなるかな。
0604デフォルトの名無しさん
2012/10/20(土) 21:31:42.81今時は Libre じゃないの?
(家計簿 (小遣い ...) (書籍 ...) ...)
とかするんじゃねえの, lisper だったら?
0605デフォルトの名無しさん
2012/10/20(土) 21:45:51.92http://ledger-cli.org/
Common Lisp なポートもあるらし。
https://github.com/jwiegley/ledger/wiki/Ports
0606デフォルトの名無しさん
2012/10/23(火) 14:07:09.47http://dada.perl.it/shootout/craps.html
poplog common lispらしい。
0607デフォルトの名無しさん
2012/10/23(火) 20:16:41.80環境は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でも動くようなポータブルなやり方を知りたい
0608デフォルトの名無しさん
2012/10/23(火) 21:50:36.06ヒント:エラーメッセージないとエスパーにしか分からない
Quicklisp使ってるなら、わざわざrequireしないで素直に
(ql:quickload "usocket")
しなされ。マクロを使う場合は
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload "usocket"))
しなされ。Quicklispがロードされてることを確認しなされ。
詳しくなりたいならASDFとQuicklispについてググりなされ。
loadは今だと直接使うことはほぼありませぬ。
0609デフォルトの名無しさん
2012/10/23(火) 22:21:04.04ありがとうございます
common lispの仕組みを知りたかったので、それが聞きたかった答えです
quickloadしたらもうライブラリは読み込まれてるってことでいいんですかね
load やら asdf やら素人目にはやり方がいろいろあるように見えてしまいます
0610デフォルトの名無しさん
2012/10/23(火) 22:38:55.21open→fopen, ソケット→xmlhttprequest→jQueryみたいなもん。
0611デフォルトの名無しさん
2012/10/23(火) 22:39:59.85ASDFはビルドツール。多言語のmakeやRake、Apache Mavenに相当。
loadはCommon Lispの言語の機能。指定したファイルを読み込む関数。
QuicklispはASDFを利用して作られ、ASDFはloadを利用して作られている。
0612デフォルトの名無しさん
2012/10/23(火) 22:40:59.010613デフォルトの名無しさん
2012/10/23(火) 22:43:18.96CPANも、cpanと書いた方がCPANシェルと分かりやすいと思う。
CPANはアーカイブの名前だから。
0614デフォルトの名無しさん
2012/10/23(火) 22:47:31.93ql:quickloadとかのフロントエンドとか全部ひっくるめてQuicklisp。
0615デフォルトの名無しさん
2012/10/24(水) 23:15:54.63他の言語でのimportみたいなのは
loadを使うのが一般的なんですか?
ql:quickloadですか?
0616デフォルトの名無しさん
2012/10/25(木) 13:24:05.95608を理解できるまで読んで
0617デフォルトの名無しさん
2012/10/25(木) 17:31:15.87importっていうと、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に対応させます。
手動でコンパイルしたり依存関係の面倒をみるのは面倒ですから。
0618デフォルトの名無しさん
2012/10/25(木) 17:50:52.11パッケージとシンボルって呼ばれるものの組み合わせですね。
名前空間全体を取り込む場合はcl:use-package、一部を取り込む場合はcl:importを使います。
そういうパッケージを作る場合は、cl:defpackageの中で:useや:import-fromを使う場合が多いです。
名前空間に関しては、プリフィックスを省略せずに書くスタイルの人や、
気にせずどんどんuse-packageしていくスタイルの人など十人十色な感じです。
詳しくは、
http://weitz.de/packages.html
辺りを読むと良いんじゃないでしょうか。
0619デフォルトの名無しさん
2012/10/27(土) 14:17:56.73http://weitz.de/packages.html
参考になった。誰か日本語に訳して広めるべき。
0620デフォルトの名無しさん
2012/10/27(土) 14:21:51.230621デフォルトの名無しさん
2012/10/28(日) 10:48:35.24なるほど。ありがとうございました。
イメージがつかめてきた。
0622デフォルトの名無しさん
2012/11/04(日) 18:38:57.51将来性あるのかな?
0623デフォルトの名無しさん
2012/11/04(日) 21:05:05.57開発者自身が、社内である種のプロトタイピングに使った事例はあるみたい。
http://d.hatena.ne.jp/nitro_idiot/20120323/1332516342
最近は外国の人にも徐々に認知されてきた印象があるけど、将来性はどうだろう。
Hunchentoot以外にも有力なウェブサーバが色々出てきたら評価上がるとは思う。
0624デフォルトの名無しさん
2012/11/04(日) 23:11:52.85基本的に組み込み物が多いんで、
lisp でHTML 吐き出す
parrenscript で javascrip 作る
あとは, XMLHttpRequestだけで処理が普通なんだけど...
0625デフォルトの名無しさん
2012/11/05(月) 01:18:55.27http://d.hatena.ne.jp/nitro_idiot/20121027/1351317589
ウェブサーバ間でのAPIの違いを吸収して移植性を高めるのと、
再利用しやすい拡張方法を提供するのが特徴って感じだと思う。
この上にアプリケーションを構築すると、ウェブサーバの切り替えや、
作った機能の再利用がしやすいですよ、っていう物だと理解してる。
0626デフォルトの名無しさん
2012/11/05(月) 09:38:15.430627デフォルトの名無しさん
2012/11/05(月) 15:22:30.10Oracleうざいから、GPLうざいから、って感じの似たような話は割とあったりするしな。
0628デフォルトの名無しさん
2012/11/06(火) 00:47:00.86すれ違い十人十色なインタビューでもどぞー。
0629デフォルトの名無しさん
2012/11/06(火) 19:59:00.15screen、detachtty、save-lisp-and-die、sb-daemonとかあったけど
ぶっちゃけおすすめはどれ?
0630デフォルトの名無しさん
2012/11/07(水) 00:04:18.21Allegro CL 9.0 FREE EXPRESS Edition- Now Available!
0631デフォルトの名無しさん
2012/11/11(日) 16:48:23.23lispbuilder+win+sbclでguiアプリをつくってるんですけど、
exeにして起動するとプロンプト?が出るのですが、
これを非表示にしたいですのですがどうすればよいでしょうか?
0632デフォルトの名無しさん
2012/11/11(日) 17:42:09.89コマンドプロンプトのこと? ちゃんとドキュメントの通りにやってる?
http://code.google.com/p/lispbuilder/wiki/StandAloneExecutables
特にsave-lisp-and-dieの:toplevel引数の部分。
0633デフォルトの名無しさん
2012/11/11(日) 20:43:27.690634デフォルトの名無しさん
2012/11/11(日) 21:40:46.36他の言語じゃなくてあえてcommon lispを選ぶ理由も。
0635デフォルトの名無しさん
2012/11/11(日) 22:22:56.20動向をRSSリーダとかで追っかけると、他の人が何を今書いてたり、
何に興味持ってるかをお手軽に知ることができて割と面白いと思うよ。
少なくとも自分は楽しい。
あとredditとか。
LISP
http://ja.reddit.com/r/lisp/
LISP ja
http://ja.reddit.com/r/lisp_ja/
0636デフォルトの名無しさん
2012/11/12(月) 13:03:10.240637デフォルトの名無しさん
2012/11/12(月) 13:40:52.9610月にサイト分けしたらしい
0638デフォルトの名無しさん
2012/11/12(月) 16:14:17.65使っている側から言わせて貰うが、どうして使わないと決めつけられるんだ?
0639デフォルトの名無しさん
2012/11/12(月) 19:06:10.62相手にすんな
0640デフォルトの名無しさん
2012/11/12(月) 21:07:22.890641デフォルトの名無しさん
2012/11/13(火) 15:56:39.43paredit-modeすげー
0642デフォルトの名無しさん
2012/11/13(火) 20:23:34.86何を云ってるんだ?
C に輪をかけたあの変態構文に C++11 の変態構文まで加わってるんだ,
キチガイ沙汰じゃないほうがおかしいだろ?
0643デフォルトの名無しさん
2012/11/13(火) 20:26:33.21知らなかった
3q
0644デフォルトの名無しさん
2012/11/14(水) 01:26:36.93> 皆さんlispで普段何するプログラムを書いてるんですか?(仕事以外で)
Podcastをwgetで落とすshスクリプトの方をイメージしちゃったのでLinux + emacsで書いちゃった。
自分のSBCLのボキャブラリーが少ないし、使える時間を割いてその数時間を費やして
ボキャブラリーを補完できずに、スクリプトが完成しない率が多い。
wgetに類する関数を覚えなくても、CL上でwgetコマンドを使えれば満足するんだけどね。
後日、wgetに類する関数を覚えて、修正版をできれば良いわけだし。
ちょっとしたスクリプトもCLで書くようにしないと覚えないかな。
非プログラマなんだけど、実用言語のGaucheに浮気しない方が良いよね?
ドキュメントとかが使いやすいGaucheだったら書けそうな気がするんだけど。
0645デフォルトの名無しさん
2012/11/14(水) 19:24:11.150646644
2012/11/14(水) 21:22:10.31> それは暗に肛門lispをディスってるんですか?
黄門Lisp?
アナルLisp?
ディスっていないよ。
Podcastスクリプトの機能拡張で数字→N進数、N進数→数字変換器等を作りたい
んだけど、それ関連でshスクリプトを書くために調べるのが馬鹿らしくなって
きた。調べれば具現化できるんだろうけど、shだとスマートじゃないし、あと
あとCLで使いまわしたい機能・知識なんだよね。
0647デフォルトの名無しさん
2012/11/14(水) 21:41:11.19S式をGraphVizのソースに変換するトランスレータと
出力のグラフ上を飛び回る強盗エイリアンを探しだし射殺するゲームでした
それはS式と高階関数の強力さを実感させてくれる素晴らしいものでした
そんな私も今ではどうぶつの森に夢中
なぜなら彼もまた特別な存在だからです
0648デフォルトの名無しさん
2012/11/14(水) 22:05:26.700649デフォルトの名無しさん
2012/11/15(木) 00:41:25.42parse-integer、format、digit-char-p、digit-char
0650デフォルトの名無しさん
2012/11/15(木) 01:38:26.00> 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進数も変換できるとうれしいです。
0651デフォルトの名無しさん
2012/11/15(木) 13:23:56.24(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))))
0652デフォルトの名無しさん
2012/11/15(木) 18:22:44.04すばらしい。
こうやって書くんですね。
読解してみます。
0653デフォルトの名無しさん
2012/11/17(土) 23:11:24.41http://emacswiki.org/emacs/PareditCheatsheet
0654デフォルトの名無しさん
2012/11/18(日) 03:02:49.480655デフォルトの名無しさん
2012/11/18(日) 09:36:30.55http://sitearo.com/cocoa/0800_internet/curl/
0656デフォルトの名無しさん
2012/11/18(日) 21:05:31.51bashだとhttpはワイルドカード使えないんだね。
腐った環境でzshをインストールできなかったんだけど、
zshだと簡単にこういったことができると言われているよね。
あとbashでlisp ero.lisp http://lisp.ero.lisp/eroero/ erojpg [0123][0123456789] .jpg
みたいな表現できるのかな。
0657デフォルトの名無しさん
2012/11/18(日) 21:12:21.72つか、どお見てもうに甚のあのスレに対する誤爆だと思うんだが…
0658デフォルトの名無しさん
2012/11/18(日) 22:06:15.39style-warning: undefined function: WITH-GENSYMS
になりす。
関数が無いのはなぜなんでしょうか?
0659デフォルトの名無しさん
2012/11/18(日) 22:08:53.49ん?それは標準のマクロじゃないから、どっかからとってくるか何かしないと使えないよ
0660デフォルトの名無しさん
2012/11/19(月) 06:47:56.63再帰で関連リンクも自動でたどるんだ
sxpathあたりを駆使するんだ
0661デフォルトの名無しさん
2012/11/19(月) 09:34:11.90http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30890&forum=10
bashの場合だとコマンドに渡す前にワイルドカードとして評価されてるのかも。
クォートかエスケープすると動くかな?
sh/bashは決まった動きをするのでシェルスクリプト向けに必要だけど、こういうところはzshのが直感的でいいね。
0662デフォルトの名無しさん
2012/11/19(月) 10:49:11.080663デフォルトの名無しさん
2012/11/19(月) 18:58:57.84そうなんですか ありがとうございます
0664デフォルトの名無しさん
2012/11/27(火) 11:02:58.72(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が茶帯ぐらいになってきたかも。
0665デフォルトの名無しさん
2012/11/27(火) 13:03:02.01(loop :for i :in '(1 2 3 4 5) :if (evenp i) :collect i)
みたいにloop内の構文シンボルをキーワードシンボルで書くのって少数派?
エディタのハイライトで色がつくから、見やすくていいんだけど。
あと、ここでキーワードシンボル使うと、どっか他の部分でデメリットとかある?
0666デフォルトの名無しさん
2012/11/27(火) 16:34:59.30ちょっと前にも同じような質問があったと思うけど。
自分で使ってる名前空間でインターンされるのが嫌な場合は
キーワードで書けば良いんじゃないの。デメリットは特にないと思う。
0667デフォルトの名無しさん
2012/11/27(火) 22:22:56.78:forじゃなくてfor表記の方が多いきがする
インターンの現象をデメリットだと執筆者は思っていないのかも
0668デフォルトの名無しさん
2012/12/01(土) 13:11:49.500669デフォルトの名無しさん
2012/12/02(日) 17:59:58.47そこでclikiのFFIのページを見てみました。
http://www.cliki.net/FFI
色々あるようなのですが、今から始めるならどれがよいでしょうか。
CLの処理系としてはFreeBSD上で
Allegro CL Free Express Edition8.2を主に使っています。
SBCLを使う事もあります。
0670デフォルトの名無しさん
2012/12/03(月) 16:19:47.02確か再帰的に走査するのはなかったはず。自分で書くしかないと思う。
>>669
http://cl.cddddr.org/index.cgi?CFFI
今だとCFFIがデファクトスタンダードな感じ。用途によってはSWIG使うと楽だよー。
0671669
2012/12/03(月) 18:30:09.84SWINGなんてのがあるんですね
早速勉強してみます
0672デフォルトの名無しさん
2012/12/03(月) 18:36:42.840673デフォルトの名無しさん
2012/12/04(火) 00:34:42.19また一部のマニアだけで盛り上がるトークセッションをやるのかね。
0675デフォルトの名無しさん
2012/12/04(火) 01:48:30.660676デフォルトの名無しさん
2012/12/04(火) 02:50:48.52> また一部のマニアだけで盛り上がるトークセッションをやるのかね。
自分のトークセッション観と称して要望メールを出せばいいんじゃないの。
トークセッション観がまだ未熟なら随時出せば良い。
0677デフォルトの名無しさん
2012/12/04(火) 12:37:13.22ぶっちゃけいちゃもんを付けたいだけ。
0678デフォルトの名無しさん
2012/12/04(火) 16:12:42.24がんばって、生きろ
0679デフォルトの名無しさん
2012/12/04(火) 16:16:23.670680デフォルトの名無しさん
2012/12/07(金) 14:06:49.370681デフォルトの名無しさん
2012/12/07(金) 14:07:31.630682デフォルトの名無しさん
2012/12/07(金) 21:31:25.940683デフォルトの名無しさん
2012/12/07(金) 23:01:55.510684デフォルトの名無しさん
2012/12/07(金) 23:19:13.230685デフォルトの名無しさん
2012/12/08(土) 01:33:03.720686デフォルトの名無しさん
2012/12/10(月) 19:26:43.27(プライベート)スクリプトを公開とか、やらないかな。
その小説家は公開されると分かっていて、仕事しているだろうし、死後に
取捨選択・管理する役目を受ける人も決まっていそうだ。
ファンの要望に応えて、第二弾の公開。以下、ループ。
死後に評価される人もいるのかな。
0687デフォルトの名無しさん
2012/12/11(火) 21:32:53.89いいと思うわそれ
0688デフォルトの名無しさん
2012/12/15(土) 10:00:16.73まとめる人に相当の技量が必要になるから、
難しいんじゃないかな。
0689デフォルトの名無しさん
2012/12/15(土) 15:02:39.41> まとめる人に相当の技量が必要になるから、
> 難しいんじゃないかな。
引き受ける人が任せた人が死ぬ前に死後に読み込む環境(*0)を整えるために
打ち合わせすることは可能だろうし、引き受けた人は高度なプログラムを
書ける必要はないけど、プログラムは読めないとダメだね。
大雑把に取捨選択して、高度なプログラムを評価できる専門家にそれを評価
してもらえばいい。そして引き受けた人が法的な権利関係もある程度(*1)把握
できていればいい。
あと全部精読する必要はないけど、流し読みはしないとダメなんだろうな。
量がいっぱいあるなら、何弾回かに分けるつもりでとりあえず当たりをつけて
手づかみした部分だけを解析して公開して、反響の度合いで解析量を増やす
感じになるのかな。
*0 独自の略語とか、暗号とか、ルールとか。
*1 どこに問い合わせればいいとか、どこに頼めば法的部分をクリアするとかを
知っている程度。
0690デフォルトの名無しさん
2012/12/15(土) 19:36:36.99自分専用でUIが無茶だったり公序良俗によろしくないとかで何かしら問題あるんからなんだが、
小説家のノートの場合そういうのどう解決してるんだろう
0691デフォルトの名無しさん
2012/12/16(日) 03:21:00.4290.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できると便利。
0692デフォルトの名無しさん
2012/12/16(日) 11:19:18.04> $./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 はゲームしかやらないのでどうなってるかしらない.
0693デフォルトの名無しさん
2012/12/16(日) 13:29:22.60外部から任意のソート順序を与えられる sort を sbcl で作る、というのなら結構嬉しいかも。
集合の反転は考えずに、[]内に出現しなかった文字は後ろに通常どおり辞書順にくっつけばいいよね。
リストにある文字列の集合を並び替えられると、コマンドラインツールとしても通常の関数としても使えるから便利そう。
sort用DSLからpredicateの作成。 既にありそうな気がするけど、どうなんだろ?
rsync の例は xargs でなんとかなる問題なのかな?
0694デフォルトの名無しさん
2012/12/16(日) 14:42:14.72rsync --quiet
0695デフォルトの名無しさん
2012/12/16(日) 16:34:28.40してああしてこうすれば具現化できそうだよなあって思考していた方が
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
こう書けるんだね。
0696デフォルトの名無しさん
2012/12/16(日) 18:21:29.84それだと, 91,90,80,70,68,60 にならないか?
>>695
> > 上の例だと[!987z-a6Y-B0]とかで文字クラス反転された場合の解釈は?
> 反転ってどういう意味?
[987z-a6Y-B0]に含まれない文字の集合
[] 内の先頭が ! または ^ の場合, 続く文字クラスに含まれない文字クラスを示す
0697デフォルトの名無しさん
2012/12/16(日) 20:35:27.690698SCHEME餃子 ◆8X2XSCHEME
2012/12/16(日) 21:20:39.590699デフォルトの名無しさん
2012/12/16(日) 22:37:19.77ごめん。投稿前に反転と予想して確認したんだけど、結果を見間違っていた
みたいだ。
>>651のように記号も含めて独自の文字テーブルを作って、その文字の集合を
反転ということなのかな。
独自テーブルは(loop :for i :to 130 :collect (code-char i))で出てくる
0-9A-Za-z -~で、記号はコードの昇順にする。
やる気はないけど、簡単にテーブルを作れるならひらがな・カタカナ・漢字って
やっても良いかな。grepの[:alnum:]みたいに[:hiragana:], [:katakana:],
[:kanji:]って表記はgrep拡張で便利なのかな?
実際に必要性ないとポイントが見えないし、作る気しないね。キッチリ作る人は
偉い。
0700デフォルトの名無しさん
2012/12/17(月) 02:19:30.92ファイル名の扱いが問題. 結果は文字列にしかならないから,
うまくクオートした形で結果を表示しないと色々と問題が…
# Unix 的にはファイル名として禁止されている文字は '/' と '\0' だけだ
>>699
> grepの[:alnum:]みたいに
真面目にやるなら, posix 的には grep の [:xxxx:] は必須
grep の [...] の定義と同じもの + '!' でも反転が求められている
(歴史的な事情, grep の '^' のほうが後から?)
> [:hiragana:], [:katakana:],[:kanji:]
unnicode 的にはもっと細かい区分を考えないとまずそう
0701デフォルトの名無しさん
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関数 に渡すだけで
リスト内の文字列の昇順降順を自在に操ることができそうなんだけど、どうかな?
0702デフォルトの名無しさん
2012/12/17(月) 08:24:25.83多くの人にとってあまりない気がする。マッチングとかと違って。
0703デフォルトの名無しさん
2012/12/17(月) 08:35:30.540704デフォルトの名無しさん
2012/12/17(月) 09:07:25.710705デフォルトの名無しさん
2012/12/17(月) 15:05:17.07むしろそういうソート条件のGenericな表記方法ってのを発明するのが楽しそう
あんまり自分は必要ないけど(特殊なときは泣きながら並べるw)
0706SCHEME餃子 ◆8X2XSCHEME
2012/12/17(月) 15:17:30.230707デフォルトの名無しさん
2012/12/17(月) 16:22:11.570708デフォルトの名無しさん
2012/12/17(月) 16:23:47.100709デフォルトの名無しさん
2012/12/17(月) 19:25:31.68改めての文字列の昇順降順に興味ないけど、そんなに難しいことなの?
おおむね昇順・降順ができて、動けばいいや。難しいならあきらめるし。
>>705
具体的に泣きながら並べる例ってどういうのですか?
0710SCHEME餃子 ◆8X2XSCHEME
2012/12/17(月) 21:00:53.33Windows のエクスプローラだと 1 5 10 になってくれるよね。
漢数字も理解して欲しいもんだ。
0711デフォルトの名無しさん
2012/12/17(月) 22:29:28.91いいアイデアだと思うんだけど, 日頃使ってるものと似てるようで別の制約
付けられると結構ストレスになると思うんだ
<なんとか>sort [<ソート順引数>...] [<シェルの展開したパスリスト>]
だとかなら, まだ許せるんだけど, そのあたりをどう設計するかだと思う
# おいらの特有の現象かも知れないけど…
# CL-ANNOT みたく, ここだけ lisp 書式じゃなくななるのは体が拒否する
# もう少し, 今までの表記法と親和性のある方法だってあっただろうに
どうせ作るなら, Unix 分化とかけ離れない表づらをしていて欲しい
そうしたほうが, おそらくたくさんの人に使ってもらえるだろうとも思う
たとえば, Unix の find って, 完全に他のコマンドとは別の文法持ってるよね?
でも, なんとか他のコマンドとの整合性を取ろうとしてるじゃん
# dd は, 完全に別文化から来たものだから仕方ないんだけど…
0712デフォルトの名無しさん
2012/12/17(月) 22:51:24.57whereのマクロ化による効能に早速ビリビリきました
0713デフォルトの名無しさん
2012/12/18(火) 00:06:14.65XPだと1 10 5だったような。
下品なのかもしれないけど、(裏でやっていいなら裏で)100001 100005 100010
とやるのはダメなの?
コンピュータ上での数字文字の理解ってこういうもんだと思っていたんだけど。
"1 ", "10 ", "5 "とコンピュータが理解しているのは逆にありがたいんだが。
0714デフォルトの名無しさん
2012/12/18(火) 07:24:02.41bucket-sort.lisp --bucket bucket-fn-1 sortfn-1 --bucket bucket-fn-2 sort-fn-2 ... target ...
みたいな感じで、場合分け関数と、それを満たした要素の集合をソートするための関数の対を引数にしてやる。
で、関数の名前はLISPの任意の関数を指定できて、--load pred.lispとかでさらに追加できる、とか。
0715デフォルトの名無しさん
2012/12/19(水) 11:58:01.35そんなに使うもの?
0716デフォルトの名無しさん
2012/12/20(木) 20:54:02.91&optや&restや変数スコープなどについて。
端的な具体例を示すのが上手だなと思います。
(defparameter *fn*
(let ((count 0))
(list
#'(lambda () (incf count))
#'(lambda () (decf count))
#'(lambda () count))))
0717デフォルトの名無しさん
2012/12/21(金) 21:43:47.16Lispプログラマは自分のコードの共通のパターンを見つけたら、自分自信でそのパターンをソースレベルで抽象化出来る。
Javaプログラマは、同じようにパターンを発見しても、その抽象化を言語に追加する価値があるとSunを納得させる必要がある。
うまく納得させることができたら、次はSunはJSRを発行してすべてを見当しつくすための「専門家集団」を産業界から広く収拾
しなければならない。この過程は、Sunによると平均で18ヶ月かかる。その後でコンパイラ製作者は新機能をサポートするように
コンパイラをアップグレードさせる。そして、Javaプログラマ好みのコンパイラが新しいバージョンのJavaをサポートしたとしても、
まだ新しい機能を使うことはできない。古いバージョンのJavaとの間でソースレベルの互換性を壊す許可が出るまでは。
Common Lispプログラマが5分以内に解決できるような苛立ちが、長年に渡ってJavaプログラマを苦しめることになる。
面白いww
0718デフォルトの名無しさん
2012/12/21(金) 22:03:58.30LISPに比べるとかなり早いような気がするがどうか
0719デフォルトの名無しさん
2012/12/21(金) 22:19:43.41日記代わりに使うなら誤変換とか誤用とかに気をつけながら書けば
少なくとも自分のためにはなるぞ
0720デフォルトの名無しさん
2012/12/22(土) 19:37:07.225th session「研究してみたマッドネス」
座長:デカこな(コメントアート研究会)、永井美智子(株式会社ドワンゴ)
審査員:栗原一貴(産業技術総合研究所)、塚田浩二(科学技術振興機構 さきがけ)
ttp://live.nicovideo.jp/watch/lv118857295
超IMEが大賞だって
超IMEとはチャット(2ch向けっぽい)で書く・ググる・流通しているベタ画像等を
表現力豊かにできるようにしてすべてをIMEですべてやってしまおうという
システムなんだとさ。
Emacsを知っている立場からするとコメントの反応がすごく良くて逆に驚いた。
Emacsで自明なことを再パッケージすることで日本向けならかなり需要はある
かもしれない。
0721デフォルトの名無しさん
2012/12/22(土) 20:16:59.25どこぞかにあるかも知れない, emacs スレとか elisp スレでやってくれ
まぁ, 誤爆だとは思うが…
0722デフォルトの名無しさん
2012/12/22(土) 21:31:46.57マクロに慣れ親しむためdo-primesというマクロを作ってみて、その漏れ(多重評価やgensym関連)を
修正する過程は、On Lispにおけるforのその過程を踏襲しているようだ。
once-onlyマクロの定義を一目見て笑いました。
次回読み解こうと思います。
0723デフォルトの名無しさん
2012/12/23(日) 11:12:24.54良かったらAlexandriaのonce-onlyも参考にどうぞ。
http://common-lisp.net/gitweb?p=projects/alexandria/alexandria.git;a=blob;f=macros.lisp;h=44504355fbc462c75550d9783305b1229fad3354;hb=HEAD;js=1
0724デフォルトの名無しさん
2012/12/24(月) 16:26:36.590725デフォルトの名無しさん
2012/12/24(月) 16:45:27.50漠然とし過ぎ。
OSは何?
0726デフォルトの名無しさん
2012/12/24(月) 16:51:51.83自分はLinux(arch)です。
0727デフォルトの名無しさん
2012/12/25(火) 11:08:53.01がっつりはOpenGLで自前
Franzが安いならなーとおもわんでもない
0728デフォルトの名無しさん
2012/12/25(火) 15:17:34.19組み込みでもない限り, ブラウザに丸投げ何じゃないか, 普通は?
0729デフォルトの名無しさん
2012/12/25(火) 19:25:40.78(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秒の精度の設定が自身ができてを使えると評価する。
0730デフォルトの名無しさん
2012/12/25(火) 20:21:52.58> (a)同士だったら、マクロとか、関数とか、コードも含めて超狭義のUIなんだ
> よね?
それって、普通、APIとか言わない?
ユーザーインターフェースって言うのは、
「プログラム内部の問題ではなく、動作している何らかの物[1]と人間の
インタラクション部分のことをさす」
言葉だと思っているんだが?
[1] 何らかの物はソフトであってもハードであっても構わない
> (n)はデジタルウォッチやウォシュレットを説明書ありで日常に忙殺されながら
> ちゃんと使えるか、疑問だ。
おそらくウォシュレットの方が早く使えるようになる。
デジタルウォッチは個人的には今でも馴染めない。
針のある時計ってのは一種の計算尺。
つか、いちいち引き算するのはめんどくさい。
デジタル時計ってのは、後何分で何時って感覚が希薄になるような気がする
0731SCHEME餃子 ◆8X2XSCHEME
2012/12/25(火) 21:48:06.93「人間」が関数やら何やらを呼出すことだってあるんじゃね?
プログラムが呼出すように設計された関数 (マクロ) 群は API で、
人間が直接呼出すことを想定したら (それがただの関数やマクロでも) UI だと思う。
つまり、ユーザが Liper かどうかよりもそのコードが想定する用途によってどこが UI といえるかが変わってくると思う。
0732デフォルトの名無しさん
2012/12/25(火) 22:21:41.860733デフォルトの名無しさん
2012/12/25(火) 22:43:12.85> 「人間」が関数やら何やらを呼出すことだってあるんじゃね?
呼び出す関数やマクロの仕様はどうでもよくて, 呼び出し方法が UI なんじゃね?
shell の history 機能とか readline とか emacs の minibuffer とか
dired とか vi 系のキー割り当てとか ex コマンド呼び出しの方法とか...
機能的に異なっているものを, どれだけ統一がとれた方法で user に提示てきるか?
が UI の良し悪しを決定するし, 設計者のセンスが問われる部分なわけでしょ?
呼び出す関数やマクロの仕様が上で書いたことを左右する部分は大きいと思うけど
個々の関数やマクロの仕様は UI とは呼ばないんじゃね?
0734デフォルトの名無しさん
2012/12/26(水) 03:56:07.80全景スケッチ、使えるじゃん。
前書き(嫌後書き)と称して書かれていることは買って読ませる気ゼロだし、
付録について触れられていないし、追加してのの17章はやりたいことが
見えてこないし、読ませたいターゲット層が見えてこないんだよな。
付録はゴーストライターが書いたのかな。加筆された注釈とも微妙に雰囲気が
違うんだよな。注釈でもリンクがされていないようだし。
LISP再入門 or 基礎固めと称して付録を0章にして基礎の本質を伝えることを
主眼に置いた注釈にして、注釈の大幅加筆分を入れると17章は要らないことに
なる。他人が書いた物に注釈をつけているわけではないんだから、思いっきり
書けると思うんだけどねー。
一応、原書は古い時代の物ではあるが入門書の体をなしているんだから
タイトルは入門者向けと称していいし、日本語のLISP本が枯渇しているん
だからLisperは前書きぐらい読むでしょ。
0735デフォルトの名無しさん
2012/12/26(水) 09:13:50.37少し高いけどわかりやすいね。
0736デフォルトの名無しさん
2012/12/26(水) 14:39:10.32emacs+SLIME環境はGUIですって事だわなw
自分の開発環境だとまさにそんな感じだし。
それでも違和感あるなぁ
allegro common lispってなんで値段書いてないの?>>日本語サイト
あれのUIライブラリ環境すごいと思うけどご相談以外に購入方法無いとか売る気ないとしか
0737デフォルトの名無しさん
2012/12/26(水) 14:44:13.92>allegro common lispってなんで値段書いてないの?>>日本語サイト
法人向けパッケージとかサービス販売では多いよ。
箱売り以外にも、支援見積りなどもある。
0738デフォルトの名無しさん
2012/12/26(水) 15:46:17.03メールで応談ってところにメールして確認すればよいのかな?
売り物のruntimeライセンスとかすごく細かいので、手出すのがおっくうなんだよね。
年開けたら相談メールだしてみる事にします。
0739デフォルトの名無しさん
2012/12/27(木) 09:24:27.41それはhunchentootなどを使って、ということですか?
>>727
Tkとかいくつか利用できるGUIがあるようですけど
どれもメンテされていないのが残念なんですよね。。
0740SCHEME餃子 ◆8X2XSCHEME
2012/12/27(木) 09:35:56.71Tk は今年に入ってからもリリースされてるし、積極的にメンテナンスされてる。
Common Lisp から Tk を使うためのライブラリ (バインディング) がってことかな?
Tk はごく簡単な API で操作できるのであらためてライブラリに頼るほどでもないと思うよ。
0741デフォルトの名無しさん
2012/12/27(木) 11:19:40.20そうなんですか!
食わず嫌いでした。まずは安心して試してみます。
教えてくださりありがとうございました。
0742デフォルトの名無しさん
2012/12/27(木) 11:27:56.31と言っても仕方ないが
0743SCHEME餃子 ◆8X2XSCHEME
2012/12/27(木) 12:07:11.530744デフォルトの名無しさん
2012/12/27(木) 15:36:09.72あと、CommonQtとかgtk-cffi辺りはそんなに放置されてないと思う。
Windowsの話ならDoorsとかは確かに放置されてるかもしれない。
ただまあ、今時旧来のGUIツールキット頑張ってメンテしても報われんよね。
バックエンドだけCLで書いてブラウザにUIは任せた方が遙かに楽。
0745デフォルトの名無しさん
2012/12/27(木) 17:05:44.42これちょっと興味ある
0746デフォルトの名無しさん
2012/12/27(木) 19:40:32.92> それはhunchentootなどを使って、ということですか?
何でもいいんじゃね?
CGI系だと起動までの時間がもったいないので、それなりの細工はするけど
fast CGI 系だと, 素から作っても半日かかんないだろ?
0747746
2012/12/27(木) 19:48:24.62> fast CGI 系だと, 素から作っても半日かかんないだろ?
言っとくけど, 内部と fast CGI の糊の部分だけの話だ
0748デフォルトの名無しさん
2012/12/27(木) 20:00:19.82> バックエンドだけCLで書いてブラウザにUIは任せた方が遙かに楽。
バックエンドCLじゃなくていいので、ブラウザでUIってどういうのを指して
いますか?
3枚ぐらい画像のリンクを頂けないでしょうか。
あともっと高度な物を望むならjavascriptを使って、Gmail、Google+みたいなヤツですか?
javascriptを使ってもあの程度だとUIの機能として満たされないことが多く
ないですか?
GUIに行くならGUIの良さがありますよね。激安サーバにCLが乗っていないと
いうのもありますし、(自宅)Web鯖を立ててセキュリティまでやるのもローカル
のみのサービスなら良いですが公開となると格段とレベルが上がりませんか?
使う人の幅を狭めますが、ブラウザでUIよりはCUIの方がもっと表現力が豊か
だし、サーバアプリも書いて運用した方がネットセキュリティの手間が少ないと
見積もっているんですが。
あとあとそのアプリを使うもっとも推奨のWebブラウザは何なんですか?
0749デフォルトの名無しさん
2012/12/27(木) 22:10:02.67http://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とか無理だし。
0750SCHEME餃子 ◆8X2XSCHEME
2012/12/27(木) 22:24:50.90折角 CL スレなんだから CL 的な GUI ライブラリの話とか出てこないもんかな?
ただのバインディングじゃなくて CL によく馴染むような。
0751デフォルトの名無しさん
2012/12/27(木) 22:31:54.970752デフォルトの名無しさん
2012/12/27(木) 22:54:19.51そういうの好きな人はMcCLIM辺りに走れば良いんじゃないか。
関数的などうこうとかそういうのなら、今はHaskell方面がメインストリームだと思う。
0753デフォルトの名無しさん
2012/12/28(金) 01:34:45.89Webブラウザエンジン載せたアプリ作りたいとか、リッチなGUIがいいとかなら
CommonQt使うのもいいと思うよ。
ただ、CommonQtだと、UIエディタ利用できないので結局素のC++/Qt使った方が
楽だったり。
あとは、LispWorksやAllegroCLがGUIライブラリ提供してるけど、商用だしね。
0754デフォルトの名無しさん
2012/12/28(金) 01:43:27.89ありがとうございます。
> 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だよ。
それがありました。
0755デフォルトの名無しさん
2012/12/28(金) 05:11:06.89LispWorksは多バイト文字がアレなので駄目なんだよね。
Allegroは最強っぽいけどマジで値段がしゃれにならん。
ってなわけでごりごりするんだけど、やっぱりAllegroは憧憬のまなざしを送らざるを得ない。
せめてランタイムが安ければいいのに orz
0756デフォルトの名無しさん
2012/12/28(金) 06:53:08.72どちらを先に読んだらいいですか?
0757デフォルトの名無しさん
2012/12/28(金) 13:35:45.90早々にマクロ出てくるけどあれだけの解説でバッククォートと,@の感覚に
初心者は慣れ親しめないと思う。自分はOn Lispでさんざんやった後に
読んだからスラスラ読めて楽しめてるけど。実用は知らない。
0758デフォルトの名無しさん
2012/12/28(金) 14:00:17.16AIの分野でのプログラムをどんどんやってくみたいだ。まだ全部読んでないけど。
実践は確かに初めのほうでマクロが出てくるが、それはさわりで、
さわり部分が終わるとCommon Lispの文法を解説していく内容になっている。
Lispの入門書としてなら実践、Lispでできることが知りたいなら実用、じゃないか?
0759デフォルトの名無しさん
2012/12/28(金) 18:07:43.22> 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))))
試しに書いてみました。話の中で説明したコードの作意について説明できていないように感じる。
意外に難しかった。サンプルを書くのにかなりの実力がいるのかもしれません。
0760デフォルトの名無しさん
2012/12/28(金) 18:25:11.35まったくのCL入門者にはちょっと手強いですがw
最初のCDのDBを真似てお小遣い帳作ってまーす!
最終的にはパーソナル会計アプリ作るんだ^^
0761デフォルトの名無しさん
2012/12/28(金) 18:39:34.940762デフォルトの名無しさん
2012/12/28(金) 18:49:21.500763デフォルトの名無しさん
2012/12/28(金) 21:18:20.990764デフォルトの名無しさん
2012/12/28(金) 21:35:40.520765デフォルトの名無しさん
2012/12/28(金) 21:57:53.990766デフォルトの名無しさん
2012/12/28(金) 23:21:38.000767デフォルトの名無しさん
2012/12/29(土) 00:38:16.860768デフォルトの名無しさん
2012/12/29(土) 00:47:31.630769デフォルトの名無しさん
2012/12/29(土) 00:58:53.51見てきたコードに限った話なら、程度の差はあれ、みんな普通に使ってるよー。
自分はほとんど使わないけど、総称関数は何かと便利なので結構使ってる。
関数型っぽく書くのが好きな人でも総称関数は使ってたりするよー。
>>765
CLtL2は原著がネットで全文公開されてるから自分は持ってない。
http://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html
0770デフォルトの名無しさん
2012/12/29(土) 02:01:04.16多重ループの抽象化は流石に言語仕様に入れんと思うよー。
全検索ってのがどんなものかは残念ながら良く分からんのですが、
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)))
こんなんするのが普通だと思いますよー。
0771デフォルトの名無しさん
2012/12/29(土) 11:31:39.11違いがよくわかりません。関数にするか、lambdaにするのかの違いですよね。
let, let*は使えますが、突っ込んだ話まではわからないので省略しました。
slime環境前提の話とします。自分の稚拙なコードの正当性を主張するなら
(loop :for x :in list1 :collect x)とも書き換えられるし、物凄く細々と
した関数を自分で作ってしまうと管理もそうですし、忘れて使わなそう
なんでlambdaで書いた方が扱いやすいし使いやすいかな。もちろん、
関数化は狙っているし、関数化するなら割と汎用的にしないというのが
あって、関数化するのにブレーキがかかってしまいます。数ヶ月後に自分の
コードを見返したときに自作関数を多用した方が良いのか、lambdaで書いた
方が良いのかが整理されると思っています。こういう物を返したいとその
具現化に向けて最短で書くのはlambdaを使った方が今は個人的に合って
いる気がします。具現化の後は書き方の整理したり、関数化の是非を考えた
りする作業をしています。
何個も公開パッケージを書いた人は一発で整理されて書けるんでしょうが、
初めての時は自分の癖が入っているコードで具現化して、その後コードを
整理していると想像しています。一発の人も公開まではしないそのパッ
ケージの開発用(開発環境ではなくそのパッケージ寄り)のコードもある程度
存在するのかなと。ある機能をつけようと思っていたけど、今回は断念した
未実装の書きかけのコードとかもあるでしょうし。
0772デフォルトの名無しさん
2012/12/29(土) 15:01:29.32考え方の違いっすよ。ひとかたまりの処理と考えると、そういうmap系関数がないと思うかもしれんですが、
処理を分解してあげれば、mapの考え方に素直にはまるよ、っつー。
関数なんて気軽に作って気軽に捨てりゃー良いんすよー。いくらでも作り直せるし。
世の中、特定の関数の中でしか使われない補助関数とかに溢れてるわけでー。
必要以上にlambdaでベタ書きしてると、デバッグでテストしづらくて死んだりとかー。
……書いてて思ったけど、我ながらこの語調マジうざいな。
>>771の中の人は、書き込む前に、もっと発言を推敲した方が良いと私は思いますよ。
SLIMEなんかは引き合いに出す必要のない話の内容ですし、議論なのか質問なのか、
話題をふってるのか独り言なのか、冗長な部分が多くて良く分からないことになってます。
0773デフォルトの名無しさん
2012/12/29(土) 18:00:41.870774デフォルトの名無しさん
2012/12/29(土) 23:46:04.26おれが, テストコードでよくやるやつだ
関数定義するのが面倒だからあちこちに labmda を突っ込む
でも, 少しでかくなると似たような lambda がでてきて…
以下繰り返し…
0775デフォルトの名無しさん
2012/12/30(日) 07:18:54.560776デフォルトの名無しさん
2013/01/02(水) 00:48:24.85GUIをメインにやって行きたいから調べたら
cl-openGLとGTK以外に良い環境はありますか
0777デフォルトの名無しさん
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ツールキット使えるよ。
0778デフォルトの名無しさん
2013/01/02(水) 08:45:25.01知らなかった
0779デフォルトの名無しさん
2013/01/02(水) 12:14:28.500780デフォルトの名無しさん
2013/01/02(水) 23:06:47.63ABCLだとJavaのAPI呼び出しは簡単に出来るからそのままSwingでもtkみたいに簡単だね。
abclでSwingのDSL頑張ったみたいだけど2011年で停滞しちゃったみたいだね。
http://common-lisp.net/project/snow/
clojureだとなんとなく活発そうなのがあるんだが移植する人はいるんだろうか。
http://darevay.com/talks/clojurewest2012/
0781デフォルトの名無しさん
2013/01/03(木) 14:27:18.28マクロの使い道がまだわかんねえ。。。
0782デフォルトの名無しさん
2013/01/03(木) 15:01:21.79なかなか安定して保守していくのは難しいよね。
業務で使ってフィードバックしてくれる企業や個人と協力できれば良いんだけど、
ことGUIの分野だとCommon Lispではあまりやらないだろうし。
0783デフォルトの名無しさん
2013/01/03(木) 15:33:26.60Rubyでいう、open(path).readのことです。
0784デフォルトの名無しさん
2013/01/03(木) 15:47:30.28いらっしゃい。
with-open-fileとかの「with-x」系のマクロとか、入門に良いんじゃないかな。
利点が分かりやすい例だと思う。
0785デフォルトの名無しさん
2013/01/03(木) 15:58:49.38(with-open-file (s "abc.txt")
(let ((buf (make-string (file-length s))))
(read-sequence buf s)
buf))
大きなファイルの場合、32ビット環境だと文字列の大きさの制限に引っかかることがあるのでご注意。
most-positive-fixnumの値くらいまでは大体大丈夫。
0786デフォルトの名無しさん
2013/01/03(木) 16:04:21.670787デフォルトの名無しさん
2013/01/03(木) 16:51:30.43ありがとうございます!
できた!と思ったら、日本語ファイルだと文字コード関係で怒られてます。。
#\HIRAGANA_LETTER_NA (code 12394) is not a LATIN-1 character.
0788デフォルトの名無しさん
2013/01/03(木) 17:03:38.04(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
0789デフォルトの名無しさん
2013/01/03(木) 17:19:01.06詳しいことはそちらを読んで欲しい。
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
0790デフォルトの名無しさん
2013/01/03(木) 17:34:23.45簡単にできるんだけど、移植性まったく無いのでどこがCommonなんじゃーって話になるよね。
ま、FFIとか入ると結局ライブラリがプラットフォームにあるかないかで決まっちゃうのだけど。
Common LispのCommonがLisp側のみの縛りだから外部Lib使うものってどうしようもないのだろうけど。
0791デフォルトの名無しさん
2013/01/03(木) 17:36:34.58ありがとうございます。ファイルオープンについては解決しました。
その文字列をGメール(cl-smtp)で送信したいのですが、
送信する場合に以下のエラーが発生するようですorz
#\HIRAGANA_LETTER_NA (code 12394) is not a LATIN-1 character.
ちなみに環境はUbuntu, sbclです。
まとめありがとうございます。あとで復習させていただきます。
0792デフォルトの名無しさん
2013/01/03(木) 17:50:26.71CL-SMTP使ったことないけど、エラーが発生してるのってどこ?
with-smtp-mailとかなら、それにも:external-formatで指定できるようになってるみたい。
バックトレース見てエラーが起きてる場所が分かるなら教えて欲しい。
分かんないならその部分のコード見せて欲しい。
0793デフォルトの名無しさん
2013/01/03(木) 18:00:03.61お返事ありがとうございます。
以下のコードです。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)
0794デフォルトの名無しさん
2013/01/03(木) 18:35:39.16軽く調べた所、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を引き継げば修正できるけど、
可能なら他のライブラリ使った方が良いかも。
0795デフォルトの名無しさん
2013/01/03(木) 18:58:40.61おぉ。。。なるほど
わかりました。色々ありがとうございました
0796デフォルトの名無しさん
2013/01/03(木) 19:27:04.11一応自分のGmailアカウントには届いた。
https://gist.github.com/4442462
0797デフォルトの名無しさん
2013/01/03(木) 20:09:46.85SUGEEEEEEE!自分のところでも動きました!
ありがたやありがたや
コードリーディングして吸収させていただきます。
0798デフォルトの名無しさん
2013/01/03(木) 20:22:33.09レスありがとうございます。
初歩的な質問で恐縮ですが、そういったマクロはどのパスにあるのでしょうか?
0799デフォルトの名無しさん
2013/01/03(木) 20:56:06.12CCLなら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でも。
0800デフォルトの名無しさん
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
0801800
2013/01/04(金) 14:42:32.040802デフォルトの名無しさん
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節の動作を誤解してると思う。
0803800
2013/01/04(金) 15:34:34.73そのとおりでした。おそらくどっちも深く理解していません。。
やりたいことはできました。
そのあたり勉強してきます。
0804デフォルトの名無しさん
2013/01/05(土) 05:21:15.20原因が分からん\(^0^)/
0805デフォルトの名無しさん
2013/01/05(土) 07:42:47.11で報告してもええんやで?
※ただしソフトウェア側のバグでない場合に限る
0806デフォルトの名無しさん
2013/01/05(土) 09:17:59.44多分、自分が悪い
どういう時にEXCEPTION_ACCESS_VIOLATIONてでるん?
0807デフォルトの名無しさん
2013/01/05(土) 09:54:27.02素直に解釈すれば、メモリのアクセス違反やと思うで。
保護されてる領域にアクセスしてOSちゃん怒りの例外。
FFIで外のポインタを操作するときにおかしなことやっとるんやないか?(適当)
バグトラッキングシステムで引っ掛かるのはこれくらいか。
http://code.google.com/p/lispbuilder/issues/detail?id=27
0808デフォルトの名無しさん
2013/01/05(土) 21:59:12.54解決したよ
0809デフォルトの名無しさん
2013/01/06(日) 04:16:04.64どちらを先に読んだらいいですか?
0810デフォルトの名無しさん
2013/01/06(日) 06:22:18.14>>514 >>756
仏の顔も三度までつーか、そろそろ文面くらい変えて釣れよw
0811デフォルトの名無しさん
2013/01/06(日) 22:32:53.370812デフォルトの名無しさん
2013/01/06(日) 23:01:55.58おれlispで書かれた自動巡回プログラムだけど、どっちから読んでも良いらしいよ
0813デフォルトの名無しさん
2013/01/07(月) 03:05:50.24申し訳ございません。
0814デフォルトの名無しさん
2013/01/07(月) 22:13:35.97それでいいの?
0815デフォルトの名無しさん
2013/01/08(火) 05:19:39.63て知っていますか。
0816デフォルトの名無しさん
2013/01/08(火) 06:27:05.60>>670
過去ログを検索するかグーグル先生に聞けば、ここで質問を待つ手間を省けるよ。
質問する側される側両方ハッピーになれるよ。
上のページで不十分なら、オフィシャルな英語のマニュアル辺りを読むしかないよ。
"4 An Introduction to Foreign Interfaces and CFFI"で丁寧に解説してるよ。
http://common-lisp.net/project/cffi/manual/html_node/index.html
0817デフォルトの名無しさん
2013/01/08(火) 06:59:44.04opening-bonus-percentage以降ならそれで良いと思う。
0818デフォルトの名無しさん
2013/01/08(火) 07:53:58.41ありがとうございます。
0819デフォルトの名無しさん
2013/01/08(火) 20:59:37.90ありがとうございます。
では、account-typeのinitialize-instance :after と
opening-bonus-percentage のそれを両方を実行するには
どう書けばいいのでしょう?
0820デフォルトの名無しさん
2013/01/09(水) 11:46:18.860821デフォルトの名無しさん
2013/01/09(水) 13:03:06.15自分は知らないけど、: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で検索して来いよ的な感じに割り切った。
0822デフォルトの名無しさん
2013/01/09(水) 13:44:17.640823デフォルトの名無しさん
2013/01/10(木) 08:26:49.800824デフォルトの名無しさん
2013/01/10(木) 10:31:24.460825デフォルトの名無しさん
2013/01/10(木) 12:04:10.210826デフォルトの名無しさん
2013/01/10(木) 12:48:31.36プログラミングClojureを訳した人で、Common Lispにも精通してるから、
品質に問題はないはず。米国在住で日本語の文章も上手く、元ゲーム開発関係者。
Land of Lispの内容を考えても、翻訳者としてはこれ以上を望めないレベル。
0827デフォルトの名無しさん
2013/01/10(木) 13:11:04.040828デフォルトの名無しさん
2013/01/10(木) 13:26:30.880829デフォルトの名無しさん
2013/01/10(木) 20:14:37.44時期はいつくらいなんですか?
0830デフォルトの名無しさん
2013/01/10(木) 22:28:47.020831デフォルトの名無しさん
2013/01/10(木) 22:43:59.84去年の3月に話が出てて、それから続報は聞いてない気がする。
http://chaton.practical-scheme.net/common-lisp-jp/a/2012/03/07
気になるならChatonで聞いてみたら? 期待してます、みたいな言葉も添えて。
0832デフォルトの名無しさん
2013/01/12(土) 10:43:50.73翻訳でても買うだろうけどepubがいいなー
0833デフォルトの名無しさん
2013/01/14(月) 02:26:59.64http://lisp-book.org/
0834デフォルトの名無しさん
2013/01/14(月) 07:17:34.41http://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 で公開されています
0835デフォルトの名無しさん
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にばかりいじって来たので
ちょっと戸惑ってます。。。
デバッグ中の変数の確認とかできないのでしょうか?
0836デフォルトの名無しさん
2013/01/14(月) 19:25:17.15そんな感じだと、問題部分の特定のためにブレークポイント仕掛けるとかかなー。
あるいはデバッグ出力。それぞれbreakやprint使う。
ちなみに、まともにバックトレースが表示されてれば、ローカル変数表示できるよ。
「Backtrace:」以下に表示されてるスタックフレームの上でRETで切り替えできる。
http://cl.cddddr.org/index.cgi?SLIME%3ASLDB
0837デフォルトの名無しさん
2013/01/14(月) 19:38:09.15https://bugs.launchpad.net/sbcl/+bug/549673
のバグで、バージョン上げれば直るかも。
0838デフォルトの名無しさん
2013/01/14(月) 23:15:15.65https://bbs.archlinux.org/viewtopic.php?id=150511
これみたいです。
助かりました。ありがとうございました。
0839デフォルトの名無しさん
2013/01/15(火) 06:33:48.220840デフォルトの名無しさん
2013/01/15(火) 14:59:37.460841デフォルトの名無しさん
2013/01/16(水) 04:04:52.950842デフォルトの名無しさん
2013/01/16(水) 04:36:18.440843デフォルトの名無しさん
2013/01/16(水) 04:51:59.030844デフォルトの名無しさん
2013/01/16(水) 20:47:20.34つか, ソフト業界の連中って英語読めない奴、意外と多いのな
ハードだとデータシート英語の事のほうが多いんで,
読むくらいできなきゃやっていけないんだが…
ある意味うらやましい
0845デフォルトの名無しさん
2013/01/16(水) 20:56:37.38みんなどうしてんの?
0846デフォルトの名無しさん
2013/01/16(水) 21:25:24.35Google翻訳で、日本語--->英単語。
0847デフォルトの名無しさん
2013/01/17(木) 00:28:10.67あれだめだよ
ジャーゴンファイル(出来れば昔の版)に目を通すことをおすすめする
0848デフォルトの名無しさん
2013/01/17(木) 13:54:55.08つか読まないやつの方が多くね?
辞書引くのがいやとかわがままで困る
>>845
ttp://codic.jp/
こういうの使ったりしてる
0849デフォルトの名無しさん
2013/01/17(木) 19:24:15.42読まない --> 辞書引くのがいや --> 単語忘れる --> 読めない
でも、大学の教養まで入れると、8年くらいは英語やってるはずなんだよな
0850デフォルトの名無しさん
2013/01/17(木) 20:20:03.30プログラマーは雑多な知識は多い割に
当面の仕事に関係なさそうと自分で決めた範囲にはまず時間を割けない
0851デフォルトの名無しさん
2013/01/17(木) 20:23:24.760852デフォルトの名無しさん
2013/01/18(金) 22:01:47.790853デフォルトの名無しさん
2013/01/19(土) 12:08:39.22おもしろいね
欲しい語があんまり登録されてない...
0854デフォルトの名無しさん
2013/01/19(土) 22:50:12.210855デフォルトの名無しさん
2013/01/20(日) 22:25:31.46> ジャーゴンファイル(出来れば昔の版)に目を通すことをおすすめする
具体的に昔の版のジャーゴンファイルって何?
>>849
大学受験レベルでマニアックでもない普通に使う3,500語ぐらいでほとんど知っていて
損はないレベルなんじゃないの。
>>854
英語に詳しくないけど、中学校の文法でだいたいの意味は読み取れると思うなあ。
+αを求められることもあるだろうけど、そん時に考えれば良い。
英語を読み解く環境を整えて入れば、それなりにいけるでしょ。時間かかるのは我慢するしかない。
東京に住んでいると併存英語案内がすごく多いから、日本語無視して英語と向き合うのはすごく
良いことだと思っている。駅名とか、英語で覚えちゃった方が良いくらい。日本で日本語無視して、
英語で暮らすのは割とできるんじゃないのかね。英語に詳しい人、ツッコミよろしく。
外国人向けに観光地にもなっていない非都市部は知らん。
0856デフォルトの名無しさん
2013/01/20(日) 23:17:21.800857デフォルトの名無しさん
2013/01/20(日) 23:18:06.940858デフォルトの名無しさん
2013/01/21(月) 00:31:32.05> 具体的に昔の版のジャーゴンファイルって何?
MITのAI LABとか SAIL の用語がバッサリ作事される前の版のことじゃないか?
http://www.dourish.com/goodies/jargon.html
とかはフルすぎるかもしれないけど
0859デフォルトの名無しさん
2013/01/21(月) 00:54:15.10thx.
0860デフォルトの名無しさん
2013/01/21(月) 01:05:01.20言っていたんだけど、POPをポップと言うと恥を書くのかな?
大文字略語は全部アルファベットで読んだ方が良い?
あとインフレもinflationと言わないと通じないとも言っていた。
日本語においてのデフレはデフレーションの意味と
ディプレッション(不況)の意味が混ざっているとも言っていた。
もっと余談だが、子供を英語圏で育てたので娘に発音が悪いと
ボロクソに言われるらしいね。
0861デフォルトの名無しさん
2013/01/21(月) 01:59:47.350862デフォルトの名無しさん
2013/01/21(月) 03:15:13.08”恥をかくかどうか”に拘ってたら、何年たっても話せないよ。
0863デフォルトの名無しさん
2013/01/21(月) 11:00:40.07HyperSpecとかCLに絡めるならともかく、関係ない話を長々と。
マ板とか英語関係の板に行ってやれよ。
0864デフォルトの名無しさん
2013/01/21(月) 11:23:00.880865デフォルトの名無しさん
2013/01/22(火) 22:19:53.550866デフォルトの名無しさん
2013/01/22(火) 22:57:13.40単語覚えないと何もわからない
まぁある程度は他の言語でも同じだけど
lispは得にその感が強いな
0867デフォルトの名無しさん
2013/01/22(火) 23:42:03.500868デフォルトの名無しさん
2013/01/23(水) 01:49:01.930869デフォルトの名無しさん
2013/01/23(水) 02:09:20.480870デフォルトの名無しさん
2013/01/23(水) 10:21:31.560871デフォルトの名無しさん
2013/01/23(水) 14:02:01.93マ板の話が分からなくなってム板へ来たんじゃないの?
0872デフォルトの名無しさん
2013/01/23(水) 18:06:44.430873デフォルトの名無しさん
2013/01/23(水) 19:30:44.37俺も、普通に仕事で使ってる。
つか、仕事で使って悪いような宗教上の理由とかがあるの?
0874デフォルトの名無しさん
2013/01/23(水) 19:36:36.360875デフォルトの名無しさん
2013/01/23(水) 21:33:30.18コンシューマゲームとかPCゲーム以外なら何でもあるぞ。(プラットフォーム上の縛りがあるからこれらは来ない)
0876デフォルトの名無しさん
2013/01/23(水) 21:33:54.66社内のバックエンドは結構な率で CL 使ってるな
で、一応、 売り物にもしてる(あんま出て行ってないみたいだけど)
(4.2BSD 時代の franz から lisp 使ってたらしくってその名残みたい)
ネットワーク管理系とかは、ヒストリー調べて自己修正やらしてる所が
多いから S式ベースじゃないと結構辛い
(こっちは, ここ 10 年くらいかけて, うちのチームが開発した)
0877デフォルトの名無しさん
2013/01/23(水) 21:39:03.18チップ・デバイスメーカーが標準化してくれればいいんだが。
0878デフォルトの名無しさん
2013/01/23(水) 21:48:08.810879876
2013/01/23(水) 22:59:26.710880デフォルトの名無しさん
2013/01/23(水) 23:52:04.27AI作成に使われた、というよりAI関連のアイディア・仮説の検証・実装用言語作成に使われた。
少なくとも当時、AIとは何かについて大勢の意見がまとまっていたわけではないから、関連しそうなものなら何でも試すという雰囲気。
最近の研究は知らない。
0881デフォルトの名無しさん
2013/01/24(木) 13:34:10.58データ処理のバックエンド側でそれなりに使ってるよ。
あとは実験的にあれこれ試行錯誤したい時のプロトタイプ実装の時とか。
0882デフォルトの名無しさん
2013/01/24(木) 14:55:42.60統計解析のテクニックを多用するためか、MatlabやRを使う研究者が多い。
LispにもかつてLisp-statという統計解析ソフトがあったが、
実装はCLじゃなくてxlispという俺Lispだったし、その開発者はRの開発に回ってしまったと聞く。
CLにもcommon-lisp-statというのがあるけど、実用レベルとは言い難いな。
0883デフォルトの名無しさん
2013/01/24(木) 16:54:19.56Common Lispではないという意味の「俺Lisp」ならその通りだが。
0884デフォルトの名無しさん
2013/01/25(金) 23:59:41.910885デフォルトの名無しさん
2013/01/26(土) 00:14:57.82Land of Lisp近日発売
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-87311-587-0
0886デフォルトの名無しさん
2013/01/26(土) 00:43:08.060887デフォルトの名無しさん
2013/01/26(土) 07:41:51.32ここまできたんだからこれもやってください
http://nostarch.com/realmofracket
0888デフォルトの名無しさん
2013/01/26(土) 10:10:47.01Grand Theft Autoのもじりのヒャッハーな感じがどう訳されているのか期待してる
0889デフォルトの名無しさん
2013/01/28(月) 18:42:15.20> あとは定評のあるソースをたくさん読んで、とにかく何か自前で書く。
> どの言語でも入門がすんだ後の本はあまりない。他人のソースを参考に自前で書くのが一番。
亀レス。このソースの非Lispの割合ってどんな感じですか?
あと自前で書く意図は何ですか?
0890デフォルトの名無しさん
2013/01/28(月) 20:05:10.38> 亀レス。このソースの非Lispの割合ってどんな感じですか?
どの言語でも, って書いてあるじゃん.
入門書 -> 間がない -> 中の上向け -> 飛びまくって -> 規格書
って, 構造の言語は結構ある
> あと自前で書く意図は何ですか?
同じ物を書くんじゃなくって,
自前で必要なものを他人のソースとか他の言語での実装を参考に書く
って, 趣旨じゃないか?
個人的には, 車輪の再発明がおすすめ
オレオレ簡易コンパイラを作るとか, オレオレ簡易リアルタイムモニター作るとか
0891デフォルトの名無しさん
2013/01/28(月) 22:38:52.43他はC++と関数型言語くらい。
0892デフォルトの名無しさん
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)))))
0893デフォルトの名無しさん
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)))
0894デフォルトの名無しさん
2013/01/29(火) 02:58:45.55訂正、defmethodのコードにmultiple-value-bindを忘れたので補完して見て下さい。
0895デフォルトの名無しさん
2013/01/29(火) 04:04:33.84lambda式中の最後の式以外は副作用が目的なので、
そこで副作用なしの式を評価したら最適化の過程で無視されたということだろうと思います。
disassembleしてみるとそもそも除算命令が無いことがわかります。
なので副作用を必要とする場合はエラーを捕捉するはずです。
(handler-case
(progn (princ "before")
(princ (/ 1 0))
(princ "after"))
(error (c) (princ "catch")))
=> "catch"
0896デフォルトの名無しさん
2013/01/29(火) 11:32:02.38こんなん書いといてなんだけど、普通に総称関数で良いと思う。
(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"
0897デフォルトの名無しさん
2013/01/29(火) 11:35:33.80http://www.w3.org/TR/NOTE-datetime
を外国の奴らはもっと使ってください。
0898デフォルトの名無しさん
2013/01/29(火) 15:02:00.78ありがとうございます、これは気づきませんでした。
SBCLでしたが、あらゆるコードはエラーが出れば副作用をもつので、これはバグなのでは…。
0899デフォルトの名無しさん
2013/01/29(火) 15:57:43.180900デフォルトの名無しさん
2013/01/29(火) 17:13:39.78自分がコンパイラを書くなら、副作用がなく返り値を求められないコードは、コンパイル時に一度評価し、エラーが残ればエラーコードのみを残す設計にします。まあいずれにせよ大した問題ではないのですが…。
0901デフォルトの名無しさん
2013/01/29(火) 17:20:45.92> コンパイル時に一度評価し
ちょっと冷静に考えてみろ
0902デフォルトの名無しさん
2013/01/29(火) 17:56:57.16コンパイル時にコードを実行するなという意図であれば、self-compilingな言語ではあまり意味のないことかと思います。
ちなみにですが、CMUCLではエラーは捕まるようです。
コード:(handler-case (progn (princ "before") (/ 1 0) (princ "after")) (error (c) (princ "catch")))
印字:beforecatch
返り値:"catch"
0903デフォルトの名無しさん
2013/01/29(火) 18:19:19.99「部分計算」を勉強してみて。
0904デフォルトの名無しさん
2013/01/29(火) 18:23:13.58いや、そうじゃなくてコンパイル時に評価出来るのは定数式だけという認識はあるのか?
CMUCLは知らないが、無意味だけどエラーになる定数式はコンパイル後も残って、
変数が入っていると最適化で削除されるなら、コンパイラに一貫性がないと考える事も出来る。
0905デフォルトの名無しさん
2013/01/29(火) 18:23:28.64疑問点は、部分計算を行う場合にエラーの挙動を考慮しないことが仕様として許容されているのかということです。
0906デフォルトの名無しさん
2013/01/29(火) 18:24:03.52そのコードについて、ゼロ除算が起きる事が分かっている、という意味なら
「コンパイル時」にゼロ除算でエラーにする処理系もあるかもね
0907デフォルトの名無しさん
2013/01/29(火) 18:27:43.51>>900はその場合に、コンパイル時にコードを削除するのではなく、エラー関数をコードに残すべきなのではということです。
0908デフォルトの名無しさん
2013/01/29(火) 18:43:47.53(/ 1 0)を削除するなって主張なら、そういう最適化をしない
処理系を使うか、されないように設定しろ
0909デフォルトの名無しさん
2013/01/29(火) 18:48:17.96何度も恐縮ですが、コンパイル時に(/ 1 0)を(error 'division-by-zero)に変換すべきではないかということです。
ちなみにSBCLでは下記のオプションを加えることで正常な挙動をするようになったので、問題ではないのですが、仕様ではどうなのでしょう。
(declaim (optimize (speed 0) (safety 3) (compilation-speed 0)))
0910デフォルトの名無しさん
2013/01/29(火) 18:49:26.49まあdebugger policyの設定にも依るんだけど。
0911デフォルトの名無しさん
2013/01/29(火) 18:56:08.62policy通りの動作でなければバグです。
0912デフォルトの名無しさん
2013/01/29(火) 18:59:27.25変換すべきと一律で決めつけられる話じゃない
0913デフォルトの名無しさん
2013/01/29(火) 19:13:40.44最適化によって計算の結果が異なるというのは初めてだったのでやや驚いたのですが、SBCLとしてはエラー処理は「計算」の範疇外だというところでしょうか。
とにかくdeclaimで対処することにします。皆さんありがとうございました。
0914デフォルトの名無しさん
2013/01/29(火) 20:37:54.63実際にプログラムを書くときに問題が起こるとも思えない。
0915デフォルトの名無しさん
2013/01/29(火) 20:49:09.04最適化によっては動かない OS カーネルもあるし、
コンパイルできない、ソフトウェアもある
これは言語によらない
0916デフォルトの名無しさん
2013/01/29(火) 22:15:56.23SBCLでは意図的にコードの意味を変える可能性のある最適化をデフォルトにしているらしい。
http://permalink.gmane.org/gmane.lisp.steel-bank.devel/16734
0917デフォルトの名無しさん
2013/01/29(火) 23:01:08.85という考えで最適化されている、って事も理解出来てなさげ
最適化を切る事で君の期待する挙動になったわけだけど
それを"正常な挙動"とは言わないから
0918デフォルトの名無しさん
2013/01/29(火) 23:36:02.83ありがとうございます。
>>917
どう読めばそうなるのか…。さらに、エラーは通常「計算外」の処理ではなく、仕様で厳密に決定された、勝手に削除されるべきではない計算の一部です。つまり(/ 1 0)は副作用を持ちます。
SBCLの場合は>>914に書かれた実際的な理由によりそれを削除していると理解しています。荒れそうなのでこれ以上は書き込みません。
0919デフォルトの名無しさん
2013/01/30(水) 00:18:44.04エラーが副作用だとすると、あらゆるコードは副作用を持つ可能性がある事になる。
本当にそれでいいの?
0920デフォルトの名無しさん
2013/01/30(水) 00:22:48.57副作用ではなくなるとは思うが
0921デフォルトの名無しさん
2013/01/30(水) 00:22:55.73ほぼ全ての関数呼び出しはスタックオーバーフローの可能性があるわけだし
0922デフォルトの名無しさん
2013/01/30(水) 00:27:51.74Haskellとかだってmonadを使う
0923デフォルトの名無しさん
2013/01/30(水) 00:43:38.410924デフォルトの名無しさん
2013/01/30(水) 01:07:50.93まあエラー処理系モナドは、副作用のあるものを純粋な枠組みでとらえるモナドなのだから、ある意味副作用があるとも言えるわけだけど
Haskellでは、undefinedやゼロ除算みたいなエラー類は「どんな型にもなれる値」として扱われていて、評価されない限り副作用はないけれど、評価されるともろ副作用になる
だからHaskellにおける「純粋な関数」は副作用の発生源になる可能性があるけれど、それでもその関数に副作用があるとは言わない
そもそも何をもって「副作用がある」とするかってのはあまり厳密な決まりがない
どんなプログラムも「世界」を暗黙の引数と返り値にしていると考えれば純粋だし
だから「副作用」という言葉は文脈依存なところがある
副作用という言葉の意味のズレで話がこじれてるのもたまに見かけるし…
0925デフォルトの名無しさん
2013/01/30(水) 01:16:26.52・モナドだから副作用ってわけじゃない
・エラーを発生しうる関数(あるいは関数的なもの)は副作用をもっていると言える
・でもそういう関数を「副作用がある」とは必ずしもいわない
・副作用という概念が文脈依存
と言いたかったのです
0926デフォルトの名無しさん
2013/01/30(水) 02:46:20.40-> (progn (princ "before") (/ 1 0))
(progn (princ "before") (/ 1 0) (princ "after"))
-> (progn (princ "before") (princ "after"))
結局のところ、どっちで最適化して欲しいかって事でしょ?
最適化って事なら後者でして欲しいし、単純にこのケースなら
コンパイル時エラーになってくれるのが嬉しいかなぁ
0927デフォルトの名無しさん
2013/01/30(水) 13:36:46.83という理解でいいのか
0928デフォルトの名無しさん
2013/01/30(水) 22:01:52.22最近の slime だと, ^U^C^C とか, ^U 付けないとデフォでは
(optimize speed) が渡るみたいだし
0929デフォルトの名無しさん
2013/02/07(木) 15:27:11.89意図せずに関数を変数で上書きしてしまう可能性があるとはいえ、
Warning出せばいいだけのような気がします。
0930デフォルトの名無しさん
2013/02/07(木) 17:25:47.42ttp://www.nhplace.com/kent/Papers/Technical-Issues.html
俺は読んでないけどw
0931デフォルトの名無しさん
2013/02/07(木) 17:41:08.020932デフォルトの名無しさん
2013/02/07(木) 18:25:13.48今は歴史的な意義しかないと思うLisperが多いのでは?
MLの議論をまとめてCommon Lispの仕様を書いたSteele先生も、
どうせどのLispとも互換性ないんだから、
function cellとvalue cellはひとつにまとめといた方がよかったと発言。
0933デフォルトの名無しさん
2013/02/07(木) 20:08:42.71「なんでこんなエラー起こるんだ???」
と、小一時間時間を潰すこともあるので、このままでいい
0934デフォルトの名無しさん
2013/02/07(木) 21:35:29.72レキシカルスコープ前提の話だったと記憶。
その理由は>>933だから。
0935デフォルトの名無しさん
2013/02/08(金) 04:39:44.92あるよ。
以上。
↓次どうぞ
0936デフォルトの名無しさん
2013/02/08(金) 04:50:47.51それはないんじゃないでしょうか?
0937933
2013/02/08(金) 22:00:21.28最初からネームスペースは一つにしておけば funarg 問題とかも起こらなくて、
funcall とか書かなくても良かったんだろうし, 933 に書いたような問題も
起きなかったんだろうけど
# C の "struct foo {...}; struct foo foo; ..." も似たようなもんだけど、
# おいらはそれが当然になっちゃったしな
0938デフォルトの名無しさん
2013/02/08(金) 22:34:20.230939デフォルトの名無しさん
2013/02/09(土) 02:02:27.57CLでのcygwinとLinuxのterminal上の出力で互換性が高くやる方法って整理されているの?
topが理想だけど、なんかのモニターとしてn秒毎に単純なshスクリプトで出力する感じで満足なんだけどなあ。
0940デフォルトの名無しさん
2013/02/09(土) 11:19:53.650941デフォルトの名無しさん
2013/02/09(土) 23:03:48.59http://www.oreilly.co.jp/books/images/picture_large978-4-87311-587-0.jpeg
0942デフォルトの名無しさん
2013/02/09(土) 23:40:25.010943デフォルトの名無しさん
2013/02/09(土) 23:43:01.42他の言語ユーザーから見ると って書いてあるだろ
0944デフォルトの名無しさん
2013/02/10(日) 02:15:14.71たとえば (f) みたいな式があった場合、
Lisp-1 だと f が関数か毎回調べる必要があるけど、
Lisp-2 だと束縛する時点で関数だと判明しているので、型チェックが不要になる。
なので速度上少し有利。
ってのもある。
0945デフォルトの名無しさん
2013/02/10(日) 02:19:29.690946デフォルトの名無しさん
2013/02/10(日) 10:21:53.32o'reillyでこの表紙か。。。
何本と読んだらいいのw?
0947デフォルトの名無しさん
2013/02/10(日) 11:25:13.090948デフォルトの名無しさん
2013/02/10(日) 11:36:52.57ワロス本
0949デフォルトの名無しさん
2013/02/10(日) 11:41:39.370950デフォルトの名無しさん
2013/02/10(日) 11:58:08.080951デフォルトの名無しさん
2013/02/10(日) 12:44:14.180952デフォルトの名無しさん
2013/02/10(日) 23:54:15.29ひょっとすると、他の動物よりlispエイリアンの方が好きになるかもしれない。
そう、まるで映画アバターに出てくる青い肌の異星人のようにね。
0953デフォルトの名無しさん
2013/02/11(月) 00:06:59.16最後の文意味分からん
0954デフォルトの名無しさん
2013/02/11(月) 05:54:41.450955デフォルトの名無しさん
2013/02/11(月) 14:45:14.90正直に触手系が好きって言えばいいのに
0956デフォルトの名無しさん
2013/02/11(月) 15:44:22.20http://lambda.bugyo.tk/cdr/mwl/
0957デフォルトの名無しさん
2013/02/11(月) 17:56:00.07日本にも変態LISP文化があることを世界に知らしめるべき。
0958デフォルトの名無しさん
2013/02/11(月) 18:04:37.520959デフォルトの名無しさん
2013/02/13(水) 01:26:54.03アバター観てないの?あの映画に出てくるエイリアンも、最初はキモいけどそのうち慣れて、途中からは色っぽくさえ見えるんだよ。監督がすごく計算し尽くして作ってる作品。
ランドオブリスプもそんな風に、リスプエイリアンがかわいく観えるといいなあ、と思ったんだ。
0960デフォルトの名無しさん
2013/02/13(水) 01:35:23.950961デフォルトの名無しさん
2013/02/13(水) 04:26:52.18ttp://www.wikihost.org/w/lisplogogreate/animal_logos
0962デフォルトの名無しさん
2013/02/13(水) 10:00:21.87このロゴ自体は好きだけど
lispにとかげのイメージってありますかねー?
0963デフォルトの名無しさん
2013/02/13(水) 10:10:04.83ActiveStateのロゴとかぶるからなあ…
0964デフォルトの名無しさん
2013/02/13(水) 22:08:30.93そんなに気持ち悪いとも思わなかったしなぁ…
まあでもそういう意味で言ってたのか。納得
0965デフォルトの名無しさん
2013/02/13(水) 23:22:46.93リザードマンなアバター作るようなRPG好きの私に死角はなかったが言いたいことは何となくわかる。
#むしろProduction IGの作る3Dアニメの方がキモイ
0966デフォルトの名無しさん
2013/02/14(木) 00:15:33.990967デフォルトの名無しさん
2013/02/14(木) 21:19:13.750968デフォルトの名無しさん
2013/02/15(金) 10:09:03.84kittenメッセージもなくしてくれよ
0969デフォルトの名無しさん
2013/02/15(金) 13:45:39.270970デフォルトの名無しさん
2013/02/15(金) 18:42:58.090971デフォルトの名無しさん
2013/02/15(金) 19:58:12.720972デフォルトの名無しさん
2013/02/15(金) 19:59:25.570973933
2013/02/15(金) 20:03:01.74> sbclって、いつのまにかwindowsポートが一番最新になったのか?
ほかは, thread 関連以外は変わらず安定しているってことで.
NEWS みても git log 見ても windows 関連の変更が多いし…
いいことなんじゃないの, 使用する人の裾野が広がるのは???
0974デフォルトの名無しさん
2013/02/15(金) 20:06:31.080975デフォルトの名無しさん
2013/02/16(土) 01:17:15.88その周辺がまだ固まってないからWindowsの変更多いだけだよ。
特別力を入れてるとかそんなんじゃない。 相変わらずLinuxがメインターゲット。
0976デフォルトの名無しさん
2013/02/18(月) 21:22:16.05FORMATの章でした。
(format nil "(~{(~{~a~^ ~})~^ ~})" '((1 2 3 4) (one two three)))
~^は便利そうですね
0977デフォルトの名無しさん
2013/02/18(月) 23:47:55.43例えば、45.3015と入力して45度30分15秒を表したいのですが
10進法の43.3015と区別するのに45.3015degと入力してもいいです。
こういうのはどういうふうに作るのでしょうか?
"45-30-15"等と文字列扱いも考えたのですが
できればダブルクォートなしで扱いたいのです。
0978デフォルトの名無しさん
2013/02/19(火) 23:37:50.31第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)が違うということです。
同じでもよさそうです。(前者のほうが簡潔ですし)
0979デフォルトの名無しさん
2013/02/20(水) 01:29:03.79正規表現抹茶あたり組んでみたけど、なんか飽きちゃったなあ。
なんか面白いテーマないかな。
プログラマとして勉強になるのかな、と思ってたけど、CでもRubyでもできるよ
ねこんなのは。
0980デフォルトの名無しさん
2013/02/20(水) 02:02:45.60そろそろ自分の作りたいものを作ってみれば?
特にアイデアがなくていかにもlispっぽい物をやってみたいなら記号微分・記号積分とか遺伝的プログラミングなんかも面白いと思うよ。
もちろんオレオレlisp処理系作ってみるのも良い。
0981デフォルトの名無しさん
2013/02/20(水) 12:18:16.00(format nil "~vR" 36 120) ; => "3C"
10進数->36進数への変換は分かったのですが、
逆に36進数->10進数に変換するにはどうすればよいでしょうか
0982デフォルトの名無しさん
2013/02/20(水) 12:40:50.260983デフォルトの名無しさん
2013/02/20(水) 12:48:02.87Prolog on Haskell
0984デフォルトの名無しさん
2013/02/20(水) 13:20:52.20On Lispは読んだか?
あれ読み終われば一皮むけるぜ。
Webで読める。
0985デフォルトの名無しさん
2013/02/20(水) 15:06:48.03http://blog.livedoor.jp/dankogai/archives/51854832.html
0986デフォルトの名無しさん
2013/02/20(水) 15:29:35.55中の文を一切読まずにマンガだけ眺めて書いたような書評だなあ
次スレ立ててきます
0987デフォルトの名無しさん
2013/02/20(水) 15:32:26.48【入門】Common Lisp その10【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1361341876/
0988デフォルトの名無しさん
2013/02/20(水) 15:58:08.60まさしく俺がそんな感じだ
Project Eulerの問題いくつか解いてたけど、やっぱ速度が出ないからこういう用途には向かないなーとか思った
速度はおいておくとしても、一時変数が即座に宣言できないところも慣れない・・・
マクロだとかLispの良さみたいなのが知りたかったんだけど
やっぱOn Lispとか実践Common Lisp?辺りを読むほうがいいのかな
Lisp関係の本の読書歴は竹内本を半分ぐらい読んだ程度
0989デフォルトの名無しさん
2013/02/20(水) 16:17:27.01真偽を返す関数名には-pとpで終わるパターンの二つがあるけれど
一定の法則があれば知りたい
0990デフォルトの名無しさん
2013/02/20(水) 17:02:58.35ttp://www.cliki.net/Naming%20conventions
ぱっと思いつく説明はここかな
0991デフォルトの名無しさん
2013/02/20(水) 17:12:27.24branch-p?
nil
とかって会話してるとかしてないとかいう話があったが
ただの笑い話だったのかな
0992デフォルトの名無しさん
2013/02/20(水) 19:58:21.790993デフォルトの名無しさん
2013/02/20(水) 20:06:19.260994デフォルトの名無しさん
2013/02/20(水) 21:13:18.900995デフォルトの名無しさん
2013/02/20(水) 22:35:27.35アルゴリズムの実装も楽しいよ。ちょっと複雑な奴。
0996デフォルトの名無しさん
2013/02/20(水) 22:36:06.99乙。
0997デフォルトの名無しさん
2013/02/20(水) 23:39:44.940999デフォルトの名無しさん
2013/02/21(木) 00:49:04.72なるほど、ハイフンがあるものは原則として-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
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。