2
我有這個Lisp代碼,我試圖將它轉換成Clojure代碼。Clojure相當於Lisp的原子函數
(defun copy-tree (tr)
(if (atom tr)
tr
(cons (copy-tree (car tr))
(copy-tree (crd tr)))))
好像是Clojure中沒有Lisp的原子(或Clojure的原子具有非常不同的意思),我有如下修改代碼。 (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的功能?
我認爲這裏有一個陷阱與懶序列。但是他們也實現了'IPersistentCollection':'(coll?(range))'=>'true'。好! – Thumbnail 2014-12-19 03:38:40