Clojure';s相当于Lisp';s原子函数
我有这个Lisp代码,我正在尝试将它转换成Clojure代码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函数?我想您会发现它的行为是恰当的:
(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?))