Clojure递归和一个懒惰的序列

Dal*_*ale 4 clojure

好吧,我有点卡在这一点,我真的可以做我正在尝试用下面这部分代码做的事情:

(recur (conj (get-links (first links)) (rest links))))
Run Code Online (Sandbox Code Playgroud)

get-links返回一系列url,这些url被送入初始进程 - links调用然后应该递归.

我输入的第一个链接有效,但是我试图将一个序列连接到另一个链接的第二个链接给出了以下错误.

"Clojure.lang.LazySeq@xxxxxxx"
Run Code Online (Sandbox Code Playgroud)

现在我想知道,这是否是对生成未评估序列的"休息"(其余链接)的指令的引用?

(defn process-links
  [links]
  (if (not (empty? links))
    (do
      (if (not (is-working (first links)))
        (do
          (println (str (first links) " is not working"))
          (recur (rest links)))
        (do
          (println (str (first links) " is working"))
          (recur (conj (get-links (first links)) (rest links))))))))
Run Code Online (Sandbox Code Playgroud)

如果我对此采取的方法完全错误,请告诉我.

Mat*_*ard 7

conj将项添加到集合中.在两个集合上使用它会创建一个嵌套结构.你可能想要concat两个序列.

为了显示:

user> (conj [1 2 3] [4 5 6])
[1 2 3 [4 5 6]]
user> (concat [1 2 3] [4 5 6])
(1 2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud)