我在 Common Lisp 中使用属性列表来表示带有一些附加信息的二叉树。我希望能够使用单个函数任意深入树,并相应地对其进行修改。
在 Clojure(这是我使用的另一个 Lisp)中,存在名为 get-in
和 assoc-in
的函数,它们可以做到这一点,但我还没有'在 Common Lisp 中没有发现类似的东西。它们真的存在吗,还是我必须写它们?
最佳答案
我还没有看到嵌套plists用于这样的数据结构;这可能有点不寻常。我宁愿期望一个结构(用 defstruct
定义)或类(用 defclass
定义)表示节点。对于(不太稀疏)二叉树的情况,另一种方法是将其实现为数组,其中根节点位于索引 0 处,每个节点的子节点位于 (2 · i + 1) 和 (2 · i + 2) 处。
如果您坚持使用 plist,则必须嵌套 getf
并为嵌套的 getf
编写一个 setf
扩展器。
关于clojure - 类似于Clojure对plists的get-in和assoc-in的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23668363/