前回
リスト遊び 4-7 等しいリスト - by shigemk2
平たく言うと、再帰を使え、ということですね。
以前再帰かました関数を作成した。
引数はリストだったが、リストの中身は全てアトムだった。
リストの中身がリストでも、関数が使えるようにしてみる。
(defun sum (lst) (cond ((null lst) 0) (t (+ (car lst) (sum (cdr lst)))))) sum (sum '(1 3 5)) 9 (defun sum* (lst) (cond ((null lst) 0) ((consp (car lst)) (+ (sum* (car lst)) (sum* (cdr lst)))) (t (+ (car lst) (sum* (cdr lst)))))) sum* (sum* '(1 (2) (3 (4)) (5 (6 (7))))) 28
再帰の定石(入れ子のリスト篇)
- 終了条件を調べ、終了なら初期値を返す
- リストの先頭の要素に対して仕事をする。リストの先頭の要素がリストなら、そのリストと共に、自分自身を呼び出す
- リストの残りと共に自分自身を呼び出す
リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)
- 作者: 山本和彦
- 出版社/メーカー: アスキー
- 発売日: 2000/05
- メディア: 単行本
- 購入: 2人 クリック: 76回
- この商品を含むブログ (44件) を見る