【发布时间】:2015-10-25 10:21:38
【问题描述】:
我实现了一个成员? clojure中的函数如下:
(defn member? [item seq]
(cond (empty? seq) false
(= item (first seq)) true
:else (recur item (rest seq))))
不幸的是,这不适用于无限列表。有谁知道实现它的方法以便能够获得:
(member? 3 (range)) -> true
【问题讨论】:
-
为什么不直接使用
filter?例如(boolean (seq (filter #{2} (range 10)))) -
即使它适用于阳性病例,您认为
(member? -10 (range))应该返回什么? -
@alfredx 这只是一个测试用例:我想确定 member 的第二个参数?出于性能原因并没有完全实现,尽管在实践中我永远不会提供无限的列表。我不知道它确实在 clojure 1.7.0 中工作(我已经用 clojure 1.6.0 进行了测试,请参阅下面的评论)。
-
我觉得这是XY problem。当用户尝试移植
unique函数以处理惰性序列时,我之前曾看到过这样的问题。 -
顺便说一句,我极力劝阻您不要使用“seq”(或任何其他会隐藏 clojure.core 中的函数的名称)作为变量名。它有效,但极易出错。
标签: recursion clojure lazy-evaluation