【发布时间】:2014-12-19 02:12:45
【问题描述】:
我有这个 Lisp 代码,我正在尝试将其转换为 Clojure 代码。
(defun copy-tree (tr)
(if (atom tr)
tr
(cons (copy-tree (car tr))
(copy-tree (crd tr)))))
Clojure 好像没有 Lisp 的 atom(或者 Clojure 中的 atom 含义很不一样),我只好修改代码如下。 (Am I using atom? wrong or there is something else....?)
(defn single-valued?
[x]
(not (or (nil? x)
(.. x getClass isArray)
(some #(instance? % x) [clojure.lang.Counted
clojure.lang.IPersistentCollection
java.util.Collection
java.util.Map]))))
(defn copy-tree [tr]
(if (or (= tr ()) (single-valued? tr))
tr
(cons (copy-tree (first tr))
(copy-tree (rest tr)))))
代码运行良好,但是有没有更好的方法来替换 Lisp 的 atom 函数?
【问题讨论】: