我在理解方案功能方面遇到一些麻烦,请看下面的代码:
(let
((a (list (< 10 30) (display "This message should never be printed"))))
(not (car a)))
2个问题上升, A,为什么当我以这种方式定义a时,显示功能正在运行,即使我只是希望它是列表中的项目而不是“触发”它。 B,我该如何阻止它运行?
答案 0 :(得分:1)
为防止评估,您需要引用:
(let ((a '((< 10 30) (display "This message should never be printed"))))
(car a))
(let ((a '((< 10 30) (display "This message should never be printed"))))
(cdr a))
产量
'(< 10 30)
'((display "This message should never be printed"))
如果您想稍后评估这些表达式,最简单的方法是将它们包装成lambda表达式:
(define a
(list
(lambda () (< 10 30))
(lambda () (displayln "This message should never be printed"))))
(first a)
=> #<procedure>
((first a))
=> #t
(second a)
=> #<procedure>
((second a))
=> This message should never be printed