我还没有找到任何关于如何执行递归实体规范的示例,就像我在下面尝试的那样。我意识到::left
and::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}
}))