【入門】CommonLisp【質問よろず】at TECH【入門】CommonLisp【質問よろず】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト650:& ◆eDpN.64OYw 05/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:デフォルトの名無しさん 05/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:デフォルトの名無しさん 05/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 の説明をちゃんと読みなおしたほうがいい. 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch