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/

10-14 13:07