這是我用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"))