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没有return语句,因此我被困在Clojure中如何实现此目的。
我必须为x的每个扩展状态映射所有结果,并查看其中是否存在真。但是这种方法没有利用短路,并且由于遍历整个搜索树而导致性能不佳。
(some true? (map search (expand x)))
or
宏在这里无济于事,我知道lazy-seq
的存在,但是真的有必要吗?实施此方法的理想方法是什么?
最佳答案
map
返回一个惰性序列;
当您使用some true?
时,该懒惰序列将被增量消耗,在第一个元素上调用search
,然后在第二个元素(如果需要)上调用search
,然后在第三个元素(如果需要)上调用…,等等,直到true
第一次返回ojit_code。
因此,默认情况下它使用“短路”。
关于search - 在Clojure中,如何在找到答案后立即返回搜索过程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20878760/