1 名前:デフォルトの名無しさん [2008/07/12(土) 12:43:33 ] lispを触ってみたい入門者のQ&A 初心者のQ&A 本スレでは恥ずかしくて聞けない人のQ&A 本スレは高度すぎて割り込めない人のQ&A linuxでなくてwindowsでやりたいんですが・・・Q&A lispを使用してC#やJAVAの代替にするための方法(おまけ) ま、ゆっくりたりましょう。 「いいものの本質は、いかなる時代においても変わらない」byパワーズ (list (url pc8.2ch.net/test/read.cgi/tech/1101386936/l50 :part 1) (url pc11.2ch.net/test/read.so/tech/1140012484/l50 :part 2) (url pc11.2ch.net/test/read.so/tech/1181479267/l50 :part 3) (url pc11.2ch.net/test/read.cgi/tech/1201402366/l50 :part 4))
751 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 13:46:44 ] はてなでみつけたけど、こんなのあるんだな。 page14.auctions.yahoo.co.jp/jp/auction/s91370712
752 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 15:14:51 ] >>751 オクだからLispMachineでも出てるのかと思ったら 噴いたじゃねぇかゴルァ
753 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:24:21 ] こっちなら色んな所にありそうなんだがな。 ttp://dl.getdropbox.com/u/215714/20080419193048.jpg
754 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 04:24:30 ] 上品な大人っぽい雰囲気の『CLISP』。 大人っぽい括弧が括弧良くコードに落ち着きを与えてくれます。 お洒落な関数型や手続き型のような雰囲気があります。CLOS、 MOP、FFIなどお仕事を選ばないデザインも長く飽きずに お使いいただける要素かと思います。
755 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:56:49 ] 大量のハッシュの設定が面倒だったので一気に指定できるマクロを作成しました 修正できる所をご教授願います。 (defmacro sethash (table key word) `(setf (gethash ',key ,table) ,word)) (defmacro multiple-sethash (table &rest key-word-lst) `(progn ,@(mapcar #'(lambda (pair) `(sethash ,table ,@pair)) (group key-word-lst 2)))) (defun group (source n) (if (zerop n) (error "zero length")) (labels ((rec (source acc) (let ((rest (nthcdr n source))) (if (consp rest) (rec rest (cons (subseq source 0 n) acc)) (nreverse (cons source acc)))))) (if source (rec source nil) nil)))
756 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:10:15 ] >>755 こうすると hello! が2回表示されるよ? On Lisp の「マクロのその他の落し穴 」参照。 (defparameter *hash* (make-hash-table)) (defun my-hash () (format t "hello! ") *hash*) (multiple-sethash (my-hash) :foo 1 :bar 2)
757 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 03:36:55 ] やることの割に長いのがいかんよ。これでよくない? (defmacro puthashmany (table &rest key-and-value-list) `(let ((tbl ,table) (lst ',key-and-value-list)) (loop for (k v . r) on lst by #'cddr do (setf (gethash k tbl) v))))
758 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 04:11:47 ] ボケてた。setfを並べるのが目的か。 (defmacro puthashmany (table &rest key-and-value-list) (let ((tbl (gensym "TBL"))) `(let ((,tbl ,table)) ,@(loop for (k v . r) on key-and-value-list by #'cddr collect `(setf (gethash ,k ,tbl) ,v)))))
759 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 08:26:59 ] こんな処理が遅いのですが、なぜなんでしょう? (defun speed-test (times) (do ((i 0 (1+ i)) (sum 0 (+ sum i))) ((= i times) sum))) 実行してみると・・・ CL-USER> (time (speed-test 10000000)) Real time: 5.828125 sec. Run time: 5.578125 sec. Space: 159668340 Bytes GC: 250, GC time: 1.265625 sec. 49999995000000 5秒以上かかります。Javaだとだいたい100msで終わるのですけど。 Spaceをいっぱい食っているのもよく分かりません。環境はCLISPです。
760 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 10:49:25 ] >>759 とりあえず確認。 コンパイルはした?
761 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 12:23:01 ] >>759 うちのチープマシンじゃ clispの場合コンパイルしても1秒かかる orz sbclだと0.12秒
762 名前:579 mailto:sage [2008/10/03(金) 12:25:44 ] はい、(compile 'speed-test)はしました。 さらに、ちょっと合っているか分からないですけど、 更にこんな感じでチューニングしてみました。 (defun speed-test (times) (declare (optimize (speed 3) (safety 0))) (declare (fixnum times i sum)) (do ((i 0 (1+ i)) (sum 0 (+ sum i))) ((= i times) sum))) でも、何にも効いてないような・・・。 CL-USER> (compile 'speed-test) WARNING: SPEED-TEST is already compiled. SPEED-TEST NIL NIL 実行。 CL-USER> (time (speed-test 10000000)) Real time: 6.28125 sec. Run time: 5.90625 sec. Space: 159668340 Bytes GC: 249, GC time: 1.578125 sec. 49999995000000 逆に遅くなってますね・・・。
763 名前:579 mailto:sage [2008/10/03(金) 12:49:48 ] あれ?>>761 さんの環境だと結構速いんですね。 とりあえず、私の書き方が悪いわけじゃなさそうだということが分かって良かったです。 ちなみに末尾再帰で書いてもあんまり改善しませんでした。というか、遅くなりました。 (defun speed-test (times sum) (if (zerop times) sum (speed-test (- times 1) (+ sum times)))) CL-USER> (compile 'speed-test) WARNING: SPEED-TEST is already compiled. SPEED-TEST NIL NIL CL-USER> (time (speed-test 10000000 0)) Real time: 6.84375 sec. Run time: 6.328125 sec. Space: 159999132 Bytes GC: 250, GC time: 2.25 sec. 50000005000000 CL-USER>
764 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 13:44:29 ] >>763 clispは末尾再帰を最適化しない(ことが多い? 全然しないのか少しはするのか知らない)。 末尾再帰の最適化をしない処理系で期待しても無駄というもの。 disassembleしてみりゃすぐわかるから確認すれ。
765 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:34:30 ] >>763 761だけどclispでコンパイルしないと12秒位かかるんよ,(compile 'speed-test)して1秒
766 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:40:23 ] x86_64 clisp 2.42でだけど ちなみに763のコードはコンパイルしないとスタック足りなかった。 [1]> (defun speed-test (times) (do ((i 0 (1+ i)) (sum 0 (+ sum i))) ((= i times) sum))) SPEED-TEST [2]> (time (speed-test 10000000)) Real time: 10.158625 sec. Run time: 10.16 sec. Space: 0 Bytes 49999995000000 [3]> (compile 'speed-test) SPEED-TEST ; NIL ; NIL [4]> (time (speed-test 10000000)) Real time: 0.780928 sec. Run time: 0.78 sec. Space: 0 Bytes 49999995000000 [5]>
767 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:57:39 ] >>794 clispはコンパイルしたら末尾再起はループに展開されるぞ
768 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:50:20 ] 794です。数日先のみ来から来ました。 767 さん。コメントありがとうございます。知らなかったので大変助かりました。 794で悩んだことはおかげさまで解決しました。
769 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:57:28 ] メモリ使用量が多いのは most-positive-fixnum より多きい数字の計算にはメモリを消費するから。 ループを減らして結果が most-positive-fixnum 以下になるようにすると消費メモリが 0 になるのが確認できると思う。 性能は現在のバイトコードインタプリタならこんなもんだろう。タイトループの実行速度でJIT装備のJavaより速いなんてのはムリ。 性能が必要ならトレースキャッシュなJITが実装されるまで待つか、自分で実装するか、別の実装を使うかどちらか。
770 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 20:07:40 ] >>767 えー おれが前にやったらだめでガックリした覚えが
771 名前:579 mailto:sage [2008/10/04(土) 07:57:42 ] >>769 おお!明確な答え、ありがとうございました。 確かに小さな値に対しては速かったんです。 ちょっと処理系を変えながらいろいろ試してみたいと 思います。ありがとうございました。
772 名前:759 mailto:sage [2008/10/04(土) 07:59:21 ] あ、私は>>759 でした。今まで>>579 で書いてた。スミマセン。
773 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:03:33 ] sbclを使ってスレッドプログラミングをしています スレッド間通信をさせたいんですが なんかそういう目的のためのキューとかメールボックスとか それ系のデファクトスタンダードなライブラリってないんでしょうか asdf-installからacl-compat入れてみたんですが acl-compat.mp:queueはないみたいなんです
774 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 15:31:04 ] いつのまにかeclでmaxima動くようになってたんですね
775 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 16:48:14 ] sbclのarm portって進行中なの? それとも予定は無い? 教えて詳しい人。
776 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 23:03:47 ] 少なくともここ二年くらいはだれも手をつけていないと思う。それ以前は知らね。
777 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:57:25 ] ECL Unicodeサポート開始 ttp://sourceforge.net/forum/forum.php?forum_id=880598 ttp://sourceforge.net/project/screenshots.php?group_id=30035
778 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:53:24 ] (let ((hoge #'(lambda ~~))))と (let ((hoge (lambda ~~)))) どっちのlambdaが正しいの? 前者だと思ってるけど、GNU CLISP 2.45だとどっちでも同じ意味で通る。
779 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 00:25:41 ] どっちも正しいよ。HyperSpecで Macro: LAMBDA のページを読むといい。 (macroexpand '(lambda () ())) => #'(lambda () ()) みたいな関数に展開されるマクロとなってる。 どっちを好むかはlisperの中でも好みはわかれるところ。このマクロ導入の経緯はPCLに書いてあるよ。
780 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 00:47:18 ] ありがとう!どっちも正しいのか。 On Lispでは#'だったから疑問に思ってた。 仕様書よんでみます〜 ^o^
781 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 23:43:29 ] (test '(1 2 3 4) '(1 2 3 4 5)) とかやると (append '(1 2 3 4) '(1 2 3 4 5)) 見たいなリストが得られるマクロ(?)がほしいんだけど そのままevalに渡したら,そのまま実行できるやつ形式に出力してくれるやつ. (defmacro test (a b) `(list 'append ,a ,b)) こういう風に書いたんだけど,どうしても (APPEND (1 2 3) (1 2 3)) クオーティングされちゃうんだよな... a, bに渡されたものがそっくりそのままa, bに入るようにはかけないものか?
782 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 23:50:42 ] つ (defmacro test (a b) `'(append ,a ,b))
783 名前:782 mailto:sage [2008/10/29(水) 23:54:28 ] 名前からしてテスト系のマクロを作りたいのかな? とりあえず実践Common Lispの9章まで読んでみるといいと思うよ。 英語OKならPractical Common Lispでもいい。
784 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:09:05 ] >>781 aまたはbがコンスで、かつそのcarが'QUOTEの場合だけ、事前にもういっちょquoteしてやったらどうよ
785 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 02:37:06 ] >>783 逆だろ。 「英語がダメなら実践Common Lispでもいい」じゃないのか普通は。 原書である上にタダで読める方を後にもってくる理由がわからん。
786 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 08:33:55 ] そんな怒らなくても…日本語版しか読んでないです。やっぱり原著よまないと駄目なんですか?
787 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 08:50:17 ] >>785 言いたいことはわかる。でもその「理由がわからん」ってのは嘘だねw 「レスって何ですか?」とかの親戚。「あるべき道しか理解できないキャラ」作るの好きだよな、マって。
788 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 09:18:43 ] >>787 天然だろ。 キャラ作るという発想は陰謀論の親戚。
789 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 09:47:38 ] 言葉だけでは人は分かり合えないのさ!
790 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 10:06:32 ] >>788 なんで?
791 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 10:26:39 ] オッカムの剃刀みたいなものだ
792 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:12:08 ] 荒れてしまってごめんなさい。英語勉強してから出直します…
793 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:47:58 ] 2chで下らない煽り合いを気にしてたら禿げるぞ (defmacro test (fun &rest lists) (let ((form `(,fun ,@lists))) `(format t "~S => ~A" ',form ,form))) (test mapcar #'+ '(1 2 3) '(4 5 6) '(7 8 9)) ↓ (mapcar #'+ '(1 2 3) '(4 5 6) '(7 8 9)) => (12 15 18) こーゆーのはちょこちょこ使う。
794 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 23:12:24 ] >>793 なんでわざわざ引数わけてるの? (defmacro test (&rest form) `(format t "~S => ~A" ',form ,form)) じゃダメなん?
795 名前:793 mailto:sage [2008/10/31(金) 01:04:40 ] うわ。2行目とか全然無駄だね、なんで分けたんだろ
796 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 06:59:48 ] (test) を引数が足りないエラーにするためじゃない?
797 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:14:47 ] Lisp in a box (ttp://common-lisp.net/project/lispbox/) を入れてVista上で使いはじめところなんですが、質問があります。 グラフィック系のプログラム(3D-CADや2Dグラフ表示)を 作りたいんですが、お勧めのライブラリとかありますか? 検索でこれ(ttp://www.cliki.net/graphics%20library)を 見つけたんですが、多すぎてどれを選べません。 orz できるだけインストールが簡単なものがいいです。 お知恵をお貸しください。m(_ _)m
798 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:18:18 ] 蝶オススメ ttp://miyamuko.s56.xrea.com/xyzzy/cairo/intro.htm
799 名前:797 mailto:sage [2008/11/03(月) 01:23:54 ] >>798 ありがとうございます。 さっそく動かしてみます! 3D系のものも、何かないでしょうか・・・。 3D CADのブール演算のようなものを作りたいんですが、 そのプリ・ポストに使う予定です。
800 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 14:15:00 ] slimeでステップ実行デバックはできないのでしょうか?
801 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:12:57 ] slime上で (require :hunchentoot) すると落ちる コンソール上だと落ちない
802 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 08:16:51 ] SLIME+CLISP REPLバッファで式を評価すると --- error in process filter: slime-dispatch-event: Elisp destructure-case failed: (:presentation-start 1 :repl-result) error in process filter: Elisp destructure-case failed: (:presentation-start 1 :repl-result) error in process filter: slime-dispatch-event: Elisp destructure-case failed: (:presentation-end 1 :repl-result) error in process filter: Elisp destructure-case failed: (:presentation-end 1 :repl-result) --- みたいなエラーがミニバッファに表示されて、それから結果が返ってきます 何が悪さをしているんでしょう? Emacs側なのかそれともLisp側なのか
803 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 10:30:30 ] >>801 実行環境を書かないと同じ経験した人ですら書き込み不能と思われ
804 名前:801 mailto:sage [2008/11/05(水) 14:16:58 ] >>803 ubuntu8.04 でapt-getでinstallされるsbclとslime emacs22 を使いました hunchentootはasdfでinstallしました
805 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:52:19 ] clispでLtkを使っています。 saveinitmem関数で実行形式のGUIアプリケーションを作ったのですが これはポータブルなのでしょうか?それともダウンロードしたユーザーのマシン内にclispや tcl/tk,ltkがインストールされていないと配布しても実行できないのでしょうか? もし実行できないのならLispからGUIを呼び出したアプリケーションの 配布方法を御享受願います。ほかにもCUIのツールがあるのですが どのように配布すればいいのかわからないのでよろしくお願いします。
806 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 11:19:53 ] common lispで数値計算簡単にできるようにしようと maximaの関数をsbclから直接利用しようとしたら lapack呼ぶ関数がgclでしか動かないみたいなのだけど 数値計算したかったらgclを使えってことなんでしょうか
807 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 01:14:28 ] clispを使っているのですが ext:run-program をネストするには どのようにすればいいのでしょうか? 開発環境がdebianなので他のOSに有るのかはわかりませんが su-to-rootとという内部コマンドがあり-XオプションをつけるとX上のダイアログで rootになれさらに-c cmdオプションでcmdをroot権限で実行する事ができます。 これとLtkを利用してボタンを押すとsu-to-rootでroot権限を手に入れて cmdを実行するという事をしたいのですがその実行したいcmdにも引数が必要だと (ext:run-program "su-to-root" :arguments '("-X" "-c" "cmd" "cmd-option")) と言う風にするとcmd-optionがsu-to-rootの引数と認識されてしまいます。 そこで (ext:run-program "su-to-root" :arguments '("-X" "-c" "cmd cmd-option")) としてみても動作は同じでした。 これを解決するにはどのようにすればいいのでしょうか? よろしくおねがいします。
808 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 01:22:36 ] >>807 CLの質問じゃない気がするが。俺の環境じゃ "cmd cmd-option" で動く。
809 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 06:02:53 ] そうですか... このような微妙な質問は何処ですればいいのか....
810 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 13:31:38 ] cmuclのrequireがアプリによって動いたり動かなかったりするのはバグですか?
811 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 21:34:10 ] やっぱスレタイがよくないと思うんだ 頭のmake-thread nameが余計だ 一瞬何のスレだかわからん これにせいで明らかに失速してる
812 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 21:54:50 ] そのせいで失速したかは知らないが 前の【入門】Common Lisp そのn【質問よろず】 ってスレタイは 初心者にも優しい感じがして好きだったなあ
813 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:57:23 ] 俺も前のスレタイの方がいいと思うな 次にスレ建てするときは戻すのを希望
814 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:12:55 ] (make-thread :name common-lisp :part 5) した結果が common-lisp :part 5 というスレだよな〜とは思っていた。
815 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:21:31 ] ○ Common Lisp × common-lisp
816 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 20:41:07 ] >>812 最初にlispの情報を集める時は 入門 tourotial lisp で検索する 今のスレタイだと検索にひっかからない
817 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 20:49:36 ] tourotial は必須だよな
818 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:20:26 ] ポーランド語?
819 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:13:54 ] どうでもいい事に時間を使わない それが神のlisper
820 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:14:25 ] どうでもいいレスありがとう。
821 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 14:47:37 ] 適当にスペル間違ってもgoogleが自動補正してくれるからな
822 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 17:57:00 ] (unsigned-byte 8)のarrayのポインタを指定バイト数だけ進めるのはどうしたらよいのだろうか? サイズを制限(?)するのであればfill-pointerが使えるようだが,書込み開始のオフセット アドレスを指定する方法がわからん 誰か教えてください
823 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 21:01:33 ] >>822 make-arrayの:displaced-toと:displaced-index-offset引数を指定で可能かと ttp://www.lispworks.com/documentation/HyperSpec/Body/f_mk_ar.htm
824 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:35:30 ] GUIに関して質問です。 LTK、SDL、CLIMなどがあるということはわかったのですが、それぞれの特徴なんかを教えていただけたらと思います。
825 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:02:24 ] あLispスレ1000いったか