Subscribed unsubscribe Subscribe Subscribe

Common Lisp

プログラミング

Common Lispの話.やっと&optionalの使い方を理解した.これを使うとreverseのような関数を簡単に書くことができる.

Paul GrahamのOn Lispから引用すると,反転したリストを返す関数good-reverseはlabelsを使って以下のように書ける.

(defun good-reverse (lst)
  (labels ((rev (lst acc)
             (if (null lst)
                 acc
                 (rev (cdr lst) (cons (car lst) acc)))))
    (rev lst nil)))

これを&optionalを利用することで以下のようにすっきり書けるようになる.

(defun good-reverse (lst &optional (acc nil))
  (if (null lst)
      acc
      (good-reverse (cdr lst) (cons (car lst) acc))))

ところでこのaccって何の略なんでしょうか?