首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Clojure,懒惰的评估问题

问题:Clojure 中,如何避免懒惰的评估问题?

答案:Clojure 中的懒惰评估问题可以通过使用 delayat 函数避免。delay 函数可以使得其参数在一段时间后执行,而 at 函数可以指定一个时间后执行。

例如,下面的代码中,如果 x 是一个无法解析的字符串,则在 when 语句中,x 的值会被设置为 nil,并且 x 的值不会发生变化,直到下一次 when 语句被执行时,才会重新进行评估:

代码语言:txt
复制
(when (or (not (string? x)) (resolve x))
  (println x))

如果使用 delayat 函数,则可以避免这种情况:

代码语言:txt
复制
(delay (when (or (not (string? x)) (resolve x))
          (println x)))

在上面的代码中,如果 x 是一个无法解析的字符串,则在 when 语句中,x 的值会被设置为 nil,并且 x 的值不会发生变化,直到下一次 when 语句被执行时,才会重新进行评估。

需要注意的是,使用 delayat 函数时,需要将表达式放在 delay 函数的括号中,并且需要加上括号,否则会报错。例如,下面的代码会报错:

代码语言:txt
复制
(delay (when (or (not (string? x)) (resolve x))
          (println x)))

而下面的代码则不会出现错误:

代码语言:txt
复制
(delay[(when (or (not (string? x)) (resolve x))
          (println x)])

希望这个答案能够帮助你解决 Clojure 中的懒惰评估问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券