Clojure 单链表(插入[list elt])函数
如果我找不到这个虫子,我就要发疯了。我实现了一个单链接列表的版本:Clojure 单链表(插入[list elt])函数,clojure,insert,singly-linked-list,Clojure,Insert,Singly Linked List,如果我找不到这个虫子,我就要发疯了。我实现了一个单链接列表的版本: (ns clojure_fun.core) (defprotocol MConsP (elt [this] "returns elt") (cdr [this] "returns cdr") (set-elt! [this val] "set elt") (set-cdr! [this val] "set cdr") ) (deftype MCons [^{:unsynchronized-mutable t
(ns clojure_fun.core)
(defprotocol MConsP
(elt [this] "returns elt")
(cdr [this] "returns cdr")
(set-elt! [this val] "set elt")
(set-cdr! [this val] "set cdr")
)
(deftype MCons [^{:unsynchronized-mutable true} elt
^{:unsynchronized-mutable true} cdr]
MConsP
(elt [this] elt)
(cdr [this] cdr)
(set-elt! [this val] (set! elt val))
(set-cdr! [this val] (set! cdr val))
)
(defn mcons [a b] (MCons. a b))
(defn mlist [& xx]
(if (empty? xx) nil
(mcons (first xx) (apply mlist (rest xx))))
)
(defn insert [xx elt]
(cond (nil? xx) (mcons elt nil)
(< elt (-> xx cdr elt))
(set-cdr! xx (mcons elt (cdr xx)))
:else (insert (cdr xx) elt))
)
(def x (mlist 1 3 4 5 6))
(insert x 2)
我已经很久没有被难倒了。可能是因为我只是在学Clojure
提前谢谢 问题在于:
(< elt (-> xx cdr elt))
(xx-cdr-elt))
在您的本地作用域中,elt
是一个很长的函数,您正在尝试将elt
函数(现在被本地隐藏)应用于(cdr xx)
。只需将elt
参数重命名为其他参数即可
(< elt (-> xx cdr elt))