如何使'()成为零?

bou*_*ekv 1 clojure

如何使Clojure的数'()nil

例如:如何制作类似的东西

(if '() :true :false) 

;to be 

:false

;Or easier 

(my-fun/macro/namespace/... (if '() :true :false))

:false
Run Code Online (Sandbox Code Playgroud)

而不仅仅是.各方面.

(= nil '()) or (my-something (= nil '()))

true
Run Code Online (Sandbox Code Playgroud)

每个代码都是(='()nil)保存.

(something (+ 1 (if (= nil '()) 1 2)))

2
Run Code Online (Sandbox Code Playgroud)

我在考虑某种自然的表达方式.哪个会看代码并替换'()nil,但是有些东西(rest '(1))和许多其他东西一样'(),我不知道如何处理它.

有人告诉我,宏可以让你建立自己的语言.我想通过改变clojure来尝试它.所以这很大关于"如何使用clojure以及如何改变它?" 而不是"我真的需要它为我的工作."

谢谢你的帮助.

mik*_*era 10

'()只是不一样nil- 你为什么要这样做?

你可能正在寻找的是seq函数,如果给出一个空集合,则返回nil:

(seq [1 2 3])
=> (1 2 3)

(seq [])
=> nil

(seq '())
=> nil
Run Code Online (Sandbox Code Playgroud)

seq 因此经常被用来测试"空虚",成语如下:

(if (seq coll)
  (do-something-with coll)
  (get-empty-result))
Run Code Online (Sandbox Code Playgroud)

  • 我认为Clojure方法更适合与Java库一起使用(通常返回nil/null表示"找不到结果").我认为你可能最好只接受Clojure方法.'()在Clojure或Java中没有任何特殊含义.在您可能在CL中使用'()的情况下使用nil/null. (3认同)
  • @mikera你应该用`if-let`捕获`seq`的返回值. (2认同)