levenshtein-distance #4clojure

levenshtein-distance - 猫的怠惰Daysをgolf、というか4clojureに投稿したコードを晒してみる。

(defn levenshtein-distance [x y]
  (last
   (reduce
    (fn [prev j]
      (reduce
       (fn [curr i]
	 (conj curr
	       (+ 1 (min (nth prev (+ i 1))
			 (nth curr i)
			 (- (nth prev i)
			    (if (= (nth x i) (nth y j)) 1 0))))))
       [(+ j 1)] (range (count x))))
    (range (+ 1 (count x)))
    (range (count y)))))

不要なとこを削ってるだけでやってる事はほぼ同じ。
これをさらに色々削ってくと140ポイント(4clojureのgolfscoreは空白を除いた文字数)まで縮みます。
4clojure-golf/101_Levenshtein Distance.clj at master · youz/4clojure-golf · GitHub

ついでに#4clojureで見つけたlucasさんのメモ化再帰を使用した方法。
lucas1000001-4clojure-solution101.clj

スマート。こちらは削ると142まで縮みます。(多分)
しかしwith-local-varsはもっと短い名前で良い気がするな…