1 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:48:56] lispを触ってみたい入門者のQ&A 初心者のQ&A 本スレでは恥ずかしくて聞けない人のQ&A 本スレは高度すぎて割り込めない人のQ&A linuxでなくてwindowsでやりたいんですが・・・Q&A lispを使用してC#やJAVAの代替にするための方法(おまけ) ま、ゆっくりたりましょう。 「いいものの本質は、いかなる時代においても変わらない」byパワーズ
577 名前:デフォルトの名無しさん mailto:sage [2005/09/26(月) 12:17:57 ] >>576 おまえスレタイ読めるのか? スキームの宣伝は他でやれよ。
578 名前:デフォルトの名無しさん mailto:sage [2005/09/26(月) 12:20:35 ] ちなみにちゃんとしたSchemeでも継続はあんま使わないよ 別に無くてもなんとかなるレベルでしょ ただし末尾再帰は無いとコーティングスタイルにまで影響する 最適化の余地があるCommonLispならともかく、 独自LISPにはもう期待できる事が何も無い
579 名前:デフォルトの名無しさん mailto:sage [2005/09/26(月) 12:23:36 ] >>577 スキームの宣伝て何? おまえこそちゃんとレス読めよダボが
580 名前:デフォルトの名無しさん mailto:sage [2005/09/26(月) 12:28:57 ] >>578 はぁ? > 最適化の余地があるCommonLispならともかく、 > 独自LISPにはもう期待できる事が何も無い 何か言ってる意味わかんねよ。 Common Lisp系の独自LISPとかイメージできないの?
581 名前:デフォルトの名無しさん mailto:sage [2005/09/26(月) 14:26:44 ] >Common Lisp系の独自LISP イミフメ
582 名前:デフォルトの名無しさん mailto:sage [2005/09/26(月) 21:57:00 ] 見事に話が噛み合ってないな(w ちなみに漏れは580の言ってることは理解できる派ね。まぁただでさえマイナーな言語に 関わってる者同士マターリと行こうや。
583 名前:デフォルトの名無しさん mailto:sage [2005/09/27(火) 01:25:11 ] 末尾再帰の最適化をするのは Scheme だけじゃないしね。 俺も継続は無くても良いけど、末尾再帰の最適化は欲しいなぁ。
584 名前:デフォルトの名無しさん mailto:sage [2005/09/27(火) 01:36:27 ] >>583 以前話題になった気がするけど、Common Lispにおける末尾再帰の最適化は、 ・インタプリタはほとんどの処理系がやらない ・コンパイラはほとんどの処理系がやる という結果だったと思う。Common Lisp的思想からすれば順当なところだろうね。
585 名前:デフォルトの名無しさん mailto:sage [2005/09/27(火) 02:42:55 ] Scheme 勉強したてで毒されてるな. 末尾再帰の最適化はメリットばかりじゃねーんだぜ? インタプリタ上では *常に* 最適化されちゃったらデバッグしにくいだろ? Common Lisp 的思想なら,コンパイル時の最適化オプションで 制御できるほうが嬉しい. 末尾再帰の最適化を示すオプションが欲しいって話もあるけどな.事実上, speed 3 とか debug 0 にしとけばほとんどのコンパイラがやってくれっからねぇ.
586 名前:デフォルトの名無しさん mailto:sage [2005/09/27(火) 11:44:41 ] >>585 > インタプリタ上では *常に* 最適化されちゃったらデバッグしにくいだろ? これはスタックトレースが取れないとかそういう意味?
587 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 02:18:03 ] 常に最適化されちゃって選択できねーとかははやすぎる最適化の部類に感じる時がある. CL 派としては c.l.l で出てた宣言的アプローチで解決してほしいなー. 「可能な限り最適化する」「自己呼び出しとローカル関数のみ最適化」「自己呼び出しのみ」「最適化なし」 とかが宣言できるみたいな.まぁ,現状はコンパイラのマニュアルを見る必要 があるわけだけど,それで不都合あるのかっつーはなし.Common Lisp におけ る末尾再帰の最適化はだってほぼ標準だしね.
588 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 02:22:10 ] >>587 結局Common Lispの仕様の問題になるわけだよな。20年間にわたって仕様が安定 している(ANSIでわずかに変更されたところもあるが)のは利点でもあるわけだが、 そろそろ次期規格の話が出てきても良いように思う。
589 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 09:10:11 ] 元々の話が>>573 なわけで・・
590 名前:デフォルトの名無しさん [2005/09/28(水) 14:17:11 ] Schemeばかり書いてると、関数呼び出しが関数呼び出しに 見えなくなるというか、全部継続へのジャンプに見えて来るんだよな。 それに関数とブロック(let)が頭の中でブレンドされて区別されなくなる。 そうすると自己末尾呼び出しだけ特別扱いしたりするのがとても不自然に 感じる。 まあ、Common Lispの空気に合わないってのはわかる。CLで書くときは スタイルが変わるからな。
591 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 01:15:48 ] このスレこんなに人がいたのか(^_^ゝ)
592 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 03:42:33 ] >>588 仕様の問題ねぇ.改善の余地(個人的希望は >>587 な)があるとは思うが, Scheme が The Right Thing だとは思わない.なぜなら,俺には区別したい 時があるからだ.最適化する,しないは選択したい.まぁ,その選択肢が 存在するのが不自然だと言われりゃしょうがねーけどなぁ. ま,CL にも末尾再帰の最適化は実装依存だが,「ある」という事を言って おきたかったわけ.
593 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 19:03:53 ] lispファイル用の良いアイコン知りませんか?
594 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 23:27:09 ] >>593 自作すれば。 ↓雛型 (())
595 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 23:31:51 ] Planet Lisp のサイトアイコンは () だね
596 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 23:36:49 ] >>593 λ
597 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 00:34:23 ] (car cdr) なんてどうだ
598 名前:デフォルトの名無しさん [2005/10/01(土) 01:19:05 ] >>592 CommonLispで以下の相互再帰がループになる保障があるってわけじゃないでしょ? こういうとこで根本的にコーティンングスタイルに関わってくるわけ。 (defun f(a) (g a)) (defun g(a) (h a)) (defun h(a) (f a)) (f f) Schemeでトレースしたけりゃ末尾再帰の最後に適当な置石すりゃいいだけだし。 既存の処理系にも普通にバックトレースぐらい存在してるでしょ。
599 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 01:28:56 ] >>598 言いたいことはわかるけど、だからCommon Lispは駄目、Schemeが良い という話をしたいのであればスレ違い。そもそもここはCommon Lispのスレ なので、もうちょっと建設的に考えてほしい。 例えばCommon Lispで末尾再帰を強制するようなdeclareを提案するとか。 あと、念のために言っておくと相互再帰をループ化する最適化はさほど 難しくはないので多くの処理系がやっているはず。
600 名前:デフォルトの名無しさん [2005/10/01(土) 01:51:26 ] >>599 あのな、CommonLispをどうこうしようってんじゃなくて、>>573 の回答として 独自LISP勉強して作るぐらいならScheme作っとけって話。 CommonLispがどこまで最適化できるとか云々は別に興味ない。
601 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 01:55:45 ] >>598 そりゃ環境を問わずあらゆるCL処理系で動く必要のあるコードとかいうなら 仕方がないけど。元々の方向性が違うんだから仕様の問題というよりは そういうスタイルでCLを選択する方が間違ってるんでは。 ちゃんと末尾再帰を最適化する処理系を使えばいい話でしょ? 相互再帰だろうが末尾再帰だろうが基本的に違いはないよ。 cmuclでも、declareも何もせずにreplからそのままdefunして直ぐにdisassemble しても、ちゃんとジャンプになってるよ。
602 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 02:10:36 ] >>600 別に>>573 氏はおまえが使う処理系を作ろうというんじゃないと思うぞ。w おまえの好むScheme的スタイルをCommon LispスレでLISPの処理系でも 作ってみようかという奴にしつこく言う必要はあるまい。
603 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 11:21:07 ] >>598 すると,あなたは R5RS にないものは使わないのですか? 事実上標準だと主張しているのだが.メインストリームの商用 コンパイラで末尾再帰の最適化機能を持たないコンパイラがある のかと.Scheme ではコンパイルについての規格がないから, 安心してコンパイルできない!! というくらいの心配症の人なら まぁ,止めないけどね. > Schemeでトレースしたけりゃ末尾再帰の最後に適当な置石すりゃいいだけだし。 残念な結末ですね.大規模なプログラムでそれが簡単な事だお思いますか? 末尾再帰の最適化を OFF にしたら Scheme じゃないんでしょ? Scheme の処理系依存機能はよくて,CL の処理系依存機能はだめなんですか. そんな事言うなら,CLOS 相当の機能がなく,したがって安全にオブジェクトの 定義を更新できないほうが嫌だ. 再帰というトンカチを手にすると他の全てが再帰に見えてくる.ループは 再帰の特殊系だけど,本来並列動作とかもあるから (map fn lst) を見て,再帰的な実装がまず第一に頭に浮ぶならもう一度良く考えたほう がいい.
604 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 11:36:24 ] つうか,>>600 からしておかしい。 俺なんか既存の概念をくつがえすようなトンデモない 処理系を期待しちまうけどな。がんばって勉強しろーよ。 最初はショボくても独自 Lisp 上等。Lisp の進化の歴史を 学ぶもの一興。 まず自分で作ってみれば?ショボショボインタプリタとかでいいから。 つうか 573 を応援してやりたいが,情報がないな。 Lisp/Scheme の腕前と C の腕前はどーなんだろう。
605 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 12:02:37 ] 馬鹿だなおめーらは
606 名前:教えて厨 [2005/10/01(土) 16:54:07 ] 質問。 (-1 3 2 5 3 -3 -4) というようなリストがあるとしますよね。 これを ((-1 -3 -4) (3 2 5 3))というように負数と正数で別々のリストに分類したい。 これ、負数だけとりだす関数と正数だけ取り出す関数を作って、 それをlistすれば簡単にできるけど、 再帰関数ひとつだけで作る方法もあるんだよね?? それってどうやるの? letやlet*なんかでnilとかに初期化した変数って、再帰で呼び出すと 再帰呼び出し先でもまたnilとかになるの? 再帰呼び出し先で再帰呼び出し元での変数の値が引き継がれるような方法 があればうまくやれそうなんだけどなあ。 みなさんなら、どうやって再帰関数一つだけで、上のような処理を実装できますか
607 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 17:31:36 ] LOOPマクロ (defun plus-minus (list) (loop for x in list if (>= x 0) collect x into plus else collect x into minus finally (return (list minus plus)))) 再帰 (defun plus-minus (list) (labels ((iter (l plus minus) (if (null l) (list (nreverse minus) (nreverse plus)) (let ((x (car l))) (if (>= x 0) (iter (cdr l) (cons x plus) minus) (iter (cdr l) plus (cons x minus))))))) (iter list '() '())))
608 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 19:49:26 ] 質問させてください。 (setq a t) とした変数aの真偽を連想リストに入れてやりたいのですがうまくいきません。 (setq b '((res . a) (res2 . ....))) みたいにすると(cdr (assoc 'res b))はtではなくaを返すし (setq b '((res . (eval a)) (res2 . ....)))などとしても同様です。 環境はxyzzyです。どうかお願いします。
609 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 20:16:30 ] (cdr (assoc 'res `((res . ,a))))
610 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 20:29:24 ] そんな説明なしで得意げに書かれてもな・・
611 名前:& ◆6g4XpN.URU [2005/10/01(土) 20:35:27 ] >607 どうもありがとう。 ちなみにiterって初めてみるんだけど、どういう関数なの?
612 名前:608 mailto:sage [2005/10/01(土) 20:53:15 ] >>609 ありがとうございます。backquoteを使ってなんとかするということですね。 確かにまだよくわからないですが勉強します。
613 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 20:57:32 ] >>611 labelsの行をじっと見つめてみろ。
614 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 23:13:06 ] >>612 quoteしたら評価されないって言うことです。 quoteしないようにこんな感じで書けばOK (setq a t) (cdr (assoc 'res (list (cons 'res a)))) いちいちこう書くのは面倒だからbackquote構文が用意されてる って感じかな。
615 名前:デフォルトの名無しさん [2005/10/01(土) 23:15:33 ] 言っとくけど、backquoteもマクロなんだぜ? マクロって偉大だよなあ・・・
616 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 04:39:29 ] >>606 宿題だとすると labels の内部関数はつかっちゃだめかも?ということで 親切にも別解だっ. ;; 再帰関数一つ (defun plus-minus (lst &optional plus minus &aux (x (car lst)) (xs (cdr lst))) (cond ((null x) (values plus minus)) ((>= x 0) (plus-minus xs (cons x plus) minus)) (t (plus-minus xs plus (cons x minus))))) ;; メソッド一つ (defmethod plus-minus-2 ((lst null) &optional plus minus) (values plus minus)) (defmethod plus-minus-2 ((lst cons) &optional plus minus) (if (>= (car lst) 0) (plus-minus-2 (cdr lst) (cons (car lst) plus) minus) (plus-minus-2 (cdr lst) plus (cons (car lst) minus))))
617 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 09:38:28 ] (defun partition (test lis) (labels ((recur (lis in out) (cond ((null lis) (values (nreverse in) (nreverse out))) ((funcall test (car lis)) (recur (cdr lis) (cons (car lis) in) out)) (t (recur (cdr lis) in (cons (car lis) out)))))) (recur lis '() '()))) CL-USER> (partition #'(lambda (x) (>= x 0)) (list 1 -3 0 -2 9 -8)) (1 0 9) (-3 -2 -8)
618 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 10:59:40 ] (defun partition (test list) (let ((in (cons nil nil)) (out (cons nil nil))) (let ((i-tail in) (o-tail out)) (dolist (x list (values (cdr in) (cdr out))) (if (funcall test x) (setf i-tail (setf (cdr i-tail) (cons x nil))) (setf o-tail (setf (cdr o-tail) (cons x nil))))))))
619 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 11:40:15 ] (defun partition (pred lis) (do ((lis lis (cdr lis)) (in '()) (out '())) ((null lis) (values (nreverse in) (nreverse out))) (if (funcall pred (car lis)) (push (car lis) in) (push (car lis) out))))
620 名前:おしえて厨 [2005/10/02(日) 23:47:39 ] clispをwinで使ってるんだけど、lispでウィンドウやダイアログボックスを だすようなGUI作ることってできないの?できるとしたら そういう情報はどこにある?
621 名前:デフォルトの名無しさん mailto:sage [2005/10/03(月) 00:01:59 ] >>620 例えば www.wxcl-project.org/
622 名前:デフォルトの名無しさん mailto:sage [2005/10/03(月) 01:27:27 ] できるよ.(621 は試したことないの別のネタで) 自分で Windows の API を呼べばいい. A) FFI で必要な API をラップする (hocwp.free.fr/ah2cl/ とか) B) Lisp 向けの API を実装したライブラリを作る ただし,どっちもある程度 C の知識がないと難しいかもね. Corman Lisp とか AllegroCL や LispWorks といった処理系を使う手もある. AllegroCL や LispWorks はどっちも GUI ライブラリを持ってるよ.
623 名前:デフォルトの名無しさん mailto:sage [2005/10/03(月) 16:43:37 ] CommonLispにはpartitionがなかったのか…
624 名前:デフォルトの名無しさん mailto:sage [2005/10/03(月) 17:56:31 ] R5RS には remove-if すらないけどね
625 名前:デフォルトの名無しさん [2005/10/05(水) 15:05:45 ] 質問です。 (my-reverse '(1 (2 3) (4 (5 6)))) を与えたら(((6 5) 4) (3 2) 1) と、 中身が全て反転するような関数my-reverseを定義するやり方を教えてください。 お願いします。
626 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 15:14:34 ] >>625 >>513-525
627 名前:デフォルトの名無しさん [2005/10/05(水) 17:33:39 ] >>626 すいません。>>513-525 を読んでもわかりませんでした。。
628 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 18:07:07 ] (defun my-reverse (list) (let ((result '())) (dolist (x list result) (if (consp x) (push (my-reverse x) result) (push x result)))))
629 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 19:14:32 ] >>628 ありがとうございます!!
630 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 19:43:33 ] >>525
631 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 20:30:40 ] 相変わらずレベル低いよな おまえら普段何してんの?
632 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 20:35:49 ] みんな処理系は何使ってんの?
633 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 23:10:51 ] Gaucheでネットワークプログラミング
634 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 01:30:05 ] CLISP - 日常的な小物スクリプト書き SBCL - CLISP では力不足な計算用とかスレッド使いたいときとか CMUCL - 最近使ってない…互換性検証用か
635 名前:631 mailto:sage [2005/10/06(木) 01:34:37 ] おまえらレベル低すぎ 俺の使っている処理系を教えてやるから勉強汁 Ruby 1.8.3 ユーザビリティの低いもの使ってんなよ
636 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 01:51:04 ] >>634 SBCLってCMUCLよりデバッグやりにくくない?
637 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 02:14:31 ] スレッドまわり以外は特にそんな事おもわないけど? どのへんがやりにくいとおもう?
638 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 10:11:25 ] Windowsのアプリに組み込めるLisp、Schemeでいいの無いですかね?
639 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 14:34:43 ] ないから俺は自作したが。
640 名前:初心者 [2005/10/09(日) 00:25:24 ] (defun plus-minus (lst &optional plus minus &aux (x (first lst)) (xs (rest lst))) (cond ((null x) (values plus minus)) ((>= x 0) (print xs) (plus-minus xs (cons x plus) minus)) (t (plus-minus xs plus (cons x minus))))) このコードのxやxsって再帰のたびに更新されていくけど、a (defun test (lis &aux (a (first lis)) (b (rest lis))) (if (not (null (first lis))) (print b)(test b))) これのaやbは再帰しても更新されないよね・・・違いはなんなの? 再帰後にもずっと同じ値がはいったままだったり、再帰後には再帰後の 更新された値が入ったりするその違いって?
641 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 01:25:18 ] (lambda (x y &aux (a form1) (b form2)) ...) は (lambda (x y) (let* ((a form1) (b form2)) ...)) と同じ。 後半で更新されてないように見えるとしたら、それはちゃんと再帰 してないから。
642 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 08:45:59 ] >>640 ↓こんな動きになってるのは理解できてるの? CL-USER> (PLUS-MINUS '(1 -3 2)) 0: (PLUS-MINUS (1 -3 2)) x: 1 xs: (-3 2) 1: (PLUS-MINUS (-3 2) (1) NIL) x: -3 xs: (2) 2: (PLUS-MINUS (2) (1) (-3)) x: 2 xs: () 3: (PLUS-MINUS NIL (2 1) (-3)) x: () xs: () 3: PLUS-MINUS returned (2 1) (-3) 2: PLUS-MINUS returned (2 1) (-3) 1: PLUS-MINUS returned (2 1) (-3) 0: PLUS-MINUS returned (2 1) (-3) CL-USER> (TEST '(NIL NIL 2)) 0: (TEST (NIL NIL 2)) a: NIL b: (NIL 2) 1: (TEST (NIL 2)) a: NIL b: (2) 2: (TEST (2)) a: 2 b: () NIL 2: TEST returned NIL 1: TEST returned NIL 0: TEST returned NIL
643 名前:& ◆RdmUjfVKqQ [2005/10/09(日) 10:34:53 ] >641, 642 そういう動きになっててほしいけど、 printから出てくる値をみてる感じだと、 2番目のコードだと再帰前のリストのrestとったものがでてるようにみえるんだよ〜
644 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 10:54:00 ] 間違いなくコードが変だからどういう動作を意図してるのか言ってみ。
645 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 12:53:13 ] 642 は SBCL でのトレース結果だよ.CLISP でも同じだた. 意図したように動いているみたいなんで, 640 が動作させた本当のコードと入力値を述べたまえ.
646 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 14:08:21 ] >>640 が何を訊きたいのか判らんが、こう書きたかったんじゃないのか? (defun test (lis &aux (a (first lis)) (b (rest lis))) (if (not (null (first lis))) (progn (print b)(test b))))
647 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 14:40:00 ] >>646 それでも条件が逆になるけど再帰時にちゃんと lis はあたらしくなるぞ? 思うに,if の条件が意図したやつと逆になっているので期待どうりしていなかっ たとかそんな事じゃないかな.どーゆう条件でどう動いてほしかったのかを日本語 で説明してもらうのがはやいと思う.
648 名前:おすえて [2005/10/09(日) 20:21:16 ] (defun test (lis &aux (a (first lis)) (b (rest lis))) (if (not (null (first lis))) (print b)(test b))) これが、(test '(1 2 3 4 5))とやったときに 例えば (2 3 4 5) (3 4 5) (4 5) (5) みたいにならないのは、なぜ?
649 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 20:29:11 ] >>648 なぜそうなると思った?
650 名前:& ◆eDpN.64OYw [2005/10/09(日) 20:48:49 ] (defun plus-minus (lst &optional plus minus &aux (x (first lst)) (xs (rest lst))) (cond ((null x) (values plus minus)) ((>= x 0) (print xs) (plus-minus xs (cons x plus) minus)) (t (plus-minus xs plus (cons x minus))))) ↑これだと再帰のたびにxsが変わっていくから、468でもそうだろうと 思ったんだけど
651 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 21:00:36 ] 君のやりたいことは、 (defun test (lis &aux (a (first lis)) (b (rest lis))) (cond ((not (null b)) (print b) (test b)))) ってな感じかな。if の定義を再勉強!
652 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 21:04:56 ] やっぱりな.再帰とか &aux 以前に 2 つ間違いをおかしている. 1. if の構文を間違えている (おそらく) 2. 条件の中身も間違えている それって,「条件を満しているなら print で b を表示したあと再帰する」って 処理が希望のようだが,書いたコードが,「もしリストの先頭要素が nil 以外なら表示する.そうでないなら再帰する」 なので,表示は一回しかされない. (defun test (lst &aux (a (first lst)) (b (rest lst))) (if a (progn (print b) (test b)))) もしくは (defun test (lst &aux (a (first lst)) (b (rest lst))) (when a (print b) (test b))) だな.手元の参考書を if の説明をちゃんと読みなおしたほうがいい.
653 名前:& ◆QWv3R1XL8M [2005/10/09(日) 21:14:39 ] >書いたコードが,「もしリストの先頭要素が nil 以外なら表示する.そうでないなら再帰する」 なので,表示は一回しかされない. なんで?? 再帰二回目だとrestとった値がなんでnilになる???2とか3じゃないの?? ifがどうとか言う以前によくわからんのですが
654 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 21:23:19 ] 再帰しないんだから二回目もクソもないんだよ。 if の説明を確認しろっていわれてんだから素直にそうしな。
655 名前:& ◆QWv3R1XL8M [2005/10/09(日) 21:31:58 ] なるほど、わかりました。ありがとうございました。 で、 (defun test (lis &aux (a (first lis)) (b (rest lis))) (cond ((not (null b)) (print b) (test b)))) ↑これ実行できないんですけどこれは何故?
656 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 21:39:12 ] 全角空白までコピペしちゃっているからだろう. 大した手間でもないだろうから手で入力したまえ.
657 名前:おしえて厨 [2005/10/10(月) 19:51:08 ] lispのsort関数を使わないで、 オリジナルの数字リストの昇順または降順ソートプログラムを 書いてみてください。 できれば初心者でもアルゴリズムが分かりやすいような書き方でおながい
658 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 20:35:14 ] >>657 やだ
659 名前:デフォルトの名無しさん [2005/10/10(月) 20:50:39 ] xのy乗を求める問題なんだけど、どこか変なところある? include <stdio.h> #include <math.h> main() { double x,y,z; printf("x ="); scanf("%lf",&x); printf("y ="); scanf("%lf",&y); z = pow(x ,y); printf("x\ty = %lf", z); }
660 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 20:52:12 ] 頭が変かもしれんな
661 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 21:05:09 ] 書き込むスレの選択が変
662 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 04:45:21 ] >>620 面白い物見つけた。 ttp://www.geocities.jp/shido_takafumi/lisp/macro3.html Socket 経由で GUI を作ってるっぽいけど、Windows Native でも 似た様なのがあるんじゃないかな。Mac だとこういうのがある。 www.bluem.net/downloads/pashua_en/
663 名前:おしえて厨 [2005/10/11(火) 08:49:23 ] (defun small (lis) (cond ((null (rest lis)) lis) ((< (first lis) (first (rest lis))) (remove (first lis) lis) (remove (first (rest lis))) (cons (first lis) lis) (cons (first (rest lis) lis)) (small lis) (t (small (rest lis)))))) ↑バブルソートしたくて書いてみた。駄目だった。どこが駄目?
664 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 09:41:52 ] バブルソートを使うところが駄目。
665 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 10:13:57 ] (defun merge-sort (lst) (let ((len (length lst))) (cond ((< len 2) lst) ((= len 2) (let ((x (car lst)) (y (cadr lst))) (if (< x y) (list x y) (list y x)))) (t (do ((x (merge-sort (butlast lst (ash len -1)))) (y (merge-sort (last lst (ash len -1)))) (r '())) ((or (null x) (null y)) (nconc (nreverse r) x y)) (push (if (< (car x) (car y)) (pop x) (pop y)) r))))))
666 名前:おしえて厨 [2005/10/11(火) 17:25:50 ] (remove 'a 'a)みたいに一文字だとremoveできないじゃん。 どうやって一文字しかないのを消すの? あと、(a b c (a ((b))))みたいになってるときのbだけを消して、 (a b c (a (( ))))みたいにする方法って、あるの?
667 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 18:03:53 ] ((lambda (x y) ((lambda (f) (funcall f f y)) (lambda (f y) (typecase y (list (remove x (mapcar (lambda (y) (funcall f f y)) y))) (t y))))) 'b '(a b c (a ((b))))) => (A C (A (NIL)))
668 名前:おしえて厨 [2005/10/11(火) 19:06:51 ] 関数が定義されていません: typecase
669 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 19:36:09 ] そりゃ Common Lisp じゃないな。スレ違いだからもうこのスレに来ないように。
670 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 19:37:20 ] >>668 処理系がまがい物だな
671 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 20:10:17 ] xyzzy だな
672 名前:おしえて厨 [2005/10/11(火) 20:43:06 ] xyzzyなんだけど、typecaseつかわずにできないの???
673 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 21:12:30 ] >>672 xyzzy使いのよしみで回答しておくけど、 CommonLisp を勉強するのに xyzzy を処理系として使っちゃダメ。 xyzzy でマクロを書くための勉強ならここで質問するのは間違い。 ((lambda (x y) ((lambda (f) (funcall f f y)) (lambda (f y) (if (listp y) (remove x (mapcar (lambda (y) (funcall f f y)) y)) y)))) 'b '(a b c (a ((b))))) =>(a c (a (nil)))
674 名前:おしえて厨 [2005/10/11(火) 21:57:05 ] (defun del-atom (n lis) (cond ((null lis) nil) ((atom (first lis)) (cond ((eql n (first lis)) (del-atom n (rest lis))) (t (cons (first lis) (del-atom n (rest lis)))))) ((listp (first lis)) (cond ((listp (first (first (first lis)))) (cond ((eql n (first (first (first lis))))) (del-atom n (rest lis))) (t (cons (first lis) (del-atom n (rest lis)))))) (cond ((listp n (first (first lis))) (cond ((eql n (first (first lis))) (del-atom n (rest lis)))) (t (cons (first lis) (del-atom n (rest lis))))))))) ↑自分でもやってみようとしたら、こんなんなっちゃったよ〜〜〜〜 どこが駄目???
675 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 00:50:11 ] ((listp (first lis)) (cons (del-atom n (first lis)) (del-atom n (rest lis))))
676 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 00:51:18 ] first とか rest って使われてるんだなぁとそちらのほうに感動してたりする俺。
677 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 17:12:58 ] >>676 それはね、「xyzzy Lisp Programming」のページで、first と rest を推奨す る、と書かれているからだよ。 www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp02.html
678 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 17:23:12 ] >>677 「first と rest を使うことが推奨されています」なんて書いてるが、「誰が」推奨 しているのか不明だな。少なくとも CLtL2 にも ANSI にもそんな記述は見あた らないが。(もし見落としてたら教えてくれ)
679 名前:おしえて厨 [2005/10/12(水) 17:33:11 ] P.H.ウィンストンという人が書いた緑の本に推奨されていた。 まあそれはさておき675さんの指摘がよくわかりません。 どこを直せばいいの??
680 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 18:08:58 ] >>679 > どこを直せばいいの?? 頭の中身。 お前さんは九九も覚えてないのに数学の問題を見てわからないとわめいてるの と同じなので、677 が紹介してるサイトの Common Lisp 入門を全部読んで 理解してからもう一度いらっしゃい。
681 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 03:51:47 ] ウィンストンって培風館の奴か? car,cdrの方が好き ハード寄りで
682 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 11:14:21 ] >>681 いつの時代の方ですか?
683 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 12:23:03 ] 平成17年
684 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 12:27:20 ] 漏れも car cdr のほうが好きだが、さすがに IBM 7090 (だっけか)は使ったことない。
685 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 14:01:44 ] 8月からLisp触り始めた超初心者だけど car、cdrのほうが好きだな。
686 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 17:17:44 ] >>679 ,681 俺もその本持ってる。そのせいか first、rest 派。 自分では使わないから、car や cdr ならともかく caddr ぐらいでもわけわからん。
687 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 17:23:31 ] >>686 caddr と third とどっちがわかりやすいかだわな。 個人的には視覚的にわかる caddr のほうが好き。
688 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 22:48:16 ] nthは邪道ですか、そうですか いや、俺も使わないけど
689 名前:デフォルトの名無しさん mailto:sage [2005/10/15(土) 14:56:32 ] (nth 3 L) ≡ (fourth L) なのがなんとも
690 名前:デフォルトの名無しさん mailto:sage [2005/10/15(土) 15:05:25 ] >>689 nth は aref とともに elt の特別版ということだな。 むしろ、この3つの中で nth だけ引数順が違うのが気になる。
691 名前:デフォルトの名無しさん mailto:sage [2005/10/16(日) 18:18:47 ] ルプラカ ルプラクドゥ パンプルピンプルパムポップン カッドゥルゥァー クックドゥー
692 名前:デフォルトの名無しさん mailto:sage [2005/10/18(火) 22:37:29 ] オブラディ オブラダ (・∀・)スンスンスーン
693 名前:デフォルトの名無しさん [2005/10/19(水) 19:16:22 ] ;;ある基点となるフォルダより下のフォルダのフルパスを全て取得するには再帰でどう書けばいいですか?
694 名前:デフォルトの名無しさん mailto:sage [2005/10/19(水) 20:40:03 ] 実装依存
695 名前:デフォルトの名無しさん [2005/10/19(水) 20:42:51 ] xyzzyでは??
696 名前:デフォルトの名無しさん mailto:sage [2005/10/19(水) 20:45:20 ] 板違い
697 名前:デフォルトの名無しさん mailto:sage [2005/10/19(水) 20:55:26 ] (directory PATHNAME) あたりで調べると良いかも。
698 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 00:53:04 ] ECL使って実現されているプロジェクトでそこそこの規模のやつって誰か知りません? C/C++とCommon Lispを混ぜた開発したいんだけども、実際の使われ方を見て勉強した方が 理解が早いかなと思って。 それともUFFI使うのが定説ですかね。
699 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 01:37:09 ] どうなんだろう.最近は CFFI とかも出てきてるしねぇ. まず Lisp 側のインターフェースを決めて,それが十分に抽象化できていれば その下は UFFI だろうが処理系の FFI だろうがたぶん問題ない. ECL はあんまり触ったことないので本題には答えられない.スマソ. キーワードハイライトつきのエディタ作ったとか Planet Lisp に出てたような.
700 名前:698 mailto:sage [2005/10/21(金) 01:58:32 ] >> 699 ありがと。Planet Lisp行ってきます。 スレ違いって怒られるかも知れないけど、Gaucheとかだと結構事情が違ったりする? 確か開発目標に他の言語と仲良くするってのがあったような。でも最終的には ネイティブコードで走らせたいんだよなぁ・・・
701 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 02:08:50 ] ネイティブコードってことは性能が欲しいの? それでフリーなのがいいならCMUCLやSBCLがいいんじゃないかな。 Cの呼び出しやCからのコールバックもそれほど面倒じゃないし。
702 名前:698 mailto:sage [2005/10/21(金) 02:45:04 ] Planet Lisp行ってきました。 簡単なアナウンスだけ出ててsourceforgeに誘導されてみたらスクリーンショットも 公開されてました。CVS HEADにコードが入っているみたいなのでこれから調査します。 いまはプロトタイピングの段階なので実現可能性の検証が主体です。アルゴリズムの設計と 検証はLispであ〜でもないこ〜でもないやりながら考えた方がお手軽なのですが プロジェクトの他のメンバがC/C++でコード書いてるので現状は ・Lispでアルゴリズム練る → C++で等価なコードを書いてリポジトリにチェックイン してます。二度手間でアホらしいんですが最初からC++であれこれ書けないんですよ。 C++の汚さに辟易して大分昔に標準化の動向追いかけるのやめていたこともあって。 で、どうせならLispのコードそのままC/C++に埋め込んじゃうことはできないのかな〜と たくらんでいるところです。 スレ違いになりますが最近STLやらBoostやらLokiやら勉強してみて驚愕しました。 何であんな大変な思いをしてまでC++使うんですかね・・・不思議でたまらん。
703 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 02:54:10 ] >>702 ずいぶんと怪奇なことになってるよね。>C++ でも、すべてインラインに開いちゃうから確かに速い。 そのかわりコードサイズが大爆発。w
704 名前:デフォルトの名無しさん mailto:sage [2005/10/25(火) 00:24:33 ] 今ポールグラハムのlisp本でお勉強中なのですが、lispでは soketを開くとかプロセス制御するとか低レイヤな処理をする場合 どーすんのでしょうか。処理系にそうしたライブラリがなかったりする場合は?
705 名前:デフォルトの名無しさん mailto:sage [2005/10/25(火) 00:34:49 ] socketです。typoっす。すんません。
706 名前:デフォルトの名無しさん mailto:sage [2005/10/25(火) 01:12:37 ] >>704 どうにもなりません。そういうライブラリが存在するか、ネイティブコードを 呼ぶなどの方法でなんとかできる処理系を選びましょう。
707 名前:704 mailto:sage [2005/10/25(火) 01:53:21 ] >>706 むぅ。そういうもんなんですか。教えて頂いて有難うございます。 そういったことは一旦置いておくとすると、学習向けに オススメの処理系があればご教授頂けると助かります。 今のところ本読んでるだけなのですが手続き型が染み付いた頭には 関数プログラミングって難しい…。
708 名前:デフォルトの名無しさん mailto:sage [2005/10/25(火) 02:04:53 ] >>707 WindowsならCLISP、UNIX系ならSBCLがいいんじゃないかな。 どちらもソケットなどの拡張機能は持っているよ。
709 名前:704 mailto:sage [2005/10/25(火) 02:12:34 ] >>708 どもです。SBCLっての調べてみます。。
710 名前:デフォルトの名無しさん mailto:sage [2005/10/28(金) 00:10:41 ] 潜水艦から発射するミサイルじゃないの?
711 名前:デフォルトの名無しさん mailto:sage [2005/10/28(金) 00:15:22 ] >>710 それはSLBM
712 名前:デフォルトの名無しさん mailto:sage [2005/10/28(金) 01:26:06 ] コンパイラ・スクリプトエンジン相談スレで言語処理系の実装にLispを使うべきだ風な 書き込みを見掛けて興味を持ったのですが、具体的にLispで記述されたコンパイラとかで 参考になりそうなものがあれば教えていただけますか?ソースを見てどんな利点があるのか 比較してみたいです。大昔GCCのソースを眺めたとき内部でS式みたいので木を表現して いたみたいでしたが、表現形式だけじゃなくて実際に内部でLispプログラムが動いてたり するんだろか。
713 名前:デフォルトの名無しさん mailto:sage [2005/10/28(金) 03:53:37 ] かつては MacLisp が Fortran と張り合っていたわけだし,今でも Lisp コン パイラはほとんど Lisp で書かれているよ.ただ,Lisp 製の ML や C コンパ イラとかもあるけど,入門で読むのは無理だろう. 利点としてはコンパイラを書く時にモロに Lisp コンパイラの機能がつかえる!! といっても,何の事か Lisp を知らなければまったくイメージできないかもしれない. だからまず Lisp を学ぶ必要があるとおもうよ.基礎を一通りやったあと, groups.google.com/group/comp.lang.lisp/msg/2108939e399c5c4e とか見て,それでもメリットがわからないようなら Lisp の事は忘れたほうが いい.合う合わないがあるからね.
714 名前:デフォルトの名無しさん mailto:sage [2005/10/28(金) 20:14:18 ] MacLispか…研究室の物置に5”FDの認知心理のプログラム群があったなぁ
715 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 01:11:05 ] lispと他のプログラムとの構文とかの対比表ってありませんか?
716 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 03:33:47 ] MacLisp か…今やプロジェクト Mac の Lisp で Macintosh とは関係ないと 言わないと通じない時代かもしれんな…
717 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 06:51:32 ] ttp://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi14589.jpg.html (竹内)
718 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 11:34:43 ] >>715 他のプログラム言語,と言いたいのか?具体的には何よ?
719 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 14:47:52 ] >>718 C,C++,java,perl,ruby,python,PHPなどのメジャーな手続き型のどれか
720 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 16:39:07 ] >>719 Lisp プログラマのための Python 入門 www.unixuser.org/~euske/doc/python/python-lisp-j.html こんな感じ?
721 名前:719 mailto:sage [2005/10/30(日) 16:54:13 ] >>720 thx!
722 名前:デフォルトの名無しさん [2005/10/30(日) 19:46:03 ] >>716 Windows上で動く?
723 名前:デフォルトの名無しさん [2005/10/30(日) 19:47:42 ] lispとjavascriptってどっちが優れていますか?
724 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 19:50:17 ] >>722 PDP-10 とか DEC System 20xx のエミュがあれば。
725 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 19:57:22 ] >>723 javascript は lisp です
726 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 23:48:45 ] 煽りにもマジレスしておこうか. Web のクライアントサイドスクリプティングなら圧倒的に JavaScript が優れている. 逆にサーバーサイドでの処理なら Lisp のほうが良いな.でも君が病的に括弧 を恐れているならどこでも JavaScript のほうが優れていると感じるだろう. 基準をしめさない場合,「どちらが優れていか?」というのは主観的な問題だ から,人に聞いてもあまり意味がないよ.
727 名前:デフォルトの名無しさん mailto:sage [2005/10/31(月) 03:19:26 ] >lispと他のプログラムとの構文とかの
728 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 00:04:26 ] >>716 Maclisp と綴って欲しい
729 名前:デフォルトの名無しさん [2005/11/01(火) 06:11:42 ] Win32バイナリが吐けるLispコンパイラはどこですか?
730 名前:デフォルトの名無しさん [2005/11/01(火) 07:05:14 ] >>726 主観なわけねーじゃん。ばっかじゃないの
731 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 10:46:25 ] >>730 基準をしめさない場合、という条件でどこをどうやったら主観じゃなくなるのだ?
732 名前:デフォルトの名無しさん [2005/11/01(火) 11:35:21 ] >>730 の次のレスは「あまりの恥ずかしさに煽って逃げる」これ。
733 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 12:11:48 ] >>729 コーマンリスプなんてどうだ。 www.cormanlisp.com/
734 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 12:54:47 ] 非商用なら無料なんだ。 corman はチェックしてなかったな。結構寛容なライセンスだね。
735 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 13:34:49 ] どうせポップアップウィンドウに t とか表示させるだけだろ
736 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 00:11:24 ] ロジャーコーマンは腹出過ぎ。
737 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 00:30:12 ] Corman Lispって日本語通るようになったのかな? 要望あったら聞くよーてなメールも送ってきたくらい個人商店ぽいので 誰か日本で使い物になるなら買うから是非頼むといってやれば なんとかしてくれるかも。
738 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 00:31:55 ] [CommonLisp とコンパイル - コンパイラスクリプトスレからの続き] つまり Lisp においては「x に 2 を倍する」プログラムはデータ構造 (* x 2) と表現できるわけだ. (もし熱烈な C/C++ & XML ファンならこの構文木をつくってよう) さて,ここで操作する.もし「x に 2 を足す」にしたいと思ったとする. これは Lisp では (+ x 2) と表現できる.インタプリタ上ならば > code (* x 2) > (setf (car code) '+) (+ x 2) となる.(もし熱烈な C/C++ & XML ファンなら,同様の操作を表現してみよう ) さて,これをコンパイルしてみよう.このとき,コードは引数 x を一個とるわけなので関数で ラップする.これは (lambda (x) (+ x 2)) と書ける.Common Lisp の compile メソッドを使うと > (compile nil '(lambda (x) (+ x 2))) #<compiled-function> これでコンパイルされたコードが得られる.もしネイティブコードコンパイラ を使っているならネイティブコードが得られる.確認したければ,すかさず > (disassmble *) とうてばよい.このようにコンパイラは Lisp 環境と統合されており,利用者が気軽に使える存在なのである. (もし熱烈な C/C++ & XML ファンなら,表現した構文木をコンパイルしてからディスアセンブルしてみよう)
739 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 02:59:33 ] C で同じことやりたいなら cc -fpic 実行して dlopen するだけじゃない? KCL 系だってそうやってんだし。
740 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 13:38:27 ] コンパイラスレのからの客人?でも KCL とかっていうことはこのスレの人かな? まぁ,Lisp では手軽さがケタ違いです.C を直接さわったら操作するたびに, C のソース <--> データ構造 を変換しなきゃいけないのですが,逆に S 式な ら変換する必要はない. まぁ,どうしてもと言うなら C っぽく入力列 (S 式風味) をパースしてコンパ イル,実行という手順でもいい.例として forth 風味の言語を考えよう. def double 2 * end def quad double double end def fib dup 1 > if dup 1 - fib swap 2 - fib + end end reset 5 quad fib print これでフィボナッチ数列の 20 番目を表示したいとする.大袈裟に言うと, たとえば gcc のバックエンドにこの言語のフロントエンドを作るという事になる. これは手軽か?(まぁ,手間以外の難易度は Lisp だろうとなんだろうと簡単なんだけど…)
741 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 13:41:51 ] まずパッケージと,基本オペレータを準備する.まぁ,とりあえずスタックはリストで 表現し,スタックのクリア,表示,スタックトップの入れ替え,コピーという基本操作を 使う.算術演算子も lisp のやつを流用する.と,オペレータの定義はこうなる. (defpackage :mini-forth (:use :cl) (:export #:parse #:run #:forth) (:shadow #:print #:pop #:push #:+ #:- #:* #:/ #:> #:< #:= #:>= #:<=)) (in-package :mini-forth) (defparameter *stack* nil) (defmacro defword (word args &body body) (let ((binds (loop for v in args collect (list v '(cl:pop *stack*))))) `(defun ,word () (let* ,binds ,@body)))) (defmacro default-operators (&rest operators) `(progn ,@(loop for op in operators collect `(defword ,op (x y) (cl:push (,(intern (symbol-name op) :common-lisp) y x) *stack*))))) (defword print () (loop for e in *stack* for i from 0 do (format t "~&~4D: ~A~%" i e))) (defword reset () (setf *stack* nil)) (defword swap (x y) (cl:push x *stack*) (cl:push y *stack*)) (defword dup (x) (cl:push x *stack*) (cl:push x *stack*)) (default-operators + - * / > < = >= <=)
742 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 13:43:17 ] あとは入力をパース(手抜き)する. (defun parse (program &optional (ast nil) &aux (word (first program))) (cond ((or (null program) (eq word 'end) (eq word 'else)) (values (nreverse ast) program)) ((or (stringp word) (numberp word)) (parse (cdr program) (cons `(cl:push ,word *stack*) ast))) ((eq word 'if) (multiple-value-bind (tree next) (parse (cdr program)) (multiple-value-bind (tree2 next2) (parse (if (eq (car next) 'else) (cdr next) next)) (parse (cdr next2) (cons `(if (cl:pop *stack*) (progn ,@tree) (progn ,@tree2)) ast))))) ((eq word 'def) (multiple-value-bind (tree next) (parse (cddr program)) (parse (cdr next) (cons `(defword ,(cadr program) () ,@tree) ast)))) (t (parse (cdr program) (cons `(,word) ast))))) で,得られた S 式をコンパイル(Lisp コンパイラを流用)して実行. (defun run (program) (let ((tree (cons 'progn (parse program)))) (funcall (compile nil `(lambda () ,tree)))))
743 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 13:51:52 ] この forth もどきにさっきのプログラムを喰わせる. MINI-FORTH> (run '( [さっきのプログラム] )) 0: 6765 計算できたッ!! ついでにこの簡易言語で定義された関数 fib とかはLisp コン パイラでコンパイルされている.つまりネイティブコードコンパイラを使って いればネイティブコードが得られる. MINI-FORTH> (disassemble 'fib) ; 09AB6F66: 8BD4 MOV EDX, ESP ; no-arg-parsing entry point ; 6F68: 83EC0C SUB ESP, 12 ; 6F6B: 8B05886DAB09 MOV EAX, [#x9AB6D88] ; #<FDEFINITION object for DUP> ; 6F71: 31C9 XOR ECX, ECX ; 6F73: 896AFC MOV [EDX-4], EBP ; 6F76: 8BEA MOV EBP, EDX ; 6F78: FF5005 CALL DWORD PTR [EAX+5] ; 6F7B: 8BE3 MOV ESP, EBX [...] …というような説明でどうかな?
744 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 01:46:00 ] む、つまりこれはforthのトランスレータ? 結構短く書けるもんだね。 ところで↓のスレとここはどう使い分けてるの? スレタイ同じだから混乱するぜ。 【一日】CommonLisp【一門】 pc8.2ch.net/test/read.cgi/tech/1106587515/
745 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 02:05:48 ] スレタイが違うので混乱はしない。
746 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 04:54:18 ] >>744 宣伝乙
747 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 00:07:54 ] すいませんが、解の公式を使って二次方程式の解を出す関数の定義の仕方を 教えてください。どうも、±がどう表現していいか分からなくて…。 よろしくお願いします。
748 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 00:09:53 ] ↑宿題?
749 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 00:13:37 ] たぶん。 >>747 > ±がどう表現していいか 思考様式の変革が必要だと思う
750 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 00:27:29 ] 多値で返すとか、リストで返すとか好きなやり方選べばいいんでないの。
751 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 00:30:53 ] つうかやる気ねーんだろ?授業をちゃんと聞いてなかったみたいだし。「 いつも思うんだけどなんで〜日までの宿題ですやる気ないんで教えてください、 って素直に言えないのかね?まさか宿題である事を隠してるつもりなのか?なら 人をナメすぎだな。ほらこれを提出してごらん。俺は親切だから罠をしかけたりしないよ。 (defun solve (a b c) "ax^2 + bx + c = 0" (let ((A (- b)) (B (sqrt (- (* b b) (* 4 a c)))) (C (* 2 a))) (values (/ (+ A B) C) (/ (- A B) C))))
752 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 00:39:19 ] 漏れのエスパー能力によると>>747 が求めているプログラムは Lispではないな。
753 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 00:41:43 ] >>750 ±にあたるものが存在してないのが問題の山なのかも。 存在してても使いにくそうだけど。
754 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 05:01:13 ] そういえば複素数も扱えるんだよな でも>>751 はaが非零でないことくらいはチェックした方がいいと思う
755 名前:747 mailto:sage [2005/11/08(火) 22:31:36 ] どうもどうも。おかげさまで解決しました。 視点を変えました。>>751 のプログラムもある意味参考にさせていただきました。
756 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 22:55:05 ] >>755 変数名変えた程度で提出してそうだな.
757 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 10:52:42 ] 数年前からWIREDで学生のレポートのコピーと教授のいたちごっこが記事になっ たりとかしてるけど、いっこうに解決してないよな、この問題。 数ヶ月か一年おきくらいの間隔で問題にした記事を見てる気もする。 Comm. ACMの先月号でも Academic Dishonesty and the Internet つって とりあげてるし。なんでもclass project(宿題というよりはレポートに相当か) を外注に出す奴までいたそうだ。何のために大学に来たのかと小一時間(ry そういう学生のイカサマは許さんと頑張ってくれる教官は日本の大学にも いるんだろうか。なんかそんなやつ放っとけ面倒だと知らんぷりになりそうなんだが。
758 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 10:58:03 ] 今後の(学内or社会人)人生で困るならその程度だし困らないならそれもまたその程度。
759 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 11:26:00 ] 企業活動もアウトソーシングに頼る時代なんだから別にいいんじゃない? 卒論だって金でやってもらえる時代ですよ。 教官だって普段の学生の様子を見てれば、まじめにやってるやつと 金で解決したやつの違いくらいわかるでしょ。わからなかったり、 わかっても注意しなかったら、その程度の教官ってこと。 でも>>747 はこんなとこで聞く前に、教官に質問しろ。 払った授業料以上のものを貰わないともったいないぞ。 質問しても答えてもらえなかったらダメな先生に当たったと諦めろ。
760 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 11:36:09 ] 教官としてはどうでもいいんだが。精査したり注意してやる義理もない。
761 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 11:47:02 ] 無駄なレポート書く暇あったら自分の勉強したいよ
762 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 11:50:21 ] どうでもいいならレポートや宿題なんて出さないで欲しいよな。
763 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 12:01:17 ] >>762 君たちにとって無駄でどうでもいいのなら提出しなければいい。
764 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 12:03:45 ] 単位を貰うために、最小限の労力とリスクで、レポートを仕上げる
765 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 12:30:01 ] 単位をもらうためならそれでいいよな。 単位に値しないなら労力を割かないほうがよい。 単位取得を重要視するなら学生側でそれくらいのマネジメントくらいしろ。
766 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 12:33:44 ] やっぱ宿題には黙って答えだけだな。 余計な事言うから >>757-765 のような板違い連中を釣り上げちゃう。
767 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 20:47:57 ] 自分の望むレスだけしか見たくないんですか? 答えだけ欲しければ宿題スレへいけ。
768 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 21:07:39 ] じゃあ教授と学生のいたちごっこを見事な再帰で表現>>768
769 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 21:51:43 ] うちの研究室、プログラムの類似度判定やってた。 教授が集めてきた学生たちのレポートを実験の対象にしてた。 結果、年度・言語に関わらず、2〜3の大きいグループができると判明した。
770 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 01:34:50 ] 以下のようなことを実行するにはどうすればいいのでしょうか? (setf a '(+ 1 2)) (setf b '(+ 3 4)) (setf c '(- b a)) (myfunc c) 4 あるリストファイルを読んで内部にツリー構造をつくり、 それを一気に実行することを望んでいます。 具体的には、内部で以下のように展開してから実行したいと 思っています。 (eval '(+ (+ 1 2) (+ 3 4))) 何かヒントだけでも頂けたら嬉しいです。どうぞよろしくお願い致します。 m(_ _)m
771 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 01:58:53 ] >>770 こんなんでどうだ。 (defun expand (x) (cond ((symbolp x) (expand (symbol-value x))) ((numberp x) x) ((listp x) (cons (car x) (mapcar #'expand (cdr x)))) (t (error "unknown type: " x)))) (defun myfunc (x) (eval (expand x)))
772 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 02:45:02 ] 変った宿題だな。とりあえず読み込みたいリストファイルの例を示して。 それによって難易度が違うんで。 (+ 1 2) なのか (setf a '(+ 1 2)) なのか。使う関数は +, *, -, / なのか Lisp のフル機能の使うのか,など。
773 名前:770 mailto:sage [2005/11/13(日) 12:58:24 ] >>771 ご回答ありがとうございます。m(_ _)m 採用させていただきます。 初心者のくせに変にマクロに拘ってハマってました・・・ >>772 自主制作ソフトに必要な機能なんです。(趣味です) リストですが・・・ vA_out 1 vB_out 2 vC_out 3 vD_out 4 fPlus1_in vA_out fPlus1_in vB_out fPlus1_out fMinus1_in1 fPlus2_in vC_out fPlus2_in vD_out fPlus2_out fMinus1_in2 fMinus1_in1 fPlus1_out fMinus1_in2 fPlus2_out fMinus1_out retrun を予定してます。ちょっと冗長ですが・・・。 関数は将来的に増える予定です。Lispのフル機能を使っていきたいと思います。
774 名前:770つづき mailto:sage [2005/11/13(日) 13:03:05 ] >>773 のリストを読み込んで、内部で>>770 のようなツリーを組み立て 最後に実行して答えを返す予定です。 >>772 問題にご興味を持っていただきありがとうございました。 もし宜しければ、ヒントなど頂けたらと思います。
775 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 13:54:45 ] なるほど S 式じゃないプログラムリストって意味だったのか。 このプログラムの動作はどんな動きをするんかな? 今はこのファイルを Lisp のリスト形式 (S式) に手動で変換してるんだよね? たとえばプログラム言語としての機能を持たせたいなら(条件分岐とか) >>740 からのレスが参考になるかもしれないし、このリストをもう少し S 式風 にカスタマイズできるなら read 系の関数を使って字句解析を省略できる。
776 名前:770 mailto:sage [2005/11/14(月) 20:37:38 ] >>775 実はあるプログラム言語をパクろうと思ってます。(^^; もちろん、自分なりの発展はさせるつもりですが。 >今はこのファイルを Lisp のリスト形式 (S式) に手動で変換してるんだよね? そうです。 >たとえばプログラム言語としての機能を持たせたいなら(条件分岐とか) >>>740 からのレスが参考になるかもしれないし、このリストをもう少し S 式風 早速参照してみます。 >にカスタマイズできるなら read 系の関数を使って字句解析を省略できる。 あまり複雑なS式はむりですが、出力の形式を弄る程度でできるS式には しようと思ってます。 (setf vA 1) ←この程度ですが・・・(^^; また、質問させていただくかもしれません。今回はアドバイスありがとうございました。
777 名前:デフォルトの名無しさん [2005/11/15(火) 17:38:38 ] 770 とは別人なのですがついでに聞かせて下さい。 Lisp コードの中にいわゆる普通の infix の数式を入れて書きたいと思ったら どういう手が考えられるでしょうか。 つまりこんな感じで出来ればいいんですけど (defun f (x y) ( + 1 y %%% x^2+y^3 %%% )) プリプロセッサを通すとかじゃなくてやろうと思ったらどうしますか。
778 名前:デフォルトの名無しさん mailto:sage [2005/11/15(火) 17:57:12 ] つ groups.google.com/group/comp.lang.scheme/msg/1f15027fb2a1bc07 つ groups.google.com/group/comp.lang.scheme/msg/047ee341f2c30c85
779 名前:777 [2005/11/15(火) 18:22:40 ] 本当にありがとう。やっぱ reader macro で出来るんですね。使います。
780 名前:デフォルトの名無しさん mailto:sage [2005/11/15(火) 23:08:40 ] 使うのかよ!
781 名前:デフォルトの名無しさん mailto:sage [2005/11/16(水) 12:42:27 ] reader macroのわかりやすい解説ってないでしょうか?
782 名前:デフォルトの名無しさん mailto:sage [2005/11/16(水) 13:11:18 ] >>781 なんだかんだ言って CLtL2 が一番わかりやすかった。w
783 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 16:53:20 ] 規格書は紙で持っとくと、初心者レベルの時でも結構役に立つよ。 ansiの店で$18で売ってます。
784 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 10:30:59 ] 本スレのCLOSの話題について行けないバカな漏れに MOPのなんたるかから教えて下さい。
785 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 13:04:06 ] >>784 AMOP読め。または図書館へ行って昔のbit別冊を探せ。
786 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 19:49:24 ] AMOPって今でも、新刊買えますか? TinyCLOSは、いじってて面白かったなぁ。またいじりたいなぁ。 Kiczalesは、Aspect orientedなる概念を提唱して、ずぅーっと 遥か彼方まで行ってしまったね。 Kiczalesのアイディアを具体化しようとしている連中は、なぜか Java、Rubyにご執心みたいだけど。
787 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 20:12:37 ] >>786 買えるよ。日本アマゾンは3〜5週間だが、USアマゾンなら24時間以内発送。 www.amazon.co.jp/exec/obidos/ASIN/0262610744 www.amazon.com/exec/obidos/ASIN/0262610744
788 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 20:15:14 ] On Lisp邦訳の次はAMOP邦訳に挑戦して頂きたい。>野田さん
789 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 22:00:57 ] 翻訳終わる頃には、ネタとして終わってる悪寒。 最先端とはいわないまでも、半分より前、できるなら先頭グループ を走りたいなら、原著は避けられないと思うよ。 まぁ、かくいう俺も日本語と英語しかわからないのだけどな。
790 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 22:42:59 ] 先頭グループもなにも、MOPやCLOSはかなり前からあるんじゃないの?
791 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 02:30:22 ] >>786 そうか? AMOP からさほど進化したとは思えないんだが…
792 名前:デフォルトの名無しさん [2005/12/14(水) 23:14:08 ] clisp上でMAXIMA使いたいんですが解説サイトとかありませんか? 最新版に対応しているところが見つからないんですが
793 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 01:46:09 ] climacs に期待...
794 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 19:14:13 ] Schemacsとか作る奴はおらんのか?
795 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 23:38:21 ] climacs は SBCL ありきだからなぁ。Scheme で Native Thread が使えて ネイティブコンパイラな実装があれば話は別だが。
796 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 00:26:33 ] climacsも概ね動くようになったところで飽きて放置に100りちゃーど
797 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 07:51:11 ] >>794 ngscmというものならある。
798 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 05:33:14 ] シンボルを全部日本語にして日本語Lispとして売り出す(笑)
799 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 07:25:40 ] >>798 日本語Lispなら、S式はリストの先頭でなく末尾を関数とみなすようにしないと。
800 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 09:57:03 ] (甲 3 とする) (乙 5 とする) (甲 乙 対にする) => (3 . 5) ((甲 2 加える) 乙 乗ずる) => 25 助詞が欲しいな。
801 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 10:13:37 ] もともとのLispも英文にはなってないんだから、 日本語Lispといっても別に、その辺まですり合わせなくていいんじゃないかな。
802 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 13:05:23 ] >>799-800 括弧を取ればそのままFORTHになるという利点(?)があるな。
803 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 13:54:53 ] それだったら最初から Forth の方が。 つまり GikoForth なわけですが。
804 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 19:59:15 ] (おぼえる かいじょう (い) 「0から い までかけあわせる」 (もしも (ぜろか い) 1 (かける い (かいじょう (いちひく い)))))
805 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 20:28:09 ] (いれる ●にわとり 「こけこっこー」) (いれる ●ねこ 「にゃぁにゃぁ」) (いれる ●ぶた 「ぶーぶー」) (みる ●にわとり) → こけこっこー
806 名前:デフォルトの名無しさん mailto:sage [2005/12/24(土) 01:10:35 ] SBCL の Win32 ポートがいよいよマージされるみたいだな。 sourceforge.net/mailarchive/message.php?msg_id=14275606 ;; Macho のアーカイブ止まっちゃったのか。
807 名前:デフォルトの名無しさん mailto:sage [2005/12/26(月) 22:08:00 ] >>805 carとかcdrとかcdadarとかはどうやって表現するんだ。
808 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 01:04:54 ] car ⇒ 住所登録所の内容 cdr ⇒ 値登録所の内容 cdadar ⇒ 住所の値の住所の値登録所の内容
809 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 01:47:02 ] car => これ cdr => それ cdadar => そこそこれ
810 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 01:55:43 ] car/cdr は箱(コンスセル)から要素を取り出す操作だから、 car: とりだす cdr: つぎをとりだす cdadar: つぎのまえのつぎのまえをとりだす 関数は動詞且つ和語で統一したい所だけど、苦しいかな...
811 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 02:26:21 ] >>809 それイイネ
812 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 10:26:20 ] >>809 anaphoric ifのitはどうすんだ
813 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 11:57:15 ] >>812 「あれ」
814 名前:デフォルトの名無しさん mailto:sage [2005/12/30(金) 19:42:32 ] clozure.com/cgi-bin/viewcvs.cgi/ccl/ChangeLog?rev=HEAD&cvsroot=Bleeding-edge&content-type=text/vnd.viewcvs-markup x86 の文字がちらほら見えるけど、OpenMCL も x86 に移植されるみたいだね。 素晴らしい。
815 名前:デフォルトの名無しさん [2006/01/09(月) 22:24:16 ] lispで作った関数なんかは、何処に保存されてるのでしょうか? lispのコードをいじる課題が出たのですが、 コードの保存を自分でやらなきゃならなくなって困ってます。
816 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 22:52:09 ] 教官に聞け
817 名前:デフォルトの名無しさん [2006/01/09(月) 22:59:50 ] それを見つけるのが課題。。
818 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 10:08:05 ] 「エディタで新規にファイル作ってその中に書け」が答のような気もする っていうかLisp関係ないな 対話的にしかLispを使わない授業だったと推測するが
819 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 14:24:33 ] >>815 それ、Smalltalk使いの私も訊きたいです。 Smalltalkでは、関数(メソッド)が自身のソースを属性として持っていて比較的 容易にたぐれるんですが、Lispでは環境内でのソース管理はどうなっているんでしょうか? 818の行間を読むと、対話的に作られた場合、関数は自身にかかわるソース情報を (デコンパイルなどで特殊な方法で別途得る以外)他の一般的な言語と同様、 いっさい失ってしまうのが当り前…というような印象を受けるのですが。
820 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 22:47:35 ] >>819 ANSI CL の範囲では無いと思う。ANSI Smalltalk もソースコードの管理までは 規定してないでしょ?
821 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 23:15:09 ] function-lambda-expression() lambda 式が取れなくても規格合致だけど
822 名前:デフォルトの名無しさん mailto:sage [2006/01/11(水) 06:36:04 ] >>819 「関数」はソース+定義環境だから、ソースだけ取れてもそれを保存 するみたいなことには向かないだろうね。デバッグの助けにするだけなら いいだろうけれど。 (let ((n 0)) (defun incr (k) (incf n k))) なんてした時に、incrのソースはどこからどこまで? ってことね。
823 名前:デフォルトの名無しさん mailto:sage [2006/01/11(水) 16:34:30 ] なるほど。Smalltalkのブロック(クロージャ)のソースは、メソッド(関数)のそれと 違って容易にはたぐれない…のと状況は似ていそうですね。ありがとうございます。
824 名前:デフォルトの名無しさん mailto:sage [2006/01/11(水) 17:02:36 ] www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html これ読んでLisp使いたくなりました。 入門サイト教えろこの野郎m(__)m
825 名前:デフォルトの名無しさん mailto:sage [2006/01/11(水) 18:29:40 ] >>824 ぐぐれこの野郎(^^)
826 名前:デフォルトの名無しさん mailto:sage [2006/01/11(水) 18:41:45 ] >>824 www.geocities.jp/m_hiroi/xyzzy_lisp.html xyzzy向けの内容が入ってるけど
827 名前:デフォルトの名無しさん mailto:sage [2006/01/11(水) 20:37:58 ] >>824 ttp://www.h7.dion.ne.jp/~matsu/feature/common-lisp/index.html 日本語のサイトではここが一番良かった。
828 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 19:50:45 ] すまんがLispで生産性があがるってのはどのへんのせいなのでしょうか? >>824 の本を読んで興味持ったんだけれどよくわからんです。 コンパイル->実行とかの過程も処理対象にできるっていうのはやりようで面白いことできそうかと思ったんですが。 いまはC#つかいなのですが、.NETでのReflection,CodeDOMあたりの機能でしょうか。
829 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 20:10:48 ] いろんな要素が絡んでるから難しいけど。 最近機能が増えた言語や開発環境(なんでもいい)で、これが入って 生産性が上がったなーってもんをリストアップしてみ。 そのリストはLispの生産性の高さの理由のリストとかなり重なると思うよ。
830 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 01:43:00 ] 使用者への効果でいうと「マルチパラダイム」が一番大きいと思う.型がない. 手続き型でも関数型でも論理型でも並列型でもオブジェクト指向型でも,それ に合わせられる.クラスによる分類が向かない分野では,迷う事なくそれ以外 の手法をとれるしね. マクロによるプログラム変形とかはそういった言語カスタマイズのための道具 で,本当はこの「どんなパラダイムでもどんとこい」というのが最大のメリッ トだと思う.個人的にはね.
831 名前:デフォルトの名無しさん [2006/01/14(土) 04:40:52 ] あのー おばかで申し訳ないですが、 自分、VC++でコンソールアプリ作っております。 一部のc++の関数をLispで置き換えたいと思っておるのですが、 これって可能なんでしょうか? おしえてえらいしと
832 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 13:24:37 ] >>831 だいたいできると思うけど、GC関係でいろいろややこしいところは覚悟しないといけない。
833 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 14:01:57 ] 可能だけど,ある程度 C++ と Lisp の知識がいるよ. 1) DLL を出力できる Lisp コンパイラをもっている (普通の DLL と同じ) 2) ecl を組み込む 3) プロセス間通信する 3. がいちばん簡単かなー
834 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 17:27:18 ] >>829 C++からC#にかわったんだけど ・Generics(これはC#1.0になかったものとして) テンプレートでないのがちょっと不満。 ・リフレクション ・デリゲート 呼び出しをオブジェクト化することでいろいろ使える。 ・イベント デリゲートの呼び出し管理の簡略化 ・リモーティング プロセス間呼び出しを楽にした感じ ・インテリセンス(これは開発環境) これあってすごい楽になった。ヘルプとか引く回数激減。 条件に基づいてコード生成、それの管理とかできるともっといろいろ面白いことできるのかなぁとおもうけど。
835 名前:831 [2006/01/14(土) 17:46:11 ] >>831 >>832 情報dクス ・・・ここ数日間、GCL,CLisp ( Chicken, Gambit-C ) が吐き出すCコードをVCでコンパイルして.Libを作成しようとしてますた 直接 DLLを出力できるLispコンパイラ使わないと駄目何すね ・・・DLLを出力できるLispコンパイラ、知っていたら教えてくらはい (上で騒がれてた、ACLってやつなのかな?) 教えて訓でスマソ
836 名前:831 [2006/01/14(土) 17:48:34 ] ↑ ↑ 自分に礼いってた orz >>832 >>833 ですた
837 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 17:55:44 ] >>834 敢えて挑発的に書けば... Generics: 動的型なら元から不要 リフレクション: 元からある デリゲート: クロージャの劣化再発明 イベント: クロージャが無いから無理してる リモーティング: S式送ってevalさせればいいだけじゃん インテリセンス: 80年代からあると思うけど もちろん、静的型言語が持つ型安全性の保証とかはLispは弱い。 自分でがりがり書けば出来なくはないけれど。 条件に基づいてコード生成って?
838 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 18:10:18 ] LispWorks はできるよ.ACL もできるんじゃねーかな. ECL もできる.GCL もできそうだけど… GCL 知らないスマン # しかし CLISP は C コード吐かないだろう.
839 名前:831 [2006/01/14(土) 18:43:48 ] >>838 どうもっす ECLでゆきます ・・CLisp、間違えます田 色んなのためしてたらわからなくなてた ありがとうございました
840 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 19:04:59 ] >>837 C++から入ってC#やってるのでその辺の概念がまったくわからんです。 なんか最近頭がうにになってるし。 オブジェクト指向に頭が固まってる希ガス。 Lispというか関数型の利点がいまいちわかってないのでC++とかだとこんな風にしかできないけどそこをこんなエレガントにできるよって感じで教えてもらえないですか? 条件に基づいてコード生成ってのは、画面の生成とかをXAMLみたいなスクリプトに落として扱ってるんだけれどそれをそのままプログラムコードで生成したりしとか操作に基づいてロジックを生成してそのままプログラム中で扱えたりするといろいろできるかという話。
841 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 20:25:20 ] >>840 >操作に基づいてロジックを生成 これって具体的にはどういうイメージで言ってるの?
842 名前:デフォルトの名無しさん [2006/01/14(土) 23:07:07 ] gclでウィンドウを生成してその中で二点を定めて 線を引くというような簡素なプログラムを組みたい のですがどうすればよいでしょうか?どなたかご存知な 方お願いします。 まずウィンドウを生成するやり方からわかりません。。
843 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 23:29:43 ] GCL 使った事無いけど、これじゃないの? Tcl/Tk は別途インスコする必要あるかもしれないけど。 www.sunsite.ualberta.ca/Documentation/Gnu/gcl-2.3.6/html_mono/gcl-tk.html#SEC55
844 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 00:02:22 ] >>841 行った操作を覚えたりとか、拡張言語として使うとかですかね。
845 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 00:41:22 ] >>843 ありがとうございます。 結構使えそうです。
846 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 02:04:13 ] >>837 > インテリセンス: 80年代からあると思うけど あればなんでもいいってわけじゃないだろw 開発環境が(良くも悪くも)重厚長大ですげえんだよMSのは。
847 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 02:22:14 ] >>846 世界の狭い奴だな
848 名前:デフォルトの名無しさん [2006/01/15(日) 04:14:14 ] lispのコンソールから打ち込んだ文字(プログラムを走らせる前) をすべて保存するようにしたいのですが、 打ち込んだ文字列は、なんていう変数やらストリームに保存されてるんですか?
849 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:21:20 ] つwww.franz.com/support/documentation/7.0/ansicl/dictentr/dribble.htm
850 名前:デフォルトの名無しさん [2006/01/15(日) 04:33:06 ] ありがとうございます。 でも、コマンドラインの変数名も知りたいのです。 わからないでしょうか?
851 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 08:15:48 ] あ、そういうことか。失敬。 それは処理系依存だと思う。例えばAllegroならcommand-line-argumentsという 関数で取れる。処理系のマニュアルを読むべし。
852 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 09:38:00 ] >>847 しかしあのMSの統合開発環境に太刀打ちできる環境はないな。
853 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 09:51:57 ] まーGeneraの頃とはソフトウェアの規模が違うのは認めるが。
854 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 10:18:37 ] MSの貧者の統合環境ってどうなんだろうね。 敷居を下げたのが功か無能を引き入れたのが罪か。
855 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 10:29:10 ] レベルの低い開発者をふるい落とすのは開発環境の役目ではない
856 名前:350 [2006/01/15(日) 11:06:09 ] >>351 kyoto common lispのコマンドラインの変数名を知りたいのですが、 ネットでは見つかりません。 しらないでしょうか?
857 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 11:07:04 ] 優れたデバッガのおかげで本来動くはずのないプログラムが出たとこ修正で動くようになる。当然、潜在バグてんこ盛り。 論よりRUNとか言っているアフォも居るし。 Lispもそんなもんなのか?
858 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 11:46:22 ] >>856 アホがよって来るから、メール欄に sage って入れてくれ。
859 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 14:30:44 ] 早く common-lisp.net 復旧しないかな...
860 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 14:37:43 ] .NETで使えるLispというのはないんでせうか? ちょっとみたけれどわからず・・・
861 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 14:43:09 ] >>860 ある。
862 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 00:04:23 ] ソースつきサンプルが標準でどっかのディレクトリに入って滝がした
863 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 01:34:22 ] >>860 .NET 向けなら LSharp ってのがあるよ.まぁ,Common Lisp でも Scheme でもないけど.
864 名前:デフォルトの名無しさん [2006/01/16(月) 03:23:56 ] kyoto common lispのコマンドラインの変数名を知りたいのですが、 誰か知りませんか?
865 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 05:06:02 ] つうかなんで今更KCL? GCLならsi:*command-args* みたいな名前の変数だったと思う。 とりあえず、aproposでそれらしい名前を探してみたら?
866 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 14:29:04 ] オブジェクト指向が染み付いてるんですが、LISPってどんなイメージでプログラミングするの?
867 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 16:35:33 ] クラスを定義してメソッドを書いてゆく。(こともできる)
868 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 16:38:07 ] >>867 それオブジェクト指向とどう違うの?
869 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 16:51:22 ] 違わないだろ Lispでもオブジェクト指向やれますよって言ってるんだから
870 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 17:05:27 ] んじゃ、オブジェクト指向的に書くとして、その場合のJava、C++などとの違いはどこに出るの?
871 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 17:22:49 ] >>870 括弧
872 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 17:35:38 ] >>871 まあ、依然としてLispである、ってとこかな。
873 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 18:12:17 ] >>872 そのLISPであるのはどこ?
874 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 18:15:40 ] >>873 括弧
875 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 18:20:36 ] 単に「JavaやC++と比べてLispはどう違うのか」の答と一緒かと
876 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 18:27:39 ] >>875 最初の質問に戻るかも試練が・・・わかんねーよウワァン。
877 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 18:29:17 ] On Lisp の最初の方を読むといいかも。
878 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 18:42:58 ] >>877 みつけますた。よんでみます。 ただまとめて印刷できるページがほしかった・・・
879 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 20:41:02 ] スピード面とか考慮したうえでLispに向くもの向かないものってあるんでしょうか?
880 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 22:37:05 ] LSharp以外に.NETでつかえるLispあるならつかいたいんだがどうよ。
881 名前:831 [2006/01/17(火) 00:03:55 ] ECLを使って見ますた Windows上でインストールさせて、 簡単な関数を書いたLispファイルをコンパイルしてみると おぉ、ECLから.dll .Lib .hファイルを取得できますた 早速C++に組み込んでみようとすると、 ..わからん、どうやって引数を渡すんだ? マニュアルとECLのヘッダーファイルを週末読み込んでみたものの、 わたすの低レベルな頭ではプログラムを走らせることができませんですた (変換された関数はECL独自の構造体(共有体?)しか受け取ってくれない) やはりCに書き出すことはできたとしても、 Lisp->Cへの組み込み時において、変換された関数のインターフェースが 問題であることをようやく理解。 そこで今回、Lisp->Cのインターフェースがうまく扱えそうな LispWorksに方向転換してマニュアルを呼んでます LispWorksで変換したLispコードをCから呼び出してる人、 使い心地はどうですか? 知ってる人おりましたら、おしえてくらはい。 ・・・長文、駄文、あと頭悪くてすいません
882 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 00:06:55 ] >>880 何で .NET が良いのか、LSharp の何が気に入らなかったのかを書いたら 教えてやらんでもないけど、マイナーな処理系使っても幸せにはなれないよ。 >>876 個人的には REPL の有る無しが大きい。データを直に触りながら書く感じ。
883 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 01:11:33 ] >>831 メール欄に sage って書いてホスィ.ひょっとしてPerl とか Python とかの組 み込みの経験ないってこと?むーC / Lisp ともにちょっとスキル不足かもしれ ない. LispWorks の使い心地だけど (fli:define-foreign-callable ("Double" :result-type :int) ((x :int) (y :int)) (* x y)) で DLL 作ると int Double(int x, int y) { return x*y; } に見える.
884 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 02:17:35 ] >>882 .NETの理由:既存資産があるしライブラリあるから LSharp以外の理由:LSharpは気に入らなかったのではなく比較のため。
885 名前:884 mailto:sage [2006/01/17(火) 02:20:44 ] 眠いとだめだな日本語おかしい・・・orz ライブラリ->マイライブラリ LSharpは->LSharpを
886 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 02:24:04 ] >>884 ,885 ほい。 dotlisp.sourceforge.net/dotlisp.htm www-sop.inria.fr/mimosa/fp/Bigloo/
887 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 02:46:43 ] >>884 , 885 ほれ. RDNZL - A .NET layer for Common Lisp www.weitz.de/rdnzl/
888 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 02:48:57 ] >>884 ,885 あと、この辺かな。 weitz.de/rdnzl/ foil.sourceforge.net/ bc.tech.coop/blog/040927.html bc.tech.coop/blog/041210.html bc.tech.coop/blog/041216.html せっかく答えてくれたのに、参考にならなかったらスマソ。
889 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 02:50:32 ] わぉ、こんな夜更けに被ってしまった...
890 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 03:27:55 ] >>879 Lisper は環境に合わせて Lisp 処理系を書いてしまうから、向かない物は無いとも言える。 GOOL とか XS Lisp とか LispMe とか Schemix とか。LispM もあったし。 向いてないのは、人月投入してナンボのプロジェクトとかかな。Lisper は希少種だから。
891 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 10:55:18 ] 正式発表キタ!! >A port of OpenMCL to X86-64 (AMD64) Linux is underway; >it's scheduled for release in Q2/2006. openmcl.clozure.com/index.html
892 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 10:59:58 ] >>886-888 さんくすこ。みてみます。
893 名前:831 mailto:sage [2006/01/18(水) 01:04:30 ] >>883 情報サンクス 使い勝手、よさそうですね マニュアルのページ参照できますた Personal Editionだとファイル出力できないことがたった今判明。 ..約11万かぁ 要検討します おっしゃるとおり、組み込み系、Lisp共に超初心者です、はい。 Lispは本を1時間よんだくらい。まずは環境整備と思い、現在に至ります。 Cはちょいとかじってます。 言語解析やりたくてLIspはじめようかと。 ついでに質問いいですか?教えて訓ですみません。 CまたはC++に組み込む場合、.DLLに加えて.h,.libファイルが必要ですよね? マニュアルにこれらの出力関数が見当たらなかったんすけど、 きちんと装備されています?、LispWorks。 まちがい、かんちがいあったらすいません。 宜しくお願いします。 sage気おつけます。2ch書き込みも実は831がはじめて。
894 名前:デフォルトの名無しさん mailto:sage [2006/01/18(水) 01:44:47 ] > 言語解析やりたくてLIspはじめようかと。 自然言語解析だとすると LispWorks は日本語対応が UNICODE のみなんで,お すすめできないなぁ.あんまり日本語処理強くないよ.最終目標はどんなかん じなの? > CまたはC++に組み込む場合、.DLLに加えて.h,.libファイルが必要ですよね? DLL を LoadLibrary して使えます.でも普通は Lisp から C の DLL を呼ぶと 思うけどなー.そっちのほうが資料が充実してるし楽だ.あるいはソケットで 通信とかね.
895 名前:831 mailto:sage [2006/01/18(水) 21:35:14 ] >>894 情報サンクス 言語解析はそんなレベル高いものではない(と思う) というのも認知心理学ちょっとやりたくて買った本が 「Lispで学ぶ認知心理学」ってやつ。 そこにでてくるプログラム参考に勉強していこうかと。 ただ、1980年に出版されたもんだからユニコードうんぬんではないのです。 たとえば "NINCHI" "SHINRIGAKU"とかで、全部ローマ字で処理。 文章とかの階層構造を定義したいなぁ、なんて。 ただここの本にでてくる考え方は学んでみたいとおもい、& 組み込み対象が自作のC++プログラム。 っていうかんじです。 引き続き、組み込み向けのLisp、ソケット通信調べてみます。 長文駄文ソマソ。
896 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 00:43:18 ] >>895 clisp.sourceforge.net/impnotes.html#ex-call-in clisp.sourceforge.net/impnotes.html#ex-call-in-dll common-lisp.net/project/cffi/manual/cffi-manual.html#Tutorial_002dCallbacks
897 名前:831 mailto:sage [2006/01/19(木) 01:00:17 ] >>896 ・゚・(ノд`)・゚・ なんでそんなにやさしいんですか? 有難う御座います。 がんばります。 ...職場の人だってここまでやさしくない
898 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 05:00:56 ] >>895 あれってMACLISPじゃなかったっけか?
899 名前:831 mailto:sage [2006/01/20(金) 00:25:21 ] >>898 ども。 本には「APPLE LISP」を基準にしているとの記述が。 中まだ呼んでないからわからないけど defun を DE で記述ますね。 今日は帰りが遅かったからほとんど手付かず。 週末はLisperになりたい。
900 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 01:44:44 ] まーがんがれ。言語仕様はずいぶんかわってるので,アルゴリズムに集中して 勉強したほうがいいね。まぁ,おれはその本読んだ事ないのでアレだけど,お勧めは - C をある程度知っているなら ANSI Common Lisp あたりを読んでみる - 難しいと感じたなら,古い本だけど培風館の Lisp (1) (2) に挑戦 こっちは学生に訳させたのか日本語が破綻しているが,内容的には 入門から簡単な Garbage Collection の仕組みまでと充実してる. - 英語が苦にならないなら Practical Common Lisp とか Norvig の PAIP,OnLisp とか アカデミックな風味が好きなら Programming Scheme, HTDP, SICP にも挑戦してもいい 自然言語ネタならPAIP にもちょっとあるよ.PAIP の一番最初の例はルールベー スのランダム文章作成だよん. (defparameter *simple-grammar* '((sentence -> (noun-phrase verb-phrase)) (noun-phrase -> (Article Noun)) (verb-phrase -> (Verb noun-phrase)) (Article -> the a) (Noun -> man ball woman table) (Verb -> hit took saw liked))) (defvar *grammar* *simple-grammar*) (defun rule-lhs (rule) (first rule)) (defun rule-rhs (rule) (rest (rest rule))) (defun rewrites (category) (rule-rhs (assoc category *grammar*))) (defun generate (phrase) (cond ((listp phrase) (mappend #'generate phrase)) ((rewrites phrase) (generate (random-elt (rewrites phrase)))) (t (list phrase))))
901 名前:デフォルトの名無しさん [2006/01/20(金) 21:09:46 ] kyoto common lispのコマンドラインの変数名を知りたいのですが、 誰か知りませんか?
902 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 21:21:08 ] 変な宿題出してるがっこがあるようだな。 pc8.2ch.net/test/read.cgi/tech/1132275726/349
903 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 00:10:07 ] いまどき KCL ???ネタか?しかも本スレとマルチ? メール欄に sage もしくは学生番号を書いたら考えるけど……
904 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 00:42:29 ] >>856 >>864 も アフォは無視すれ
905 名前:831 mailto:sage [2006/01/21(土) 01:13:44 ] >>900 応援サンクス.参考書チェックしてみす。 今度町にでたら立ち読みしなければ。 ...ランダム文章作成 ひじょーに博学ですね。 わたすの頭からあれがでてくるよう念じたら いつかでてくるのかな 週末だけのうみそ交換しませんか? ...毎度すいません、教えてくんになってよいですか。 教えて頂いたURL、目を通して見ます田。2つ質問あります。 1つ目:Example31.7 Calling Lisp from C dynamicallyの考え方、 これであってます?↓ ------Lispソース(FFI含む)---- | | |(インターフェース部を書いた| | Cソースを | | コンパイルしたdll) |----------------> (Lispソースを | | ↑ コンパイルしたDLL) | | CLisp |---------------------------| でコンパイル ↑C/C++に組み込み可 2つ目:もう一つ御願いします。 ClispではFFIを使用するためには特別な操作が必要なんすか? 上記考え方に基づいて Example31.7のCソース部分からDLLを作成。 その後Lispソース部で作成(.dllの名前はきちんと入力)。 できたhoge.lispファイルを(load "hoge.lisp" )すると CLispが「skip (DEF-CALL-OUT CALLOUT # ...」っていってとまっちゃいます田。 アドバイス頂けませんか?宜しくおねがいします。
906 名前:831 mailto:sage [2006/01/21(土) 01:20:28 ] orz 絵がずれちゃいました。 訂正 -----Lispソース(FFI含む)-------------- | インターフェース部を書いたCソースを|------------------------->C/C++で組み込み可能なDLL | コンパイルしたdll__________________| Clispでコンパイル -------------------------------------- またずれたら逝きます
907 名前:831 mailto:sage [2006/01/21(土) 01:33:09 ] スレよごしすいません 再訂正 1. インターフェース部を書いたCソースをCコンパイラ(VC++)でDLLを作成 2. VCからでできたDLLをLispソースに組み込んで、CLisp(FFIパッケージ使用)でコンパイル。 3. CLispからでてきたDLLをC/C++に組み込む ...すいませんでした。
908 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 01:40:25 ] 残念.CLISP の FFI ってのは CLISP から Dynamic Library (DLL とか) を扱 うための仕組みのこと. CALL-OUT: CLISP から DLL の関数を呼び出す +-------+ -----> +-----+ | CLISP | | DLL | +-------+ <----- +-----+ CALL-IN: DLL 内から CLISP の関数を呼び出す なので,C/C++ に組み込み可能な DLL は CLISP では作れない.ずいぶん C/C++ にこだわりを持ているようだけれど,ゲームでも作ってそっから Lisp の機能を呼びたいのかな?
909 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 01:46:17 ] CLISP は DLL を出力できません.ので,C のアプリから CLISP で作った機能を呼び出すには 1. ソケットを使う 2. パイプを使う 3. 共有メモリを使う (CLISP に拡張がいるかな?) のいずれかの手段が必要です.
910 名前:831 mailto:sage [2006/01/21(土) 02:01:40 ] >>908 解説、ありがとうございます。 自分、英語苦手なのばれちゃいましたね。 学生のときC/C++で記憶のモデルをつくってますた へたれな出来だったけど。 へたれソフトには一応それなりに考えて実装しますた。 それはそのままにして、新しい機能をLispで加えられたらと。 当時の研究、あまりいい結果でなかったけど おもしろかたんで社会にでても時間みつけてつづけてるって感じです。 ...素直にLispWorks購入しようかな
911 名前:831 mailto:sage [2006/01/21(土) 02:08:25 ] おお、 すいません、すれちがっちゃいました。 まずはアドバイスのとおり1,2,3について調べてみます 情報ありがとうございます。 ホント、世話になってます
912 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 11:06:07 ] WindowsならCorman Common Lispって手もある。IDE使わなきゃ無料だし、 ソースコードもついてたハズなんで見てみれば? トライアル版とはいえAllegro Common Lispに手を出してしまうとアホらしくて 他の処理系を使う気が失せるが個人で購入するには高すぎて手が出せない罠。
913 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 12:30:40 ] Cormanって日本語使えるようになったの? 以前試したときはダメだったけど。
914 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 13:28:16 ] >>912 そんなに高くは無いだろ。
915 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 22:49:24 ] Allegro, UNIX でもマルチスレッドに対応にしてくれると 多少高くても買うんだけどなあ…
916 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 23:07:47 ] >>914 え?いくらなの? 50 万くらいかと思ってたけど しかもそれでランタイムライセンスなしみたいな… 俺騙されてた?
917 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 23:21:37 ] 一番安いのだと十数万じゃなかったっけ。
918 名前:デフォルトの名無しさん [2006/01/21(土) 23:46:29 ] 本には (setf x '(a b c)) (setf (nthcdr 2 x) '(1 2)) とすると、xが(a b 1 2)となると書いてあるんですが、 エラーになります。処理系によって違いがあるんですか? 自分が試したのがclispとAllegro CL (共にWindows)で、 本が想定してるのがMac Common Lispです。
919 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 00:05:42 ] www.lispworks.com/documentation/HyperSpec/Body/03_abac.htm The consequences are undefined if literal objects (including self-evaluating objects) are destructively modified. 本の名前晒せ
920 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 00:14:11 ] Mac Common Lispの動作としてそうなるという説明であれば正しい 記述なのかもしれない。>>919 の言うように現在のCommon Lispの 仕様としては「不定」が正解。 ただし、動作が不定であるということが明確化されたのはCLtL2から だからそれ以前の本ならそういう記述があっても止むを得ない。
921 名前:デフォルトの名無しさん [2006/01/22(日) 00:21:24 ] >>919 本はこれです。 プログラミング言語Lisp入門からマルチメディアまで ASCII SOFTWARE www.amazon.co.jp/exec/obidos/ASIN/4756139264/ 今初めてアマゾンでレビュー見たんですが、 どうやらMacに依存した内容が多いようですね。 上のコードはMacじゃないと動かないという事なんですね。
922 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 00:30:39 ] エラーの原因はリテラルオブジェクトの書き換えではなく、(setf nthcdr)の未定義 じゃないかな。手元のclispだと、 (setf x '(a b c)) (setf (cdr x) '(1 2)) ならちゃんと通って、x = (A 1 2) になる。元のプログラムだと(setf nthcdr)の未定義 でエラーになる。
923 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 00:44:13 ] OpenMCL では問題無し。SBCL では (setf nthcdr) の未定義でエラー。 % ./dppccl Welcome to OpenMCL Version 1.0 (DarwinPPC32)! ? (setf x '(a b c)) (A B C) ? (setf (nthcdr 2 x) '(1 2)) (1 2) ? x (A B 1 2) MCL 系に依存したコードみたいね。>>921 の本は ANSI CL という よりは MCL の使い方を書いた本なんで問題無すぃ。
924 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 01:20:08 ] >>915 Windows以外はまだOSスレッドに対応してないんだっけ。8.0でも変わらないのかな。
925 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 02:01:16 ] >>831 VB だが。 www.cs.stevens.edu/~dlong/vbecl/
926 名前:918 [2006/01/22(日) 09:23:08 ] 皆さんありがとうございます。 ANSI標準のCommon Lispを勉強したかったんで、別の本を探して見ます。 Common Lispならどの処理系でも同じなのかと思ってました。
927 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 10:50:15 ] >>916 前は10万円以下のがHPでセールスしてたが今はアカデミック向けのが99ドルで載ってるな。
928 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 11:53:28 ] >>918 > ANSI標準のCommon Lispを勉強したかったんで、別の本を探して見ます。 仕様には規定されている事とされていない事がある。specified と unspecified ね。 さらに実装依存(implementation-defined)と定義されている事もある: (例) (disassemble) での表示形式とか declare で最適化するとかしないとか は規格で「実装による」と規定されている。だから本 + HyperSpec をつきあわ せながら勉強してけばいいんじゃね。ANSI Common Lisp (Paul Graham) あたりは 入門にはちょっと難しいと思われ。英語でもがんがる気合いがあるなら Practiclal Common Lisp がオススメ >>927 もう卒業したんでアカデミックダメポ…。学生時代はアカデミックが安ければ いと思っていたけどな。アカデミックが安いだけではダメな事に気がついた。 予算は Win なら MSDN にもってかれちゃうしな。
929 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 12:00:57 ] >>924 してない. 7 -> 8 の差分ってすごく小さい
930 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 13:19:36 ] >>895 > >>894 > 情報サンクス > 言語解析はそんなレベル高いものではない(と思う) > というのも認知心理学ちょっとやりたくて買った本が > 「Lispで学ぶ認知心理学」ってやつ。 おおおっ、もしやサンプルがAPPLE LISP でプログラムされているやつでは!
931 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 13:28:49 ] APPLE LISP は8bitマシンであるAPPLE ][ 用に慶応大の大西先生が 実装した処理系ですね。 6502のマシン語で書いたそうです。 メモリの一部がグラフィックメモリと共用なのでガベージコレクションして いるのが”見えた”ので教育用としても有用だった。
932 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 13:48:36 ] >>931 をいをい、大西先生じゃねーよ。中西先生な。死んじゃったけど。
933 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 15:02:48 ] >>923 OpenMCL では本当に問題ないのかなあ。CMUCL や SBCL では (setf x '(a b c)) (setf y '(a b c)) (setf (cdr x) '(1 2)) (print (list x y)) をコンパイルしてロードすると、リテラルが共有されるため ((A 1 2) (A 1 2)) となるんだけど、そういった想定外のことが起こったりしない?
934 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 15:47:12 ] OpenMCL では↓になったけど、リテラルリストに破壊的操作をするのは良くないですね。 ((A 1 2) (A B C)) (proclaim '(optimize (speed 3) (space 0) (debug 0))) しても一緒でした。 OpenMCL が SBCL や CMUCL に比べて遅いと言われてるのは、こういう所からなのかな。
935 名前:831 mailto:sage [2006/01/22(日) 23:26:26 ] どもです。 >>912 情報サンクス Corman Lisp 調べてみますた。 これ、なかなか使いやすそう。 お値段も 249$ (3万弱?)くらいで手が届く。 サンプルソースから推測するに、 実はこれC/C++に組み込めるのでは?(しかもCとのインターフェース部、自分でも扱えるレベル!?) ちょいいじってDLL出力させてみたとこ、ヘッダーとDLLでてきますた。 LoadLibraryでVC++から読み込ませたら一応コンパイルは通った。 実行させると ダイアログで 「Cormanなんとか.dll」がなんとかかんとかって言ってた。 お金はらえば、わたすの願いかなうんですかね? ソケット通信調べる前に、もうちょいいじってみます。 >>925 情報サンクス ダウンロードさせていただきます田。 時間あるとき、いじらさせて頂きます。 >>930 、931 自分、全くの初心者なんでAPPLE Lispのすごさわかりませんが、とても読みやすいと感じますね。 環境整えてからって思ってたけど、今日からこの本を読み恥じめてます。 自分の場合、手段(Lisp)と目的(認知)が同時に学習できますんで、効率的だと思ってアマゾンで購入。 3巻同時に手に入れられたのは運がよかった。 んー ホントにLisperになりたい。 900さんにも言われたとおり、 アルゴリズムに集中して勉強してゆきます〜
936 名前:831 mailto:sage [2006/01/23(月) 01:43:11 ] >>935 にて >ちょいいじってDLL出力させてみたとこ、ヘッダーとDLLでてきますた。 訂正: すいません、勘違い訂正します。 もともとあったexampleフォルダ内で用意されてたtestdll.dllを利用しますた んー最近すれよごしばかり。 少し書き込み控えます。
937 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 00:52:04 ] c.l.l.のなが〜いスレッド読んで知ったこと。 ACLって成果物(って呼び方でいいんだろか)配布するのに毎年ライセンス料を払い 続けなければいけないらしい。へぇ。だから皆高い高いって言うんだ。 これってGCCで作ったバイナリ勝手に配っちゃダメって言ってるのと一緒でしょ? 間違ってたら訂正願います>詳しい方
938 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 01:23:54 ] まぁ (loop (print (evel (read)))) みたいなのコンパイルしてバイナリ配ったら Lisp そのものになっちゃうからな。配布ライセンスが必要という気持ちも理解 できないことはない。 個人的にはフリーソフトの発展に期待。
939 名前:831 mailto:sage [2006/01/26(木) 00:44:57 ] 例題をやってて呼び出せない関数がいくつか。 put (putpropもだめ) unpack (explodeもだめ) maknam (pack inplodeもだめ) 現在、Corman LIsp使ってます。 これら関数の別名もしくは使い方知っているひといたら教えてください。 >>Corman Lisp使っている人 trace の使い方、教えてください。 ・・・教えて訓ですいません
940 名前:デフォルトの名無しさん mailto:sage [2006/01/26(木) 00:51:37 ] >>939 それぞれ setf + get symbol-name make-symbol で代用すべし。つーか、Common Lispの仕様持ってないの?
941 名前:831 mailto:sage [2006/01/26(木) 01:05:18 ] >>940 情報サンクス >つーか、Common Lispの仕様持ってないの? 今週末、本買いにゆきます すいません〜
942 名前:デフォルトの名無しさん mailto:sage [2006/01/26(木) 01:06:13 ] >>939 その聞き方じゃ現代 Lisper にはわかんねーよぅ
943 名前:デフォルトの名無しさん mailto:sage [2006/01/26(木) 01:23:25 ] car とか cdr とか禁止で 短くていいじゃんと思う俺はきっと汚染されてる
944 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 05:11:44 ] >>939 (trace 'func) でトレースしたい関数の記号を引数にとる。 あとは普通にfuncを実行すればトレースの結果が表示される ところで、いい加減Javaくらいできないとマズいかなと思い 借りてきた本の著者が井田昌之だった
945 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 09:56:04 ] lispができるならJavaいらんだろ。CがまだならC、CができるならC++かC#にしとけ。
946 名前:デフォルトの名無しさん [2006/01/29(日) 13:22:00 ] gclのソースを弄って、gclを立ち上げるときに、 自動的にこちらの指定したlispのコードを実行させるようにしたいのですが、 どうすればいいでしょうか?
947 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 13:36:57 ] 宿題は自分でやれ。
948 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 13:59:48 ] >>946 そんなのソースをいじらんでもコマンドラインオプションでできねーか?
949 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 14:04:10 ] どこの小学校だ、変な宿題出しているのは。
950 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 16:00:26 ] 理素譜
951 名前:デフォルトの名無しさん [2006/01/29(日) 16:29:24 ] gclを弄って、gclが起動したら、自動的にlispのコードが実行されるようにするのが、 課題なんです。 gclのstdinに、lispのコードでもプリントで書き込めばいいのでしょうか? わけわからん。
952 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 16:39:04 ] お前にはセンスも才能も将来もないことはよくわかった。 向上心が少しでも残されてるなら宿題は自分でやれ。
953 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 16:50:14 ] ってか出題者は何を意図してんだろ。本気で小学校レベルなのかな。
954 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 17:06:54 ] >>953 ”翻訳”を通すとこうなる。 よくあることなので気に病まないほうがよい。
955 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 17:09:21 ] 少なくともLispの課題ではないのだろう。(C言語の課題かな?) 正しい質問場所を見つけるのも課題なのかな。w
956 名前:デフォルトの名無しさん [2006/01/29(日) 17:31:19 ] 日本人です。 gclを起動→自動的にlispの関数が実行され、 読み込み状態になる。 を実現しなきゃいけないんです。 処理系弄るの初めてなので、 ちょっと困ってます。
957 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 17:35:50 ] >>956 そうですか。ちなみに私は困っていません。
958 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 18:23:55 ] おまいらちゃんと>>1 を読み直せ。このスレはまた〜りが信条じゃなかったのか? GCLってとこが致命的だな。いまどきGCLメインで使ってる人ってどれくらい居るんだろ。 普通に考えたらREPL起動前にユーザ定義の処理を走らせるとかその程度のことは処理系が 持ってるはずなんで>>948 の言い分を調べてみるのが先決かと。 調べた結果「無い」ってことならそれを実装しろってのが課題の主旨と思われるので REPLに突入する前に自前のコード突っ込めば終わりじゃね?
959 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 18:29:04 ] Lispの授業じゃなくてコードリーディングみたいなのの課題なんじゃない? さすがにスレ違いだと思うよ。
960 名前:デフォルトの名無しさん [2006/01/30(月) 00:02:17 ] gclに、iniファイルとかは使えますか?
961 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 00:05:06 ] >>958 もうちょいまともな聞き方すれば数日前に答えが手にはいったのにな。 ちょっと酷いからスルーしてしまってた。 1. まず hogehoge.lisp ってファイルをエディタでつくる。 % vi hogehoge.lisp 2. -load オプションをつかって gcl を起動する % gcl -load hogehoge.lisp 最近の GCL ならこれで gcl が起動し hogehoge.lisp を読み込まれる もし本当に GCL を改造しろという課題なら 2ch でダメダメな質問してる時点 で自力で解くのは諦めたほうがいい。クラスのできそうなやつに飯でもおごる とかしてやってもらうのが唯一の方法だろ。 >>958 行動を選択してください [A/B/C] A. 知りたい事がわかったので礼も言わずに消える B. 礼を言って消える C. 回答が的はずれだ俺の知りたい事はxxxxとかいいだす
962 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 00:14:34 ] 2ch でだいぶんトンデモ質問にも慣れたと思っていたけどこれは… もう超能力で補うしかねぇな。まっとうなところなら A. GCL のオプション設定を ini ファイルで指定できますか? → コマンドラインからの ni ファイルの解析を自分でやらないと標準で ini ファイル B. GCL で ini ファイルを読み書きするライブラリは標準でついていますか? → ついてません。ini ファイルの読み書きがしたい場合は自力でなんとかしてください。 C. GCL で ini ファイルを読み書きする事は可能でしょうか? → 自分で処理を書く、Win32API を呼び出すなどすればできます。が C でini が扱える程度の技術が必要です。 どれか当ってねぇかな〜と期待
963 名前:デフォルトの名無しさん [2006/01/30(月) 00:22:34 ] すみません。 gclを起動したら、初期設定ファイルを読み込んで、 こちらの指定したコードを実行させるようにはできないかと思ったのです。 schemeではiniファイルを読ませることができたので。 どうすればいいですか?
964 名前:958 mailto:sage [2006/01/30(月) 00:30:10 ] ぉ。風呂から出てきたら俺が質問者になってるみたいだな。 ほんじゃ>>961 の回答は以下でファイナルアンサーってことでよろしく。 D. 誰か次スレ立ててね はぁと(w あと質問してる人、sage覚えてね。
965 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 00:36:19 ] >>958 殿へ どうみても誤爆です。 拙者責任をとって切腹つかまつるゆえ次スレは立てられませぬ。
966 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 00:38:39 ] 次スレいらんだろ。 このスレ使いきるまで一年以上かかってるし、本スレに合流でいい。
967 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 00:49:46 ] >>961 > 本当に GCL を改造 main関数をmain2とかに改名して、 argcとargv弄るだけ…でいいんだろうか。 それだと学校の課題としては変だよなぁ…。
968 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 00:54:34 ] GCLの質問する奴、みんな質問の仕方が妙だよな。 気になるから誰か課題の全文をウプ汁。 おじさんが模範解答を作ってやる。
969 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 01:18:05 ] 何か盛り上がりそうだけど本スレ汚すのも気が引けるんであふれたら 過疎化したスレのリサイクルにご協力をお願いします。 【一日】CommonLisp【一門】 pc8.2ch.net/test/read.cgi/tech/1106587515/
970 名前:963 [2006/01/30(月) 01:22:43 ] >>967 「他のcのプログラムから、gclのmain関数を呼び出し、 その時点で、こちらの指定したlispのコードが実行され、 ユーザの入力待ち状態にすること」 です。
971 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 01:50:05 ] >>970 ほんとにそんなダメ日本語な問題なのか?思い込みで解釈せずに正確に写せ。 あと Mail 欄には sage と入力してください。それができたら解答する。
972 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 03:22:43 ] >2006-01-30 02:39 gb > > * lisp-kernel/freebsd8664/: Makefile, elf_x86_64.x: New files. > > FreeBSD make (and gmake) both want to rebuild all .s files, but > this otherwise seems to work. FreeBSD にも対応するのかな。
973 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 02:32:09 ] Lispで記述された結構な量のライブラリがあって、これをC/C++から簡単に呼び出せる ようにしたいのですがお勧めの処理系はどれになりますか? LispからC/C++を呼び出す例はいろんな処理系でドキュメントが整備されてますが 逆はあまりやられてないようなので。ECLがC/C++との親和性が高いかなと思っていじって いるんですがどの程度規格に準拠してるかとか、いまのライブラリがそのまま コンパイルできるかなとか疑問な点がまだ多いので識者の意見をお聞かせいただければ、と。
974 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 04:04:49 ] 授業でLISP習ったんだけど 最初なんじゃこりゃ頭いてーと思ったけど これ結構おもすれー(^ω^)
975 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 23:01:02 ] (eval '(^ω^)) おもすれー おもすれー
976 名前:デフォルトの名無しさん [2006/02/14(火) 16:39:01 ] JAVAからclispを呼び出せるようになったのだが、何に使えるだろう?
977 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 19:36:49 ] >>976 JAVAからclispを呼び出すのに使える
978 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 19:48:30 ] >>977 それには気がつかなかった
979 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 21:49:00 ] >>977 目からうろこが(ry ま、clispがjavaから呼べてもLISPを使用しなければならない 業務処理が思いつかん。 やhり無駄なものを作ってしまったか。
980 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 21:55:01 ] Servlet を Common Lisp で書けたりすると面白いかも。 そうなると Lisp 自体も Java VM 上で動かして、高速に相互呼び出しできる ようにしたくなるね。
981 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 21:58:04 ] じゃ、ABCL で。
982 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 22:37:55 ] >Java VM 上で動かして それってjavaでlispの処理系を書くということ? どこかにありそうな気がするな。 基本的にjarかなんかでjavaコードの中でlispコードが 走れば最高なんだけどな。 XMLのパースとか楽になるんだが。
983 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 22:40:37 ] >>982 それが >>981 (armedbear.org/abcl.html ) です...
984 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 23:03:52 ] >>983 すごいねコレ。 早速使ってみるわ、thx
985 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 23:10:57 ] (format t \"Hello, world!~%\")が8秒かかるんだが、 compileすれば早くなる?
986 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 23:16:04 ] スマソ。俺はちゃんと使った事がある訳じゃないんで詳細は知りません。 テキストエディタに使われているくらいだから、そんなに遅くはないと 思いたいけど。 armedbear-j.sourceforge.net/ JavaVM の起動とクラスのロードに時間が掛かってるとかじゃなくて?
987 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 23:21:24 ] >JavaVM の起動 それだ。 別のVMを起動するのに時間がかかっているのか。 同一VMで動くようにすれば早そうだ。
988 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 23:53:28 ] うちではこんな感じ。jikes でコンパイルしてたから、javac ならもっと速いかも。 別の VM を起動したりはしないと思うよ。初回だけ妙に遅いね。 % ./abcl Armed Bear Common Lisp 0.0.9 (built Tue Feb 14 2006 23:40:55 --900) Java 1.4.2_09 Apple Computer, Inc. Java HotSpot(TM) Client VM Low-level initialization completed in 2.388 seconds. Startup completed in 9.052 seconds. Type :HELP for a list of available commands. CL-USER(1): (time (format t "hello, world~%")) hello, world 5.287 seconds real time 62770 cons cells NIL CL-USER(2): (time (format t "hello, world~%")) hello, world 0.0020 seconds real time 67 cons cells NIL CL-USER(3):
989 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 00:54:59 ] うちは Windows でやってみたが、やはり一発目は遅いね。 クラスライブラリのロードか何かだろう。 Armed Bear Common Lisp 0.0.9 (built Wed Feb 15 2006 00:49:19 --900) Java 1.5.0_04 Sun Microsystems Inc. Java HotSpot(TM) Client VM Low-level initialization completed in 0.563 seconds. Startup completed in 2.172 seconds. Type :HELP for a list of available commands. CL-USER(1): (time (format t "hello, world~%")) hello, world 1.203 seconds real time 62770 cons cells NIL CL-USER(2): (time (format t "hello, world~%")) hello, world 0.0 seconds real time 67 cons cells NIL CL-USER(3):
990 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 01:19:54 ] すみません、インストールしてabclからjreのメソッドとかは呼び出せるんですがサンプルのhello.javaがコンパイルできません。 どうすれば・・・いいんでしょう F:\abcl-0.0.9\examples>javac hello.java hello.java:1: パッケージ org.armedbear.lisp は存在しません。 import org.armedbear.lisp.*; ^ hello.java:8: シンボルを見つけられません。 シンボル: クラス Interpreter 場所 : hello の クラス Interpreter interpreter = Interpreter.createInstance(); ^ hello.java:8: シンボルを見つけられません。 シンボル: 変数 Interpreter 場所 : hello の クラス Interpreter interpreter = Interpreter.createInstance(); ^ エラー 3 個
991 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 01:38:37 ] >>990 cd examples javac -classpath ../abcl.jar hello.java java -classpath ../abcl.jar;. hello みたいな感じで動いたよ。
992 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 01:46:49 ] >>991 おお!動いた、動きましたありがとう!
993 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 13:05:42 ] ABCLでだが Interpreter interpreter = Interpreter.createInstance(); LispObject obj = interpreter.eval("(print (directory \"c:/\")"); これが動かない理由が分からない。 XYZZYだと動くんだが。
994 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 13:54:15 ] >>993 Common Lisp の仕様判ってる? xyzzy なんて方言を持ち出されても・・・
995 名前:ゲハシマ mailto:sage [2006/02/15(水) 19:17:27 ] >>994 偉そうに言うだけか? 仕様とやらを示してみろよ
996 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 20:17:09 ] >>995 大馬鹿発見!!
997 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 20:18:53 ] とりあえず >>102
998 名前:993 mailto:sage [2006/02/15(水) 20:59:40 ] >994 主にjavaしか触らないので言語仕様は良くはしらないが、 XYZZYとは微妙に違うということは解った。 >995 あんた誰?
999 名前:993 mailto:sage [2006/02/15(水) 21:12:49 ] あるディレクトリの拡張子が指定されたものであった場合に、条件に 合致する全てのファイルを削除するlisp式ってどう書きます?
1000 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 21:21:35 ] CL-FAD を使えば (fad:walk-directory #p"/home/onjo/tmp/" ;; ディレクトリを指定 #'(lambda (p) (when (string-equal (pathname-type p) "txt") ;; 条件判定 (fad:delete-directory-and-files p))))
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。