我使用Clojure很新。我有一個包含一個布爾變量的Java方法,我想重寫這個方法在Clojure中也使用它。但是我無法找到如何在Clojure中的運行時設置布爾值true和false。轉換了Java概念引入Clojure的
下面的代碼片段基本上只強調布爾的一部分,這是很難想象對我來說,一個功能性的方式寫這篇文章。
int calculate(...){
int y = 0;
boolean flag = false;
foreach(...){
if(!flag){
y = 1;
flag = true;
}
else{
y = -1;
flag = false;
}
}
return y;
}
下面是我在Clojure的第一次嘗試:
(defn calculate [...]
(??flag?? -> I do not know which macro I should use over here
(doseq [x ...]
(if (false? flag) (do 1 (set the flag true))
(do -1 (set the flag false)))))
我如何能實現Clojure中的同一個概念?
從概念上講,使用輔助函數和遞歸函數可能會更清潔 - '(defn calculate [y flag] ..)' – user2864740
這個程序沒有任何意義......你循環收集元素,翻轉y的值 - 是「標誌」意味着代表集合中每個元素的某些功能?如果不是,只需返回1或-1,具體取決於集合是否具有奇數或偶數個元素 – Hendekagon
您問「*我怎樣才能在Clojure中實現相同的概念?」。 *爲什麼*你想這樣做?即使在可能的情況下Java的點語翻譯成Clojure通常也是徒勞的。直到你的Java程序有意義,很難看到如何在慣用的Clojure中渲染它的功能。如果你想在Clojure中解決明確的小問題,請看看[4Clojure](http://www.4clojure.com/)。如果您想將Clojure解決方案與Java和其他語言的解決方案進行比較,[Rosetta Code](http://rosettacode.org/wiki/Rosetta_Code)是一個很好的來源。我發現這兩個都非常有幫助。祝一切順利! – Thumbnail