原子在 Maclisp 中具有属性。如何在 Clojure 中做同样的事情?
Atoms have Properties in Maclisp. How to do the same in Clojure?
引自 (1975) Maclisp 参考手册:"Each atomic symbol has associated with it a property-list, which can be retrieved with the plist function."
Maclisp 属性-list 是 'indicator/value' 对的列表。在 Maclisp 中,
(get x y)
获取 x 的 y-属性.
(putprop x 'banana y)
将 x 的 y-属性 设置为香蕉。
我的任务是将大量旧的 Maclisp 代码转换为 Clojure。我是 Clojure 的新手,但随着这个项目的展开,我不会待太久。在我 运行 离开并自己写一些东西之前,我想知道 Clojure 是否已经具有 "property list" 功能?或者接近的东西?
如果没有,聚集的 Clojure 大神们会让我做什么来实现这样的功能?请记住,Maclisp 中的每个原子符号 可以 但不一定 必须具有 一个 属性 列表。谢谢。
clojure 具有与变量/数据值关联的元数据映射:
user> (def x [1 2 3])
#'user/x
user> (reset-meta! #'x {:my-data 1})
;;=> {:my-data 1}
请注意,此元数据与变量相关联,而不是与变量绑定数据相关联
user> (-> x var meta)
{:my-data 1}
user> (-> #'x meta) ;; short form
{:my-data 1}
user> (-> x meta)
nil
否则您可以将其附加到值本身:
user> (def x ^{:some-data 101} [1 2 3])
#'user/x
user> (meta x)
{:some-data 101}
取决于你想如何使用它。
引自 (1975) Maclisp 参考手册:"Each atomic symbol has associated with it a property-list, which can be retrieved with the plist function."
Maclisp 属性-list 是 'indicator/value' 对的列表。在 Maclisp 中,
(get x y)
获取 x 的 y-属性.
(putprop x 'banana y)
将 x 的 y-属性 设置为香蕉。
我的任务是将大量旧的 Maclisp 代码转换为 Clojure。我是 Clojure 的新手,但随着这个项目的展开,我不会待太久。在我 运行 离开并自己写一些东西之前,我想知道 Clojure 是否已经具有 "property list" 功能?或者接近的东西?
如果没有,聚集的 Clojure 大神们会让我做什么来实现这样的功能?请记住,Maclisp 中的每个原子符号 可以 但不一定 必须具有 一个 属性 列表。谢谢。
clojure 具有与变量/数据值关联的元数据映射:
user> (def x [1 2 3])
#'user/x
user> (reset-meta! #'x {:my-data 1})
;;=> {:my-data 1}
请注意,此元数据与变量相关联,而不是与变量绑定数据相关联
user> (-> x var meta)
{:my-data 1}
user> (-> #'x meta) ;; short form
{:my-data 1}
user> (-> x meta)
nil
否则您可以将其附加到值本身:
user> (def x ^{:some-data 101} [1 2 3])
#'user/x
user> (meta x)
{:some-data 101}
取决于你想如何使用它。