gpt4 book ai didi

recursion - 递归实体规范

转载 作者:行者123 更新时间:2023-12-03 22:26:48 25 4
gpt4 key购买 nike

我还没有找到任何关于如何执行递归实体规范的示例,就像我在下面尝试的那样。我意识到::left::right失败是因为它们尚未定义,所以我想知道如何在 ::node 中递归定义它们规范

(s/def ::key string?)
(s/def ::value string?)
(s/def ::left ::node)
(s/def ::right ::node)
(s/def ::n int?)
(s/def ::node (s/keys :req [::key ::value ::n]
:opt [::left ::right]))

(defn test-it []
(s/valid? ::node
{::key "hi"
::value "bye"
::n 0
::left {::key "what"
::value "nothing"
::n 0}
::right {::key "hello"
::value "goodbye"
::n 0}
}))

最佳答案

如果您移动,它会起作用 ::left::right以下定义 ::node ,正如 Sam Estep 在对该问题的评论中所建议的那样; s/keys 中的引用文献不会立即被关注:

Clojure 1.9.0-alpha14
user=> (require '[clojure.spec :as s])
nil
user=> (s/def ::key string?)
:user/key
user=> (s/def ::value string?)
:user/value
user=> (s/def ::n int?)
:user/n
(s/def ::node (s/keys :req [::key ::value ::n]
:opt [::left ::right]))
:user/node
user=> (s/def ::left ::node)
:user/left
user=> (s/def ::right ::node)
:user/right
(defn test-it []
(s/valid? ::node
{::key "hi"
::value "bye"
::n 0
::left {::key "what"
::value "nothing"
::n 0}
::right {::key "hello"
::value "goodbye"
::n 0}
}))
#'user/test-it
user=> (test-it)
true
user=> (s/valid? ::node {::key "hi" ::value "bye" ::n 0 ::left {}})
false

关于recursion - 递归实体规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42261786/

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