【发布时间】:2014-06-11 23:38:12
【问题描述】:
我对 Clojure 很陌生。我有一个包含布尔变量的 Java 方法,我想重写此方法以在 Clojure 中使用相同的功能。但是我找不到如何在 Clojure 的运行时设置布尔值 true 和 false。
下面的sn-p基本上只强调布尔部分,我很难想到用函数的方式写这个。
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] ..) -
这个程序毫无意义……你循环遍历集合的元素,翻转 y 的值——“标志”是否意味着代表集合中每个元素的某些功能?如果没有,则返回 1 或 -1,具体取决于集合的元素数是奇数还是偶数
-
您问“如何在 Clojure 中实现相同的概念?”。 为什么您希望这样做?将 Java 逐点翻译成 Clojure,即使在可能的情况下,通常也是徒劳的。在你的 Java 程序有意义之前,很难看到如何在惯用的 Clojure 中呈现它的函数。如果您想解决 Clojure 中定义明确的小问题,请查看 4Clojure。如果您想将 Clojure 解决方案与 Java 和其他语言的解决方案进行比较,Rosetta Code 是一个很好的来源。我发现两者都非常有帮助。万事如意!