首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zipper库中的make-node

zipper库中的make-node
EN

Stack Overflow用户
提问于 2011-10-03 08:12:46
回答 1查看 428关注 0票数 2

我正在试着从我自己的地图上创建一个拉链。根据拉链定义,

代码语言:javascript
复制
Usage: (zipper branch? children make-node root)

参数分支?孩子们都很清楚,我可以给他们下定义。但是make-node函数令人困惑。我给了它一个实现,我认为它没有被使用。

我有一张地图

代码语言:javascript
复制
{:question "Question 1" :yes "Answer1" 
                        :no {:question "Question 2"
                             :yes "Answer2"
                             :no "Answer3"}}

我想用这张地图做一条拉链。所以我使用了下面的拉链函数调用,

代码语言:javascript
复制
(zip/zipper map? 
    (fn [node] [(:yes node) (:no node)]) 
    (fn [node children] (:question node)) 
    question-bank)

这可以很好地工作。即使给出make-node参数nil,它也能正常工作。我不知道何时何地会使用这个参数。

EN

回答 1

Stack Overflow用户

发布于 2011-10-03 08:35:07

拉链允许你修改树,也可以在树上漫步。如果您尝试向树中添加新节点或修改现有节点,则将调用make-node函数。这有点奇怪,因为您的拉链根本没有公开:question元素,但我可能会将您的拉链写为:

代码语言:javascript
复制
(zip/zipper map? (juxt :yes :no) 
                 (fn [_ [yes no]] {:yes yes :no no}) 
                 root)

我个人并不经常使用zippers,所以这可能不是一个正确的实现;我只是希望说明make-node函数应该用于创建附加到zippers的新节点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7630089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档