Functional programming 在拉链库中创建节点
我正在尝试从我自己的地图创建一个拉链。根据拉链的定义Functional programming 在拉链库中创建节点,functional-programming,clojure,zipper,Functional Programming,Clojure,Zipper,我正在尝试从我自己的地图创建一个拉链。根据拉链的定义 Usage: (zipper branch? children make-node root) 参数分支?孩子们都很清楚,我能给他们下定义。但是make node函数令人困惑。我给了它一个实现,我认为它没有被使用 我有一张地图 {:question "Question 1" :yes "Answer1" :no {:question "Question 2"
Usage: (zipper branch? children make-node root)
参数分支?孩子们都很清楚,我能给他们下定义。但是make node函数令人困惑。我给了它一个实现,我认为它没有被使用
我有一张地图
{:question "Question 1" :yes "Answer1"
:no {:question "Question 2"
:yes "Answer2"
:no "Answer3"}}
我想用这张地图做个拉链。所以我使用了下面的zippers函数调用
(zip/zipper map?
(fn [node] [(:yes node) (:no node)])
(fn [node children] (:question node))
question-bank)
这个很好用。即使给定make节点参数nil,它也可以工作。我不知道何时何地将使用此参数。拉链允许您修改树以及在树上行走。如果尝试向树中添加新节点或修改现有节点,将调用
make node
函数。这有点奇怪,因为你的拉链根本没有暴露:question
元素,但我可以将你的拉链写为:
(zip/zipper map? (juxt :yes :no)
(fn [_ [yes no]] {:yes yes :no no})
root)
我个人很少使用拉链,所以这可能不是一个正确的实现;我只是想说明一下,makenode
函数应该用来创建新的节点来连接到拉链上