使用clojure的插入排序

使用clojure的插入排序,clojure,Clojure,我在尝试计算下面最后一行时遇到了这个错误:“无消息。[抛出类java.lang.NullPointerException]” “我的插入排序”功能哪里出了问题?好的,这是可行的。那么,为什么将(nil?uuu)和(not(seq?uuu))更改为(empty?)会产生这种差异呢?我将其总结为另一个问题:您可以尝试(nil?())和(empty?())。您使用了(restlst),并且(rest())是(),而不是nil。 (defn my-insertion-sort [lst] (loop

我在尝试计算下面最后一行时遇到了这个错误:“无消息。[抛出类java.lang.NullPointerException]”


“我的插入排序”功能哪里出了问题?

好的,这是可行的。那么,为什么将(nil?uuu)和(not(seq?uuu))更改为(empty?)会产生这种差异呢?我将其总结为另一个问题:您可以尝试(nil?())和(empty?())。您使用了(restlst),并且(rest())是(),而不是nil。
(defn my-insertion-sort [lst]
  (loop [list lst result '()]
    (if-not (seq? list) result
            (recur (rest list) (my-insert (first list) result)))))

(defn my-insert [n lst]
  (cond (nil? lst) (list n)
        (> (first lst) n) (conj lst n)
        :else
        (conj (my-insert n (rest lst)) (first lst))))

(my-insertion-sort '(2 1 3))
(defn my-insertion-sort [lst]
  (loop [list lst result '()]
    (if (empty? list) result
        (recur (rest list) (my-insert (first list) result)))))

(defn my-insert [n lst]
  (cond 
    (empty? lst) (list n)
    (> (first lst) n) (conj lst n)
    :else (conj (my-insert n (rest lst)) (first lst))))