なんだこれは

はてなダイアリーから移転しました。

L-99:P05 気合い入れ合い愛入れ合いカッコん中見つめ合い

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の方が短くて分かりやすいと思う。

あ、こっちは末尾再帰になって...るんか。