Clojure';s相当于Lisp';s原子函数

Clojure';s相当于Lisp';s原子函数,clojure,lisp,Clojure,Lisp,我有这个Lisp代码,我正在尝试将它转换成Clojure代码 (defun copy-tree (tr) (if (atom tr) tr (cons (copy-tree (car tr)) (copy-tree (crd tr))))) 似乎Clojure没有Lisp的atom(或者Clojure中的atom有非常不同的含义),我不得不修改代码如下。() 代码工作正常,但是有没有更好的方法来替换Lisp的atom函数?我想您会发现它的行为是恰当的:

我有这个Lisp代码,我正在尝试将它转换成Clojure代码

(defun copy-tree (tr)
  (if (atom tr)
    tr
    (cons (copy-tree (car tr))
          (copy-tree (crd tr)))))
似乎Clojure没有Lisp的atom(或者Clojure中的atom有非常不同的含义),我不得不修改代码如下。()


代码工作正常,但是有没有更好的方法来替换Lisp的
atom
函数?

我想您会发现它的行为是恰当的:

(def single-valued? (complement coll?))

不同之处在于,对于
nil
(rest nil)
()
,它最终不会再次出现,但是
((complement coll?)nil)
返回
true
,因此提前一步停止递归。

我认为惰性序列存在一个陷阱。但它们也实现了
IPersistentCollection
(coll?(range))
=>
true
。好!!
(def single-valued? (complement coll?))