这是我用Clojure的第一次接触,所以我试着写简单的脚本,它提供了基于维基百科翻译(任何批评/评论,欢迎)为什么我必须在这段代码中使用(flush)?
的问题是:当我删除(齐平)翻译,脚本输出nil而不是翻译的单词。这是为什么?我明显错过了一些东西,但是什么? (的println翻译)给出相同的结果是齐平(在我与doseq/DOALL尝试开始,但没有效果)
(使用Clojure的1.2和3.7.2蚀逆时针方向测试)
的代码:
(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"))