我正在尝试从我自己的地图创建拉链。根据拉链定义,
Usage: (zipper branch? children make-node root)
参数分支?和孩子们很清楚,我能够定义它。但是节点功能令人困惑。我给了它一个实现,我不认为正在使用它。
我有
的地图{:question "Question 1" :yes "Answer1"
:no {:question "Question 2"
:yes "Answer2"
:no "Answer3"}}
我想从这张地图上建一个拉链。所以我使用了以下拉链函数调用,
(zip/zipper map?
(fn [node] [(:yes node) (:no node)])
(fn [node children] (:question node))
question-bank)
这很好用。即使给出make-node参数为nil,它仍然有效。我不明白将使用此参数的时间和地点。
答案 0 :(得分:2)
Zippers允许您修改树以及只是在树上行走。如果您尝试向树添加新节点或修改现有节点,则将调用make-node
函数。这有点奇怪,因为你的拉链根本没有暴露:question
元素,但我可能会把你的拉链写成:
(zip/zipper map? (juxt :yes :no)
(fn [_ [yes no]] {:yes yes :no no})
root)
我个人不使用拉链,所以这可能不是一个正确的实现;我只是希望说明make-node
函数应该用于创建附加到拉链的新节点。