我在理解方案功能中的某些内容时遇到了一些麻烦,请查看以下代码:
(let
((a (list (< 10 30) (display "This message should never be printed"))))
(not (car a)))
2 问题出现,A,为什么当我以这种方式定义 a 时显示功能正在运行,即使我只是希望它成为列表中的一个项目而不是“触发”它。B、如何防止它运行?
为防止评估,您需要引用:
(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