Я пытаюсь написать рекурсивную функцию сортировки, сортирующую список от низкого до высокого (duh). В настоящее время я получаю вывод, а не правильный вывод. Вот мой код:Clojure - функция сортировки
(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))))))))
В принципе, я сравниваю первые два элемента в списке и, если первый элемент меньше I против его с результатом сравнения двух следующих элементов списка. Если второй элемент списка меньше, я минус второй элемент с результатом сортировки первых двух элементов минусов первого элемента и всего после второго элемента (извините, если это трудно выполнить). Затем, когда в списке остается только один элемент, я бросаю его в конец и возвращаю. Тем не менее, есть ошибка по пути куда-то, потому что я должен получить следующее:
>(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, так что любая помощь сильно оценили. Кроме того, я хотел бы сохранить код примерно одинаковым (я не хочу использовать функцию сортировки, которая уже существует). Thanks
Я просто понял, что я только когда-либо сравнивать первые два элементы. –