我想寫一個函數adjacents
,它返回一個序列的相鄰對的向量。所以(adjacents [1 2 3])
將返回[[1 2] [2 3]]
。如何編寫一個返回相鄰對的列表的Clojure函數?
(defn adjacents [s]
(loop [[a b :as remaining] s
acc []]
(if (empty? b)
acc
(recur (rest remaining) (conj acc (vector a b))))))
我目前的實施適用於字符串的序列,但與整數或字符REPL輸出這個錯誤:
IllegalArgumentException Don't know how to create ISeq from: java.lang.Long clojure.lang.RT.seqFrom (RT.java:494)
對'nil?'測試b是災難性的,因爲現在你不能計算'(鄰接關係'[x y nil 5 6 7])'或類似的東西。相反,你需要使用列表,例如'(loop [[x&xs] remaining](如果xs(let [y(first xs)] ...)))''。 – amalloy
確實如此,這只不過是對Levenshtein距離最小的OP代碼進行調整以解決相關問題。 –