我正在编写一个 Scheme 解释器,我面临着一个有效的 let 语句,例如:
;; should print 7
(let ((a 4) (b 3))
(let ((a (* a a))
(b (* b b)))
(+ a b)
(- a b)))
我的解释器只实现了 Scheme 的一个纯函数子集,所以不会有 set! 之类的副作用。在纯函数式语言中,为什么要在上面的 let 语句中允许多个表达式?
在编写我的解释器时,除了 let 中的最后一个表达式,我还有什么理由应该评估任何东西?似乎它们永远不会影响评估的最后一个语句的结果。