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パワーズ
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 ] ;;ある基点となるフォルダより下のフォルダのフルパスを全て取得するには再帰でどう書けばいいですか?