- 1 名前:デフォルトの名無しさん [2012/03/05(月) 04:06:46.71 ]
- Lisp Schemeスレでは恥ずかしくて聞けないようなことを質問したり、
Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。 それ以外でもCommon Lispについての話題なら歓迎します。 ま、ゆっくりやりましょう。 「いいものの本質は、いかなる時代においても変わらない」byパワーズ ■前スレ 【入門】Common Lisp その8【質問よろず】 toro.2ch.net/test/read.cgi/tech/1309940115/ ■Wiki wiki.fdiary.net/lisp/ (id:guest pass:cl) cl.cddddr.org/ tips.lisp-users.org/common-lisp/
- 2 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 05:04:54.94 ]
- アセンブリとCommon Lispの関係は?
- 3 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 05:26:00.37 ]
- Common Lispでウェブアプリ書いてる人いる?
- 4 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 05:38:24.33 ]
- >>2
質問の内容が良く分からないけど、ネイティブコードにコンパイルする処理系なら、 内部でアセンブリ言語を中間形式として使ってたりするよ。SBCLとかCCLとか。 >>3 事例があるか、って話ならGoogleに買収されたITAが商売でやってたし、 日本でいるか、って話ならpaserveとかHunchentootとか使ってやってる人はいる。
- 5 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 10:11:56.10 ]
- ポール・グラハムおじさんを忘れちゃいけない
- 6 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 11:21:39.40 ]
- グラハムの話はウェブ黎明期の話だからな
今から新規にウェブアプリを開発するときにCommon lispを 使うのはかなりの冒険だろ
- 7 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 11:49:41.83 ]
- clackを忘れたら可哀そうだよー。
深町さん、はてなをLispに染めてくれんかな。
- 8 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 16:13:57.08 ]
- Lucid Common Lispはよくできていたな。
- 9 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 16:57:33.54 ]
- ***でSTGを作りますが何か?:いで庵
www.usamimi.info/~ide/programe/stg_doc/index.html common lispでGUIシューティング・ゲームを動かすみたい land of lispはCUI上のゲームだったっけ
- 10 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 17:34:44.27 ]
- >>9
これFFIなのかな FFIで呼び出した先で落ちたりすると結構涙目なデバッグする羽目になることあると思うのだけど頑張ってほしいな
- 11 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 02:29:23.17 ]
- Lisp界隈の進歩が亀のようにノロい理由として、
すぐに俺実装を作りたがって開発リソースが分散しがちというのが 大きな理由としてあると思っている。例えば clojure-py を見ろ。
- 12 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 07:14:56.04 ]
- 何度目だこれ
- 13 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 12:06:07.77 ]
- 俺実装を作るってのもニーズの一つだから良いんよ。
あとスレチなんよ。
- 14 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 19:21:02.62 ]
- 自分はcommon lispの初心者にPAIPやCLtL2など限られた書籍をまず読ませる、
とどなたかわかりませんが書いていた覚えがあるのですが、 ご存じの方はいらっしゃいますか?
- 15 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 22:46:19.82 ]
- CPUがi7の場合
並列実行できると高速になるはずなのですが sbclはスレッドが不安定とも聞きます i7で一番高速な処理系はどれになるのでしょうか
- 16 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 23:05:05.36 ]
- >>15 OSは?
- 17 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 23:24:39.36 ]
- >>15
>sbclはスレッドが不安定とも聞きます ソースはどのあたり?
- 18 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:42:35.40 ]
- >>15
突っ込みどころは捨て置くとしても最速はFranzだと思うぞ 高いけど
- 19 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:42:49.56 ]
- OSはlinuxです
ソースは以前にいろいろブログみてまわってた時の印象です
- 20 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:47:43.94 ]
- 1.0.54のリリースノートで
> We still don't consider threads on non-Linux platforms good enough to enable > them by default, but they're in a clearly better shape now. って書いてるし、Linux以外の環境ではあながち外してもないんじゃいか。 とはいえ、>>15のソースは別口だとは思うけど。 この所SBCLはリポジトリに動きがない。みんな忙しいんだろうか。
- 21 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:52:29.17 ]
- >>18
残念ながらAllegro CLはWindows以外ではネイティブスレッド非対応。 ユーザレベルスレッドだから、マルチコアでスケールしたりしないはず。 cl.cddddr.org/index.cgi?Allegro%20Common%20Lisp common-lisp.net/~dlw/LispSurvey.html www.franz.com/support/faq/#s-mp
- 22 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 01:02:18.88 ]
- >>21
Windows だけでってのは珍しいな。
- 23 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 01:17:04.26 ]
- androidでcommon lispを使った開発してる人
いますか? ググってみたところecl,abcl、cclあたりが候補になるのかな? あとsl4aというスクリプト実行環境を 利用する手もあるみたいです。 どれも敷居がたかそうだけど、lispで android開発できたら素敵だなっと。
- 24 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 04:30:03.42 ]
- >>23
CommonLispでなくて良いならClojureがswank丸ごと動くのでSlime使って開発できたりするよ
- 25 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 23:34:50.53 ]
- 数値を受け取り、
1桁なら0を10の位に挿入して文字列として、 そうでなければそのまま文字列として返す処理はどう書けばよいですか? (defun num->string (i) (if (<= 10 i) (princ-to-string i) (format nil "0~A" i))) こう書いてみたのですが、princ-to-string と format が似たようなことをしているので 他の書き方は無いかと気になりました princ-to-stringとformatのどちらかを書かずに同じ結果を取得できないものでしょうか
- 26 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 23:42:34.89 ]
- formatの書式指定で出来る。
- 27 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 23:49:19.25 ]
- ~2,'0d
- 28 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 23:49:48.10 ]
- (format nil "~2,1,,'0@A" 1)
かな。
- 29 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 00:19:45.06 ]
- >>26-28
ありがとうございます。>>28でOKでした。
- 30 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 19:48:12.32 ]
- CLAZY: Lazy Calling in Common Lisp
common-lisp.net/project/clazy/ ここでthunkというものが出てくるのですが、なぜthunkというものを 使おうとするのでしょうか?
- 31 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 20:54:29.68 ]
- >>30
delayとforceが何をするものかを考えれば 簡易的な実現の一つとして、例えば (defmacro delay (expr) `(lambda () ,expr)) (defun force (thunk) (funcall thunk)) というのもありだと分かるだろう。
- 32 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 21:01:55.71 ]
- en.wikipedia.org/wiki/Thunk_(functional_programming)
最初の方だけ読めばいいよ
- 33 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 15:53:53.81 ]
- >>31-32
ありがとうございます。理解できました。
- 34 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 01:20:38.04 ]
- (defun hoge ()
" ここにコメントを書く " foo) コメント部分に"とかを含めたい時ってどうやるんでしょ? Pythonみたいに"""みたいなことって出来るんでしょうか?
- 35 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 05:53:51.52 ]
- 評価されるならいくつか逃げ道思い付くけど、docstringは「not evaluated」だし、
\でエスケープするしかないんじゃなかったっけ。 奥義のリーダーマクロを使えばどうとでもなるとは思うけど。 CL-INTERPOLに望みの機能があった気が。 weitz.de/cl-interpol/
- 36 名前:デフォルトの名無しさん [2012/03/20(火) 10:07:11.65 ]
- 関数の途中で処理をstopさせたいのですが。
C言語のreturnのように、途中で処理を戻す方法はありますか? (defun test-func () <中略> (if flag (message ”stop”) (message ”continue”)) <中略> )
- 37 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 10:26:15.55 ]
- >>36
(defun f () (dotimes (n 10) (when (= n 5) (return-from f)) (print n))) 多分、return-fromが期待してるものだと思う。 www.lispworks.com/documentation/HyperSpec/Body/s_ret_fr.htm ただ、最近は、loop以外ではあまりreturn-fromって使わないと思う。
- 38 名前:36 mailto:sage [2012/03/20(火) 14:01:04.14 ]
- >>37
ありがとうございます。助かりました。
- 39 名前:36 mailto:sage [2012/03/20(火) 21:26:44.25 ]
- >>37
すいません。以下をEmacsの上で実行したのですが、 (defun temp (x) (if x (return-from temp 'dummy)) 44) (temp nil) => 44 はうまく行くものの、 (temp t) のほうは、以下のようにエラーが出てしまいます。 Debugger entered--Lisp error: (no-catch --cl-block-temp-- dummy) 正常終了してくれると助かるのですが。
- 40 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 22:17:01.66 ]
- >>39
GNU Emacs Lispリファレンスマニュアル: Catch and Throw www.geocities.co.jp/SiliconValley-Bay/9285/ELISP-JA/elisp_127.html >Common Lispに関した注意: Common Lispを含むほとんどの他のLispには、 >非逐次的に制御を移す方法がいくつかある。 >たとえば、return、return-from、go。 >Emacs Lispにはthrowしかない。 common lispの関数がemacs lispにあるとは限らない一例だね
- 41 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 22:21:45.26 ]
- Lispでオブジェクト指向プログラミングをやるときのスタイルについて質問です。
CLOSでオブジェクト指向をやろうとすると、オブジェクトのスロットの値の変更が必要になったりしますが、 Lisper的には普通にsetfで代入してしまうのか、あるいは変更する度に新しいオブジェクトを作ってそれを渡したりするのでしょうか。 そもそも関数プログラミングとオブジェクト指向やクロージャって相容れないように思えます。
- 42 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 22:40:53.03 ]
- >>39
(require 'cl) でreturn-fromを使えるようになるけれど、 elispのdefunはブロックを作らないので、 (defun temp (x) (block temp (if x (return-from temp 'dummy)) 44)) とするか、Common Lispのdefun互換のdefun*を使って (defun* temp (x) (if x (return-from temp 'dummy)) 44) ここまで書いといてなんだけれど、elispに関してはこっちで Emacs Lisp 3 toro.2ch.net/test/read.cgi/tech/1191875993/
- 43 名前:36 mailto:sage [2012/03/20(火) 23:15:25.05 ]
- >>40
>common lispの関数がemacs lispにあるとは限らない一例だね あー、なるほど。 >>42 何から何まで親切にありがとうございました。
- 44 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 23:19:46.67 ]
- いいってことよ!
- 45 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 23:25:16.97 ]
- >>41
CLOSは普通に代入するスタイルですねー。 ただし、仰るような、関数的なオブジェクトシステムも存在します。 自分は以前Schemeで書かれたものをちらっと見掛けた程度ですが。 それと、OOPはさておき、クロージャは関数プログラミングでは不可欠な概念だと思います。 これがないと、例えばHaskellでもモナドのbindができなくて困るんじゃないでしょうか。
- 46 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 23:28:00.07 ]
- 被るし、良く分からんのだけど、聞いた話の受け売りで。
>41 CLの基本データ構造はミュータブル。 racket,clojureはイミュータブル。 ・・・らしい。 イミュータブル(純粋な関数型)とオブジェクトの話は、CLではあまり関係ないかも。 またイミュータブル中心でも、ocamlやscalaみたいに、直交させてるのもあるし、clojureみたいに別の方法で代用させたりしてるのもある。 クロージャーはウィキぺさんに書いてあるみたいに言語によって扱いが違うかも。 ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3 そして純粋な関数型でも、限定継続みたいな手法で、複雑な制御構造を復活させたりしてる。
- 47 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/20(火) 23:51:13.61 ]
- >>41
例えば C++11 に導入される lambda 構文を見てみると、 実態はオブジェクトに過ぎない。 cpplover.blogspot.com/2009/12/lambda.html クラス定義をちょろっと省略できるだけの構文糖だ。 C++ は GC を前提としていないので変数キャプチャのルールが少しばかり面倒だが、 要するにクロージャとオブジェクト (レコード) は抽象化の仕方が違うだけで 変数の束を閉じ込めるという意味では同じとも言える。 C++ で lambda が導入できるなら逆に Lisp でオブジェクト (レコード) とメソッドで オブジェクト指向するのも別にアリじゃね? クロージャとオブジェクトの関係を説明した面白い記事があるので紹介しておく。 www.ibm.com/developerworks/jp/opensource/library/itm-progevo3/index.html www.ibm.com/developerworks/jp/opensource/library/itm-progevo4/index.html
- 48 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 01:18:50.29 ]
- CLじゃ、標準だから当たり前だけど、CLOSは普通に使われてるんだよね。
自作オブジェクト指向システムも良いかもしれないけど、 自作ライブラリには、もれなく自作オブジェクト指向システムも付いてくることになったら正直辟易
- 49 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 01:53:19.98 ]
- クロージャは評価される度に内部状態が変わるような例題のイメージが強かったので副作用必須かと思ってけど、実際はそうでもないのか
- 50 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 06:06:37.80 ]
- >>49
(let ((n 0)) (defun f () (print (incf n)))) とかのことですか? この手のコードは、変数のエクステントが分かりやすいから良く例に使われますけど、 関数fに参照透明性がない(副作用がある)のは、単に破壊的変更のせいです。 (let ((n 0)) (lambda () n)) のような形でもクロージャは良く使われますが、この式が返す関数に副作用はありません。
- 51 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 06:27:42.40 ]
- >>50
流石に例が不親切だった気がするので、もう少し実際のコードに出てきそうな例を。 (defun x+-all (x l) (mapcar (lambda (y) (+ x y)) l)) こんな感じで、レキシカル変数を参照することは多いです。
- 52 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 10:23:39.39 ]
- これくらいじゃないとクロージャーっぽくないと思う
(defun x+-all (x l) (mapcar (lambda (y) (lambda () (+ x y))) l))
- 53 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 08:34:48.40 ]
- >>49
λ式の評価器に必要なのがクロージャですから。 funarg問題のために。
- 54 名前:デフォルトの名無しさん [2012/03/23(金) 21:01:06.44 ]
- 任意の数の引数を取る関数に、一個一個引数をつけるのではなく、
リストか何かでまとめて渡したいのですが、どう記述すれば良いですか? (setq item1 '(item ”1”)) (setq item2 '(item ”2”)) (setq item3 '(item ”3”)) (widget-create 'radio-button-choice item1 item2 item3) の代わりに、 以下のように記述したいのですが。 (setq itemList '(item1 item2 item3)) (widget-create 'radio-button-choice 'itemList);; //NG
- 55 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 21:19:50.26 ]
- apply?
- 56 名前:54 mailto:sage [2012/03/23(金) 22:42:16.67 ]
- >>55
applyとwidget-createの組み合わせだとうまく行きませんでした。 (apply 'widget-create 'radio-button-choice '(item1 item2 item3)) ;;NG (widget-create 'radio-button-choice item1 item2 item3) ;;OK 以下だとうまく行ったのですが。 (defun seki3 (x y z) (interactive ”r”) (eval (* x y z))) (apply 'seki3 '(2 3 4)) ;;OK (apply 'seki3 2 '(3 4)) ;;OK widget-create関数の使い方として以下を参考にしています。 なんとかリストで渡して選択画面を作りたいのですが。 www.dina.kvl.dk/~abraham/custom/widget.html#SEC16
- 57 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 23:01:52.31 ]
- >>56
Emacs Lisp 3 toro.2ch.net/test/read.cgi/tech/1191875993/ (setq itemList '(item1 item2 item3)) だと item1などが評価されない。 (setq itemList (list item1 item2 item3)) (apply 'widget-create 'radio-button-choice itemList)
- 58 名前:54 mailto:sage [2012/03/23(金) 23:33:47.68 ]
- >>57
できました。ありがとうございます。
- 59 名前:デフォルトの名無しさん [2012/03/24(土) 06:22:34.52 ]
- ごく基本的に質問ですみません。
リストのn番目の要素の値を変更はどのように書けば良いのでしょうか? たとえば、 (setq x '(”a” ”b” ”c” ”d”)) というリストがあった場合に、"c"の値を"C"と変更するにはどう書けば良いのでしょうか?
- 60 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 06:28:40.96 ]
- >>59
www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp10.html#chap20 とか参照
- 61 名前:59 mailto:sage [2012/03/24(土) 06:57:45.55 ]
- >>60
ありがとうございます。
- 62 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 19:47:28.72 ]
- >>59
(setf (car x) "1") とか (setf (nth 2 x) "2") とか… function ではなく accessor と分類されているオペレーターは setf と組み合わせて 破壊的操作に使用可能 詳細は以下の 5.1.1 と 5.1.2 www.lispworks.com/documentation/HyperSpec/Body/05_a.htm
- 63 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 16:47:20.88 ]
- emacsのslimeでcommon lispのソースを編集している際、
slime-eval-last-expressionで任意のs式を評価した結果(返り値)を そのs式の直後に改行して結果を貼り付けることはできないでしょうか。 今はソースのs式をコピーしてslimeのreplで評価し、 その結果をソースに手作業で貼り付けおり、面倒です たとえば(ceiling 1.1)とあるとき (ceiling 1.1) ;; result: 2 ;; result: -0.9 こういうふうに結果をs式の後に追記したいのですが、何か方法はありますか。
- 64 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 07:09:50.36 ]
- C-u M-x slime-last-expression
- 65 名前:デフォルトの名無しさん [2012/03/27(火) 07:14:32.67 ]
- slime-eval-print-last-expression
- 66 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 07:15:22.35 ]
- 間違えてageた上に遅れたorz
- 67 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 17:15:23.32 ]
- >>64-66
ありがとうございます。捗るようになりました。
- 68 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 17:32:57.87 ]
- M-x slime-scratch っていう手もある
- 69 名前:デフォルトの名無しさん [2012/03/27(火) 22:16:40.23 ]
-
CommonLispでclojureの -> みたいな関数ありましたでしょうか?
- 70 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 23:04:33.45 ]
- www.lispworks.com/documentation/HyperSpec/Front/X_Master.htm
で確認する。 もしくは、slimeで、 -> の上にカーソルを持っていき、M-x slime-hyperspec-lookup すると ミニバッファに->が表示され、スペースや、リターンでは、[No match]になる。 つまり標準にはないということが分かる
- 71 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 23:16:01.18 ]
- >>69
同じような機能のものってことなら、CommonLispにはないんじゃないかな Clojureのはメタ情報を活用してるから、同じ使い勝手のものを再現するのはなかなか難しいかも
- 72 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 23:49:05.61 ]
- Clojureの -> (arrow macro) を使うと
(list (int (Math/sqrt 25))) を (-> 25 Math/sqrt int list) と書けるのか
- 73 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 17:20:39.81 ]
- paipとpclを読み終わってcommon lispでたいていのことはできるようになったと思います
そこで質問しますが、common lispのスキルを上げるというかステップアップするには どういうものに取り組めばよいでしょうか? 2,3年で廃れてしまうかもしれない流行に左右されるよりも、 10年20年先でも通用するような新しい試みが何かあれば知りたいです
- 74 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 17:58:32.17 ]
- 単にCommon Lispの知識が得たいなら、リーダーマクロやコンパイラマクロ、
パッケージやCLOS、MOPなどの細かい機能について調べれば良いと思うけど、 そういうこと? あとはマクロの応用とか。好みから微妙に外してる気がするけど。 現在のLispの世界では、あまり先進的な言語機能って研究されてないと思う。 Common Lispは今進化が止まってるし。Schemeのhygienic macroくらい?
- 75 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 18:30:00.45 ]
- 処理系の実装やハック。有名なソースの読解やオープンソースやブログでの公開。
他には計算機科学系の論文でも漁ってCommon Lispの機能で実装してみるとか? 数年先にどんな技術が通用するかなんて分からんよ。 それに言語は目的があって使うものだから、言語自体のスキルアップの意味が分からん。 先進的な機能はライブラリとして実装されるから、言語自体の進化には見えないだけ。
- 76 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 19:03:10.94 ]
- さっき思い付いたけど、限定継続とかは割とLisp方面でも積極的に研究されてる気がする。
元ネタはFilinskiの論文? まあこっちもSchemeなんだけども。 言語自体を深く知ってもあまり意味がないことには同感。 他の言語で基礎はもうできあがってて、単にCommon Lispに親しみたいのか、 言語の機能は把握したので、次にアルゴリズムやデータ構造を知っていきたいのか、 その辺も教えてもらえれば、みんなもっと適切な助言をしてくれるんじゃないかな。
- 77 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 20:32:25.56 ]
- 73です 皆さんありがとうございます
>>74 処理系自体を改変することよりも、使い方を磨こうと思っています。うまく言えなくてすみません。 >>75 >先進的な機能はライブラリとして実装されるから、言語自体の進化には見えないだけ。 これは盲点でした。たしかにそうですね そして、paipを読んで強く思ったのですが、 >>76さんのおっしゃるところのアルゴリズムやデータ構造が知りたい内容だとわかりました。 それらを体系的に(試しながら)勉強できる、(common)lispを使う教材があれば知りたいです。
- 78 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 20:50:13.66 ]
- ちょっと目標が遠大すぎる気もするし
まあこんなとこから始めて様子を見たらどうだろう www.geocities.jp/m_hiroi/xyzzy_lisp.html
- 79 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 23:48:51.63 ]
- いまさらアルゴリズムやデータ構造を知りたいのはプログラム自体の初心者か。
言語毎の差異は小さいから、アルゴリズム系の本を買ってCommon Lispで実装すると良いよ。 逆引きCommon LispやCommon Lisp CookBookのコード例も参考になる。 あとは定評のあるソースをたくさん読んで、とにかく何か自前で書く。 どの言語でも入門がすんだ後の本はあまりない。他人のソースを参考に自前で書くのが一番。 あとOn Lispは必読。
- 80 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 08:10:18.10 ]
- 限定継続の勉強ならSchemeのほうがいいんじゃないかな。
限定じゃない継続を使ってさくっと実装できるし。
- 81 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/03/29(木) 23:04:37.03 ]
-
>>70 >>71 無いですか。わかりました。ありがとうございました。
- 82 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/03/31(土) 14:57:12.70 ]
- (setq allList '(("a" . ("a1" "a2" "a3")) ("b" . ("b1" "b2" "b3")) ("c" . ("c1" "c2" "c3"))))
上のような連想リストallListのなかの、"b"に対応する配列を差し替えたいのですが、 以下の(1)のように直書きするとうまく行くのですが、(2)のように(setf (nth 1 allList) '("b" . bList));と実行すると、 (3)以降を実行するのに、Wrong type argument: sequencep, bListとエラーが出ます。 どのように記述すればできますか? (setf (nth 1 allList) '("b" . ("b01" "b02" "b03" "b04")));;(1)OK (setq bList '("b01" "b02" "b03" "b04")) (setf (nth 1 allList) '("b" . bList));;(2)NG (setq myList (cdr (assoc "b" allList)));;(3)bの内容の表示 (setq i 0) (while (< i (length myList)) (message (concat "myList(" (int-to-string i) "):" (nth i myList))) (setq i (+ i 1)))
- 83 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 15:13:17.35 ]
- >>82
(assoc "b" allList :test #'equal) www.lispworks.com/documentation/HyperSpec/Body/f_assocc.htm#assoc www.lispworks.com/documentation/HyperSpec/Body/17_ba.htm
- 84 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 22:59:57.73 ]
- concatで怒られてるんじゃね?
'("b" . bList) だと bListが評価されないから (list "b" . bList)に置き換えてみ。
- 85 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 23:15:35.66 ]
- >>84
間違えたorz (cons "b" bList) か。
- 86 名前:82 mailto:sage [2012/03/31(土) 23:15:56.58 ]
- >>83
ありがとうございます。 >(setf (nth 1 allList) '("b" . bList));;(2) (2)のbListになにか符号をつけるなりして、(1)と同じかたちで読み込ませることはできるのでしょうか?
- 87 名前:82 mailto:sage [2012/03/31(土) 23:17:18.54 ]
- あ、ちょうどタイムリーに回答いただけました。試してみます。ありがとうございました。
- 88 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 11:55:56.24 ]
- herokuでsbclで動くのかな?
www.slideshare.net/mtraven/lisp-in-the-cloud
- 89 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 12:01:58.56 ]
- https://github.com/mtravers
- 90 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 12:12:50.47 ]
- >>88
buildpack使って書いたみたいね。 https://devcenter.heroku.com/articles/buildpacks
- 91 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 12:18:17.88 ]
- >>89
これはClozure CLベースで、それを元に作った https://github.com/jsmpereira/heroku-buildpack-cl がSBCLベースだな。
- 92 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/02(月) 18:41:37.93 ]
- hunchentootについて教えて下さい。
複数のサブドメインを一つのサーバで扱おうと考えています。 cc.bb.com://AA/BB.html => cc.bb.com://cc/AA/BB.html の様にしてサブドメインをディレクトリに変換したいのです。 hunchentoot:hostでドメイン名が取得出来る事は分かったのですが、 うまくフック出来ません。 (defmethod handle-request :before ((*acceptor* hunchentoot::acceptor)(*request* hunchentoot::request))...) (defmethod hunchentoot:process-request :before ((*request* hunchentoot::acceptor))...) 共に全く引っかかりません。(一度も実行されないって事です) あと、この変換後の値で通常のディスパッチをさせたいのですが、そのやり方も教えて頂けませんでしょうか。 ググってもうまくサンプルが見つけられません。HUNCHENTOOTのドキュメントは簡単過ぎて私には全く役に立ちません。 ちなみにLISPもCLOSもWEBアプリケーションも初心者ですんで見当外れな事を書いてるかもしれませんので 目的が達成出来るなら手法にはこだわりません。ヒントで構いませんのでお願いします。
- 93 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 19:48:07.09 ]
- Apacheやnginxをリバースプロキシに仕立てた方が楽な気がする。
コンテンツごとに別々のacceptor作って。
- 94 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/02(月) 20:51:44.84 ]
- >>93
ありがとうございます。 それも検討してみます。Apacheなんかで受けて各々振り分ける形ですよね。 あとは全てのアクセスを引き取って自分でディスパッチャー実装しちゃうとかも考えています。 レンタルVPSなんでメモリーがタイトなんですよ。出来たら裏で重い処理を走らせたいし。 アクセスはほとんど無いんで勿体ないってのもあります。 やり方さえ分かれば数行で出来る処理だと思うんだけどいかんせん資料が見つからないんですよ。 全称関数に:beforeを付ければ処理に割り込めるってのはあってます? hunchentootのソースコード読めば理解出来るものでしょうか? googleコードサーチも終わっちゃったんで、サンプル探すのに koders上でhunchentootで検索しても25(重複入れても59)件しか無いとかどうしましょう。 あと、PORT指定なんかしてたんで混乱してました。 cc.bb.com/AA/BB.html => cc.bb.com/cc/AA/BB.html ですね。自分でも笑っちゃいます。
- 95 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 22:28:50.87 ]
- なるほど。じゃあ、hunchentoot:acceptor-dispatch-requestの特殊化は?
適当にacceptorを継承したクラスを作って、それ用のacceptor-dispatch-requestを定義して、 そのメソッドの中でrequestのホストを見て処理を分岐すれば良さそうな気がする。 acceptor.lispとかeasy-handlers.lispに書いてる既存の定義を見ればやり方は分かると思う。 流し読みなんで外してたらごめん。
- 96 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 22:36:28.40 ]
- hunchentoot-vhost.lispってのがある。
- 97 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 22:43:35.76 ]
- これか。
> (ql:system-apropos "vhost") #<SYSTEM hunchentoot-vhost / hunchentoot-vhost-20110418-git / quicklisp 2012-03-07>
- 98 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/02(月) 23:34:26.97 ]
- >>95
流石です。発想が柔軟ですね。 私の中ではまだどうもLISPとオブジェクト指向が繋がっていないんですよ。 コードまで参照して下さったのですか? 理屈の上ではそれで行けそうです。あとは私の努力次第ですかね。 ありがとうございます。 >>96 ありますね。これは用途的にはバッチリみたいなんですが 使い方が簡単には見つかりませんね。探してみます。 ソースは短いんですけど私には難しいです。 >>97 お陰様でQLでロードまでは出来ました。
- 99 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 00:27:47.14 ]
- >>98
サンプルコード書いたよー。 paste.lisp.org/display/128721 hunchentoot-vhostは~/quicklisp/dists/quicklisp/software/hunchentoot-vhost-20110418-gitに READMEがあるので、そこに使い方書いてるよー。
- 100 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 00:40:29.33 ]
- script-nameの変更ミスってたので修正。
paste.lisp.org/display/128725
- 101 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/03(火) 01:52:24.31 ]
- >>99
vhostのそれをずっと見ていたのですがserverに何入れるのかとか ずっと悩んでいました。hunchentoot:serverってあるのに。。。 LISPのドキュメントやエラーメッセージなんか今一つコツが掴めません。 エラーなんかもパラメタの数が違うとかは見つかるのですが どこのエラーだか見当もつきません。書いてあるのですかね? >>100 素晴らしい! localhostと127.0.0.1で切り替わりました。これで行きたいと思います。 わざわざサンプルまでありがとうございます。 hunchentoot:acceptor-dispatch-requestなんですね。 もう一つ下だったか。。。
|

|