違いがわかりません(不自然な例で申し訳ありません):
(define average
(lambda (elems)
(define length
(lambda (xs)
(if (null? xs)
0
(+ 1 (length (cdr xs))))))
(define sum
(lambda (xs)
(if (null? xs)
0
(+ (car xs) (sum (cdr xs))))))
(define total (sum elems))
(define count (length elems))
(/ total count)))
と
(define average
(lambda (elems)
(letrec ((length
(lambda (xs)
(if (null? xs)
0
(+ 1 (length (cdr xs))))))
(sum
(lambda (xs)
(if (null? xs)
0
(+ (car xs) (sum (cdr xs))))))
(total (sum elems))
(count (length elems)))
(/ total count))))
私が知る限り、それらは両方とも新しいスコープを作成し、そのスコープ内で相互に参照する 4 つのローカル変数を作成し、本体を評価して返します。
ここで何か不足していますか、それともスコープ付きsletrec
と同義ですか?define
これは実装に依存する可能性があることを知っています。Lips の基礎を理解しようとしています。