我编写了代码来查找许多序列的共同元素:
(defn common [l & others]
(if (= 1 (count others))
(filter #(some #{%1} (first others)) l)
(filter #(and (some #{%1} (first others)) (not (empty? (apply common (list %1) (rest others))))) l)))
它可以找到有限序列的第一个公共元素,如下所示:
(第一个(常见 [1 2] [0 1 2 3 4 5] [3 1]))-> 1
但如果任何序列是无限的,它很容易在无限搜索中发送:
(第一个(常见[1 2] [0 1 2 3 4 5](范围)))
我理解为什么会发生这种情况,并且我知道我需要以某种方式使计算变得懒惰,但我还不知道如何最好地做到这一点。
所以这就是我的问题:如何重新编写这段代码(或者可能使用完全不同的代码)来找到许多序列的第一个公共元素,其中一个或多个可能是无限的。