除了loop .. recur之外,使用什么是最好的Clojure构造,以便在遍历序列序列(sos)时,如果找到结果,处理可以停止?
以下是详细信息:
我有一个懒惰的序列从clojure-csv,一个sos返回.
在sos中的每个序列中的给定位置(索引)处存在值.
我一直在每个序列中查看该位置,直到找到该值或达到sos的结尾.
如果找到该值,我想停止处理sos.
我唯一能想到的是使用for with和when来保留匹配,但序列处理不会停止,或者使用过滤器.
但是,我相信我可以使用更好的东西,但我会被困在那将是什么.
谢谢.
我更喜欢吃这些任务的时间,如果键是固定的索引,则第n个可以匹配它.
(take-while #(not= (nth % index) key) sos)
user> (def sos [[1 2 3] [4 5 6] [7 8 9] [10 11 12]])
#'user/sos
user> (take-while #(not= (nth % 2) 9) sos)
([1 2 3] [4 5 6])
Run Code Online (Sandbox Code Playgroud)
然后,您可以在结果序列上映射处理函数.
这个怎么样?
(defn find-first [pred col]
(first (filter pred col)))
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
(find-first #(< % 5) coll)
Run Code Online (Sandbox Code Playgroud)
您应该能够创建一个与序列序列一起使用的谓词.
user=> (defn find-first [pred col]
(first (filter pred col)))
#'user/find-first
user=> (find-first #(> % 10) '(1 5 8 2 15 20 31 5 1))
15
Run Code Online (Sandbox Code Playgroud)