Я сравниваю Huet's original paper с Clojure's implementation и пытаюсь выяснить, почему были сделаны изменения. Я новичок в Clojure, поэтому, если я ошибаюсь в своей интерпретации кода Clojure, пожалуйста, поправьте меня.Почему реализация Clojure zipper использует различные типы и структуры данных из застежки-молнии Huet?
В бумаге Уэта тип пути (в Окамле) Top | Node of tree list * path * tree list;;
. В Clojure есть два дополнительных поля: pnodes
и changed?
. Какова цель этих полей? Правильно ли я полагаю, что l
и r
соответствуют первой и третьей записям типа Huet и что ppath
является вторым?
Застежка-молния Huet использует связанные списки во всем (обратите внимание, что речь идет только о типе Loc, а не о структуре данных, на которой работает молния), тогда как в некоторых местах, например l
, реализация Clojure использует векторы. Почему изменение, и каково значение для сложности выполнения Clojure?