gpt4 book ai didi

java - 将 Java 概念转换为 Clojure

转载 作者:行者123 更新时间:2023-12-02 08:34:36 26 4
gpt4 key购买 nike

我对 Clojure 还很陌生。我有一个包含 boolean 变量的 Java 方法,我想重写此方法以将其与 Clojure 中的相同功能一起使用。但我找不到如何在 Clojure 的运行时设置 boolean 值 true 和 false。

以下代码片段基本上只强调 boolean 部分,我很难想象以函数式方式编写它。

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 中实现相同的概念?

最佳答案

对于您拥有的 Java 代码,将其转换为 Clojure 的最简单方法似乎是跳过所有迭代并仅返回最终值:

(defn calculate [coll]
(odd? (count coll)))

如果你想要更复杂的东西,我想你可以做类似的事情

(defn calc [coll flag]
(if (empty? coll)
flag
(recur (rest coll) (not flag))))

并调用它

(defn calculate [coll]
(calc coll false))

这种递归不是最惯用的风格,对于这个问题来说有点疯狂,但它演示了如何编写一个表达式,而不是改变变量,在求值时生成传递到下一次迭代的值(请参阅在上面的示例中重复调用)。

像这样重写会是更好的风格

(defn calculate
([coll flag]
(if (empty? coll)
flag
(recur (rest coll) (not flag))))
([coll]
(calculate coll false)))

所以只有一个函数名需要处理。 (我离开了另一种方式,认为对于 Clojure 新手来说阅读可能会更清楚。)

我附议建议您查看 4clojure 的评论。这是进行练习的好方法,一旦您有了解决方案,您就可以向其他用户的做法学习。

关于java - 将 Java 概念转换为 Clojure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com