let,let *和letrec有什么区别?
请提供详尽的解释和示例。
答案 0 :(得分:7)
最好的办法是阅读let
,let*
和letrec
的{{3}}。
简而言之:
(let ((x 2))
(let ((x 3) (y x))
y) => 2
(let ((x 2))
(let* ((x 3) (y x))
y) => 3
因此,let
和let*
之间的差异let
将评估与上述级别相关的所有绑定(因此,它们列出的顺序无关紧要)虽然let*
按顺序执行。 (let* ((x a) (b y)))
相当于(let ((x a)) (let ((b y)))
。
letrec
允许您绑定递归值。因此,您可以编写一个递归函数,只希望它位于函数范围内,并使用letrec
将其绑定到名称。