【发布时间】:2014-10-30 00:07:40
【问题描述】:
我正在尝试编写一个递归排序函数,将列表从低到高排序(duh)。我目前正在获得输出,只是不是正确的输出。这是我的代码:
(defn sort/predicate [pred loi]
(if (empty? loi)
()
(if (= (count loi) 1)
(cons (first loi) (sort pred (rest loi)))
(if (pred (first loi) (first (rest loi)))
(cons (first loi) (sort pred (rest loi)))
(if (pred (first (rest loi)) (first loi))
(cons (first (rest loi)) (sort pred (cons (first loi) (rest (rest loi)))))
(cons (first loi) (sort pred (rest loi))))))))
基本上,我比较列表中的前两个元素,如果第一个元素更小,我会将其与比较列表中接下来的两个元素的结果进行比较。如果列表的第二个元素更小,我将第二个元素与第一个元素的前两个元素以及第二个元素之后的所有内容排序的结果相结合(抱歉,如果这很难理解)。然后,当列表中只剩下一个元素时,我将它扔到最后并返回它。但是,在某个地方存在一个错误,因为我应该得到以下信息:
>(sort/predicate < '(8 2 5 2 3))
(2 2 3 5 8)
但相反,我得到:
>(sort/predicate < '(8 2 5 2 3))
(2 5 2 3 8)
我对 clojure 很陌生,因此非常感谢任何帮助。另外,我想保持我的代码大致相同(我不想使用已经存在的排序函数)。谢谢
【问题讨论】:
-
我刚刚意识到我只比较前两个元素。
标签: clojure