我不理解这两个方案程序之间的以下行为:
程序 1:
(define a
(begin
(display "hmmm")
(newline)
lambda))
这个程序使用 运行,在没有打印出字符串的情况下scheme test.ss
给我一个语法错误。lambda
"hmm"
方案二:
(define lambda 5)
(define a (+ 1 2 lambda))
这里的最终结果a
是 等于8
。
第一个程序中的行为是我在两个程序中所期望的行为。令我困惑的是为什么第二个程序不会因语法错误而失败。显然我正在重新定义lambda
,但我认为这会在代码实际运行之前因语法错误而失败。在我看来,要知道这不是语法错误,您需要实际运行程序,但如果这是这种行为,那么我希望第一个程序在出错之前显示字符串。
简而言之,为什么第一个程序会导致语法错误,而第二个程序不会呢?