我的任务是编写一个函数,该函数可以打印单个链表的笛卡尔乘积。这就是我的讲师给我们的,并且效果很好,但是我只是不明白他们是如何工作的。更具体地说,我无法弄清楚(func(:data节点))这一行。我知道它为我们提供了该节点的数据,但是func在做什么?slist-笛卡尔函数对我来说完全令人困惑。请向我解释它们如何工作。谢谢!
(defn slist-iter [lst func]
(loop [node (deref (:head lst))]
(if (not (nil? node))
(do
(func (:data node))
(recur (deref (:next node)))))))
(defn slist-cartesian [lst]
(slist-iter
lst
(fn [x]
(slist-iter
lst
(fn [y]
(println x y))))))**
[func
是您作为第二个参数传递给slist-iter
中的slist-cartesian
的函数,即:
(fn [x]
(slist-iter
lst
(fn [y]
(println x y))))
该函数代替了func
中的参数slist-iter
。
这样,每次迭代slist-iter
都会递归调用自身,直到(not (nil? node))
为假,因此没有剩余的节点。