L-99:P05にチャレンジしました。
問題
リストをひっくり返してください。
P05 (*) Reverse a list.
解答
; p05 (*) Reverse a list. ; (defun my-reverse (lst) (if (null lst) ;引数が空なら空リスト nil (append ;下の2リストの結合 (my-reverse (cdr lst)) ; [1]残りの行を並べ直したリスト (list (car lst))) ; [2]先頭の要素だけのリスト ) )
clispでの実行結果
(my-reverse ()) ;-> NIL (my-reverse '(1)) ;-> (1) (my-reverse '(1 2)) ;-> (2 1) (my-reverse '(1 2 3 4 5) ;-> (5 4 3 2 1)
答え合わせ
(defun inverte (lista) (inverte-aux lista () ) ) (defun inverte-aux (lista resto) (if (null lista) resto (inverte-aux (rest lista) (cons (first lista) resto) ) ) )
ふーん。どっちがいいのかなぁ?
個人的にはfu7mu4の方が短くて分かりやすいと思う。
あ、こっちは末尾再帰になって...るんか。