それはClojureのと私の最初の接触ですので、私はウィキペディアに基づいて翻訳を提供して簡単なスクリプト(任意の批評家/コメントは歓迎されている)なぜこのコードで(フラッシュする)必要がありますか?
を書き込もうとしました、問題がある:私はから(フラッシュ)を削除すると、を翻訳スクリプトは翻訳された単語の代わりにnilを出力します。なぜですか?私は明らかに何かを欠いているが、何? (printlnの翻訳)は、同じ結果をもたらすこと(私はdoseq/DOALLと試み始めに、しかし結果なし)フラッシュ
(Clojureの1.2使用方法および反時計と日食3.7.2でテスト)
コード:
(defn translate
[term src-lg tgt-lg]
(let [translations (get-translations (fetch-url (get-url src-lg term)))]
(if (contains? translations tgt-lg) (get translations tgt-lg) "<NOT FOUND>")))
レットをトン使用されている:あなたはtranslate関数の内部でlet
ではなくdef
を使用する必要が
(ns wiki-translate
(:require [clojure.contrib.http.agent :as h])
)
(defn get-url
([lg term] (str "http://" lg ".wikipedia.org/wiki/" term))
)
(defn fetch-url
([url] (h/string (h/http-agent url)))
)
(defn get-translations
([cnt] (apply sorted-map (flatten (for [s (re-seq #"(?i)interwiki-([^\"]+).*wiki\/([^\"]+)\".*/a>" cnt)] [(s 1) (s 2)])))))
(defn translate
[term src-lg tgt-lg] (
(def translations (get-translations (fetch-url (get-url src-lg term))) )
(flush)
(if (contains? translations tgt-lg) (get translations tgt-lg) "<NOT FOUND>")
)
)
(println (translate "Shark" "en" "fr"))