在clojure中,是否可以在 cond 的情况下执行多个表达式,而不使用 do 或 let 形式。在Racket中,可以做以下事情:
(cond
(> a 0) ((display a) (display (* a a))
(= a 0) ...
...
答案 0 :(得分:4)
另一个包含隐式do
的表单是when
,所以“是”,您可以在没有do
或let
的情况下实现此目的:
(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))))