consの引数は2つだけだが、
setf、list、appendは3つ以上の引数を取ることが出来る。
[17]> (setf animals '(ape bear cat) an-animal 'dog)
DOG
[18]> animals
(APE BEAR CAT)
[19]> an-animal
DOG
こんな風にan-animalを囲ってしまうと、an-animalは関数として評価されてしまう
[20]> (append animals (an-animal))
*** - EVAL: undefined function AN-ANIMAL
The following restarts are available:
USE-VALUE :R1 Input a value to be used instead of (FDEFINITION 'AN-ANIMAL).
RETRY :R2 Retry
STORE-VALUE :R3 Input a new value for (FDEFINITION 'AN-ANIMAL).
ABORT :R4 Abort main loop
Break 1 [21]> :a
an-animal=dogなので、(dog)という風にしたければ、(cons an-animal nil)というふうにする。
その上でappendしないといけない。nilにconsすることでリストを作成できる。
[22]> (append animals (cons an-animal nil))
(APE BEAR CAT DOG)
appendで(ape bear cat)という風にしたければ、(append '(ape bear) '(cat))としなければならないので、
(dog)を作る必要があったのだ。
(append '(ape bear) 'cat) としても以下のようになるだけである。
[23]> (append animals an-animal)
(APE BEAR CAT . DOG)
でも(cons an-animal nil)とかクソかったるいので、list関数を使って(dog)を作る。
[24]> (append animals (list an-animal))
(APE BEAR CAT DOG)
以下、consとappendとlistの違い。
[25]> (cons '(a b) '(c d))
((A B) C D)
[26]> (append '(a b) '(c d))
(A B C D)
[27]> (list '(a b) '(c d))
((A B) (C D))
[28]> (list '(a) '(b c) nil '(d))
((A) (B C) NIL (D))
[29]> (append '(a) '(b c) nil '(d))
(A B C D)