【入門】CommonLisp【質問よろず】
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドの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 の説明をちゃんと読みなおしたほうがいい.
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5385日前に更新/244 KB
担当:undef