search - 在 clojure 中,如何使搜索过程在找到答案后立即返回

标签 search clojure functional-programming

这里是 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/

相关文章:

clojure - 如何在clojure中执行max-by?

clojure - 我的简单 Clojure gen-class 脚本有什么问题?

clojure - 惰性序列的后处理 (Clojure)

c# - 对值元组使用属性

ruby-on-rails - 具有祖先的 Rails 复杂搜索

C代码,搜索功能

macros - 在编写宏时,Clojure 的单一命名空间方法是否会以任何方式限制您?

f# - 枚举示例的 Ocaml 类型错误

database - 在大文本中查找名称

java - 字符串字段 LIKE% 的 SOLR schema.xml