The Little Schemerの第三の戒めは次のように述べています。
リストを構築するときは、最初の典型的な要素を記述し、それを自然再帰にコンスします。
「自然再帰」の正確な定義は何ですか? 私が質問している理由は、ダニエル・フリードマンによるプログラミング言語の原則に関するクラスを受講していて、次のコードは「自然に再帰的」とは見なされないためです。
(define (plus x y)
(if (zero? y) x
(plus (add1 x) (sub1 y))))
ただし、次のコードは「自然に再帰的」と見なされます。
(define (plus x y)
(if (zero? y) x
(add1 (plus x (sub1 y)))))
私は「不自然に再帰的」なコードの方が好きです。ただし、そのようなコードは忌み嫌われるものと見なされます。関数を末尾再帰形式で記述すべきではない理由を尋ねると、副講師は単に「自然再帰を台無しにするな」と答えました。
「自然に再帰的な」形式で関数を書くことの利点は何ですか?