单个链表的笛卡尔积

问题描述 投票:0回答:1

我的任务是编写一个函数,该函数可以打印单个链表的笛卡尔乘积。这就是我的讲师给我们的,并且效果很好,但是我只是不明白他们是如何工作的。更具体地说,我无法弄清楚(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))))))**
function clojure linked-list clojurescript
1个回答
0
投票

[func是您作为第二个参数传递给slist-iter中的slist-cartesian的函数,即:

(fn [x]
  (slist-iter
    lst
    (fn [y]
      (println x y))))

该函数代替了func中的参数slist-iter

这样,每次迭代slist-iter都会递归调用自身,直到(not (nil? node))为假,因此没有剩余的节点。

© www.soinside.com 2019 - 2024. All rights reserved.