gpt4 book ai didi

serialization - 序列化 zipper ?

转载 作者:行者123 更新时间:2023-12-01 10:06:09 27 4
gpt4 key购买 nike

repl> (-> root zip/down zip/right)
[{:answer-keys [5 6], :id 3} {:l [{:id 2, :answer-keys []}], :pnodes [{:answer-keys [2 3 4], :id 1}], :ppath nil, :r ({:answer-keys [7], :id 4})}]

当我打印出 repl 上的 zipper 时,我看到了这些数据。我在想这可能是序列化 zipper 所需的所有数据?是否可以从提供的数据中反序列化 zipper ?

我正在寻找类似下面想象的 zip/serialize 和 zip/deserialize 功能的东西。

(def s (zip/serialize (-> root zip/down zip/right))) ;; s is a string
(def d (zip/deserialize s)) ;; d is a zipper location
;;And I can go on using the deserialized zipper d without any difficulty.

有人知道怎么做吗?

最佳答案

zipper 的神奇之处在于它们是一种数据结构,代表生成任意修改版本的树结构所需的一切。 zippers 打印和阅读都很好因为它们是正确的值并且不需要任何状态

你可以用pr-str“序列化”它,用read“反序列化”它

做一个 zipper :

user> (zip/vector-zip [[1 [2]][3][4]])
[[[1 [2]] [3] [4]] nil]
user> (def s (zip/vector-zip [[1 [2]][3][4]]))
#'user/s
user> s
[[[1 [2]] [3] [4]] nil]

将其序列化为字符串:

user> (def serialized-s (pr-str (zip/next s)))
#'user/serialized-s
user> serialized-s
"[[1 [2]] {:l [], :pnodes [[[1 [2]] [3] [4]]], :ppath nil, :r ([3] [4])}]"

回读:

user> (def deserialized-s (read-string "[[1 [2]] {:l [], :pnodes [[[1 [2]] [3] [4]]], :ppath nil, :r ([3] [4])}]"))
#'user/deserialized-s

对结果做一些事情:

user> (zip/root deserialized-s)
[[1 [2]] [3] [4]]

关于serialization - 序列化 zipper ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10391134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com