我需要一些帮助来理解SICP关于内部定义的4.1.6节中的材料。
我理解定义相互递归函数时引发的问题。但我不明白如何通过转换以下lambda表达式来解决它
(lambda <vars >
(define u <e1 >)
(define v <e2 >)
<e3 >)
成:
(lambda <vars >
(let ((u ’*unassigned*)
(v ’*unassigned*))
(set! u <e1 >)
(set! v <e2 >)
<e3 >))
有人可以帮助我吗?谢谢。
答案 0 :(得分:3)
如果<e1>
尝试在第一个表单中引用v
,则会失败 - v
未定义(尚未,但不部分是重要的一部分)。但是在第二种形式中,到v
时,<e1>
已定义(虽然尚未已分配 - 但没关系! - )。