SICP Practice

Practice 4.19

	(let ((a 1))
	  (define (f x)
	    (define b (+ a x))
	    (define a 5)
	    (+ a b))
	  (f 10))

如果在f内部定义b的时引用的a是外部的a,在内部再定义一个a, 有两种方式实现,一种是在当前frame加入新的a的绑定,一种是改变外面a的绑定的 值,第一种在使用a的过程中很依赖先后顺序,容易让人混乱,第二种会给别的引用a的 过程造成副作用,产生预期外的结果。

如果内部定义是同时的,当a、b的定义同时引用对方,而又不是流,就会造成死循环。

所以还是Alyssa的观点比较好,在内部同时定义,但是使用未赋值的变量产生一个错误。

如果不存在互相引用造成无限循环的情况,可以这样实现eva的方案