-1

我在理解方案功能中的某些内容时遇到了一些麻烦,请查看以下代码:

(let
  ((a (list (< 10 30) (display "This message should never be printed"))))
  (not (car a)))

2 问题出现,A,为什么当我以这种方式定义 a 时显示功能正在运行,即使我只是希望它成为列表中的一个项目而不是“触发”它。B、如何防止它运行?

4

1 回答 1

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
于 2013-11-05T23:01:33.467 回答