Clojure:是否可以在`cond'中执行多个表达式?案件?

时间:2014-12-26 02:01:26

标签: clojure

在clojure中,是否可以在 cond 的情况下执行多个表达式,而不使用 do let 形式。在Racket中,可以做以下事情:

(cond
    (> a 0) ((display a) (display (* a a))
    (= a 0) ...
    ...

1 个答案:

答案 0 :(得分:4)

另一个包含隐式do的表单是when,所以“是”,您可以在没有dolet的情况下实现此目的:

(cond
  (> a 0) (when true
            (println a)
            (println (* a a))))

但是,当然,那个人为的问题和你问题的真正答案是“不”。

每个子句都有一对形式:测试形式和表达形式。您不能在cond子句中包含多个表达式表单 - 您需要进一步将它们包装在一个表单中,例如do。它们被称为表达式形式,因为它们的通常是有意义的(在纯粹的功能上下文中),因为它是带有第一个truthy的子句中表达式的值测试整个cond表单的计算结果。

但是,如果您使用cond作为实现条件副作用的方法,或许do可以很好地强化意图:

(cond
  (> a 0) (do (println a)
              (println (* a a))))