我正在试着从我自己的地图上创建一个拉链。根据拉链定义,
Usage: (zipper branch? children make-node root)参数分支?孩子们都很清楚,我可以给他们下定义。但是make-node函数令人困惑。我给了它一个实现,我认为它没有被使用。
我有一张地图
{: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,它也能正常工作。我不知道何时何地会使用这个参数。
发布于 2011-10-03 08:35:07
拉链允许你修改树,也可以在树上漫步。如果您尝试向树中添加新节点或修改现有节点,则将调用make-node函数。这有点奇怪,因为您的拉链根本没有公开:question元素,但我可能会将您的拉链写为:
(zip/zipper map? (juxt :yes :no)
(fn [_ [yes no]] {:yes yes :no no})
root)我个人并不经常使用zippers,所以这可能不是一个正确的实现;我只是希望说明make-node函数应该用于创建附加到zippers的新节点。
https://stackoverflow.com/questions/7630089
复制相似问题