为什么没有返回值的Clojure函数返回nil?
我是Clojure的新学员,不明白为什么当我调用不返回值的函数时,在REPL中返回“nil”。为什么没有返回值的Clojure函数返回nil?
上面的例子:
(println "Hello Nil")
nil
什么类型的评估过程都是为了达到“无”?
这是Clojure等函数式语言的约定,每个函数都需要返回一个值。对于像println
这些旨在执行副作用(如打印到屏幕)的函数,并不总是清楚返回值可以或应该是什么。
在这些情况下,nil
是占位符值,意思是“无”或“不适用”。
即使存在副作用,Lisp也会返回有用的值,我不明白为什么Clojure的打印函数不能返回它的参数;这是一个细节,但如果你只是想检查中间表达式的值,它会有所帮助。也就是说,+1 – coredump
对于'println',它可以将字符串输出返回到屏幕上,但对于其他函数,如'doseq','dotimes'等,不清楚什么是好的返回值应该是什么。 –
我对println的工作原理感到困惑。在其他情况下,无是可接受的价值,我想我们同意。如果你让'do ...'宏接受一个结果表单并提供一个隐式块,你可以从中返回一个值(['dotimes']](http:// clhs。 lisp.se/Body/m_dotime.htm))。但这是一个不同的设计,我明白你不应该在Clojure(懒惰序列等)中早期返回。 – coredump
*所有*函数都返回一个值。 Clojure的* nothing *的成语是'nil'。所以,当没有什么可返回时,返回'nil'。许多运营商默认设置为:“when”,单侧“if”,“get”,“next”......。一个* always *返回'nil'的函数,比如'println',必须有明显的副作用。 – Thumbnail