练习1.5. Ben Bitdiddle发明了一项测试,以确定他所面临的口译员是使用申请顺序评估还是正常顺序评估.他定义了以下两个程序:
(定义(p)(p))
(define(test xy)(if(= x 0)0 y))
然后他评估表达式
(测试0(p))
Ben使用应用程序订单评估的解释器会观察到什么行为?对于使用正态评估的翻译,他会观察到什么行为?
我理解这个练习的答案; 我的问题在于如何解释(p)与p的关系.例如,(test 0(p))导致解释器挂起(这是预期的),但是(测试0 p)上面的定义立即求值为0.为什么?
而且,假设我们将定义更改为(define(p)p).根据给定的定义,(测试0(p))和(测试0 p)都评估为0.为什么会出现这种情况?为什么翻译不挂?我正在使用Dret博士和SICP包.
为什么以下表达式求值为0?
i > --i
Run Code Online (Sandbox Code Playgroud)
假设i = 5.从左到右评估表达式,我们评估左操作数(i)得到5并且我们评估右操作数(--i)得到4.所以表达式约应该计算为1.但是当我用gcc编译并运行它,它总是计算为0.我的思维过程中是否存在缺陷?