Clojure 什么是';do';特殊表格怎么办?
文件说: (不表达*)Clojure 什么是';do';特殊表格怎么办?,clojure,special-form,Clojure,Special Form,文件说: (不表达*) 按顺序计算表达式并返回最后一个表达式的值。如果未提供表达式,则返回nil 然而,我只是这样做了: (defn blah [] (print "how") (print "now") (print "brown") (print "cow") (+ 1 1)) 因此: hownowbrowncow2 那么,为什么还需要这个东西呢?您可以使用类似于if的形式,它只接受单个s-exp作为“then”或“else” 通常,是一种特殊形式,它允许一个人按顺序执
按顺序计算表达式并返回最后一个表达式的值。如果未提供表达式,则返回nil 然而,我只是这样做了:
(defn blah []
(print "how")
(print "now")
(print "brown")
(print "cow")
(+ 1 1))
因此:
hownowbrowncow2
那么,为什么还需要这个东西呢?您可以使用类似于
if
的形式,它只接受单个s-exp作为“then”或“else”
通常,是一种特殊形式,它允许一个人按顺序执行多个形式,可能是为了产生副作用,因为do
form返回最后一个形式的求值结果,因此没有理由将其用于纯函数。简单地说,您可以将do
看作非纯代码的某种包装器。在每个Lisp中都有类似的形式,例如在公共Lisp中,它被称为progn
do
隐式用于以下宏中:、、和其他宏
从实用的角度来看,您可以将它与
if
语句一起使用(请参阅),当您编写具有“body”参数的宏(如defn
中的函数体)时,它会派上用场。我要补充的是,在defn
中有一个隐式的do
(或when
).你知道为什么do
是作为特殊形式而不是宏实现的吗?正如我所看到的,实现这样一个宏非常容易。。。
(if (= a b)
(do (println "Yes") (something))
(do (println "No") (something-else)))