这里是 Clojure 新手。
我正在用 Clojure 解决一个搜索问题。 在搜索问题中,找到答案后立即返回是很常见的。 例如,在 Java 中
boolean search(State x) {
if (finishState(x)) return true;
for (State y: expand(x)) {
if (search(y)) return true; // Return early
}
}
我不知道如何在 Clojure 中实现它,因为 Clojure 没有 return 语句。 我必须映射 x 的每个扩展状态的所有结果,并查看其中是否存在 true。但这种方法没有利用短路,遍历所有搜索树,性能较差。
(some true? (map search (expand x)))
or
宏在这里没有帮助,我知道lazy-seq
的存在,但是
真的有必要吗?实现它的理想方式是什么?
最佳答案
map
返回惰性序列;
当您使用 some true?
时,惰性序列将被增量使用,在第一个元素上调用 search
,然后是第二个(如果需要),然后是第三个(如果需要),...等等,直到第一次 search
返回 true
。
所以它默认使用“短路”。
关于search - 在 clojure 中,如何使搜索过程在找到答案后立即返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20878760/