2012-02-26 7 views
2

このブログ記事(http://williamedwardscoder.tumblr.com/post/18319031919/programming-language-readability)には、プログラミング言語の読みやすさを比較するための、HaskellとPythonでの自動補完の実装が含まれています。Clojureでオートコンプリートのサンプルを実装する方法は?

Clojureで同じことをどのように実装するのかがわかりません。 Clojureコードは、より抽象度が高いために読みやすくなりますか?

+0

あなたはそれを試してみませんか? –

+0

私はClojureを学んだのは私の5日目に過ぎません。あまりにも私のために。答えは私の学習に役立ちます。だれかがコードを返信してくれてありがとうございます。 – jemeshsu

答えて

4

ミニマル実装:

(ns trie.example) 

(defn trie-add [trie & words] 
    (reduce 
    (fn [trie word] 
    (assoc-in trie (concat word [::val]) word)) 
    trie 
    words)) 

(defn trie-matches [trie prefix] 
    (letfn [(search [node] 
      (mapcat (fn [[k v]] 
         (if (= ::val k) [v] (search v))) 
        node))] 
    (search (get-in trie prefix)))) 

使用例:

;; Create trie 
(def trie (trie-add {} "foo" "ba" "bar" "baz" "qux" "quux")) 

;; trie looks like this: 
{\q 
{\u 
    {\u {\x {:trie.example/val "quux"}}, 
    \x {:trie.example/val "qux"}}}, 
\b 
{\a 
    {\z {:trie.example/val "baz"}, 
    \r {:trie.example/val "bar"}, 
    :trie.example/val "ba"}}, 
\f {\o {\o {:trie.example/val "foo"}}}} 

;; Autocomplete 
(trie-matches trie "ba") 
=> ("baz" "bar" "ba") 

非ワード値を格納する、ソートのようなもの、及び圧縮は、読者への課題として残されています。

関連する問題