2024 Clojure 状态调查中分享您的想法!

欢迎!有关如何使用的一些更多信息,请参阅关于页面。

0
文档
重新标记

我在想,clojure.zip/next 的文档字符串是否会误导一些人,它的内容如下:

使用深度优先遍历移动到层次结构中的下一个位置。
当到达末尾时,返回一个特殊位置,可以通过 end? 标识。如果已到达末尾,则保持在该位置。
如果在末尾,即使调用 next,也不会移动到末尾之外。

一些人可能会在没有更明确指导的情况下假设,ZIPPER 的末尾是最后一个节点,在那个点调用 next 会将 ZIPPER 定位到最后一个节点。

就我所理解的而言(这可能不是特别准确),当在 ZIPPER 的最后一个节点后面调用 next 时,Clojure ZIPPER 的末尾状态会被触发,之后

  • ZIPPER 将不再可导航或更新。
  • 您仍然可以调用 root(或 node,此时与 root 相当),next 和 end?,但除此之外,我认为,这就算结束了。

以下是一些示例代码以展示行为

(require '[clojure.zip :as czip])
(->> [1 2 3]
     czip/vector-zip
     (iterate czip/next)
     (take 10)
     (map (juxt czip/node czip/end?)))
;; => ([[1 2 3] false]
;;     [1 false]
;;     [2 false]
;;     [3 false]
;;     [[1 2 3] true]
;;     [[1 2 3] true]
;;     [[1 2 3] true]
;;     [[1 2 3] true]
;;     [[1 2 3] true]
;;     [[1 2 3] true])

next 的文档字符串可能需要更多地讨论什么是“末尾”,什么是指达到末尾状态。也许像这样:

使用深度优先遍历移动到层次结构中的下一个位置。
当到达末尾时,即最后一个节点之后,通过 end? 返回一个特殊位置。如果已到达末尾,则保持在末尾。
在末尾时,有效的调用有 end?、next 和 root。

如果文档字符串不是正确的位置,那么ZIPPER 概述可以详述?

1 个回答

0

"returns a distinguished loc" 是 clear 的:zipper 的结束标记不是节点之一。

Webster's Second Unabridged (1956) 将 "distinguished" 定义为 "distinct; differentiated"。至于计算机科学中对 "distinguished value" 的定义,我未在网上找到,但 OpenAI Chat 做对了,所以它一定在某处:'term "distinguished value" 通常指在数据结构或系统中具有特殊含义或目的的特定值。此值通常用作标记或哨兵,以指示数据的开始或结束部分,或以信号某种条件或状态。例如,在链表数据结构中,值 "NULL" 常常用作特殊的值以指示列表的末尾。'

...