>append の はなし

>(if (null? r))は、はじめの最初のループでしか意味をもちません。

考え方の前提がおかしいんじゃないか?
appendの'()を否定するって事は、リストの終端(空リスト)も
#fであるべきという事か?
意味的に (null? r)という述語は、「始めの最初のループかどうか」
ではなくて、「リストの終端(空リスト)かどうか」を示してると思うんだが。

>appendの引数を、最低1つにするという
>まあ、内部構造からすると自然なことをどうしてしないのか?

リストが0個の場合でも、それは「空リスト」と言って、
リストにとっては1つの形態として自然だから。
'(a b c) => '(a . (b . (c ())))
(length '(a b c)) => 3 (length '()) => 0
(length '())でも#fを返せというのか?

これを他の言語のデータ型に例えるとするなら、C言語の文字列かな。
文字列の長さをstrlenで調べて0が返されても、
実際には終端文字分の長さがあるのと同じ理屈。strlen("\0") => 0
"\0"は特別な値ではなく、あくまでも文字列の一部。

>(+ a b c NIL) => (+ a (+ b c NIL)) => (+ a (+ b (+ c NIL))) => (+ a (+ b (+ c (+ NIL))))
>したがって(+ NIL) => 0 となります。分かっているとおもいますが、、

(+ NIL) => Error: variable nil is not bound.
これで何を判れと?
もしかしてドット対の事を言ってるの?