任何人都可以向我解释这个clojure函数的步骤
(defn to-list [{:keys [key left right] :as tree}]
(when tree
`(~@(to-list left) ~key ~@(to-list right))))
答案 0 :(得分:2)
因此to-list
函数需要map具有三个键中的一些,即key
,left
和right
。此地图也可以通过名称tree
访问。参见this参数解构。然后你有一个语法引用(详见this)。它大致相当于
(clojure.core/seq (clojure.core/concat (to-list left)
(clojure.core/list key)
(to-list rirght)))
所以基本上如果你有nil
树,它将返回nil
(这似乎是合理的)。如果您的树有一个键left
(可能是nil或者地图可能带有键key
,left
和right
),那么左树将被递归打印,然后添加密钥,如果你有一个密钥right
,则递归打印右树。如果在任何步骤中您只是离开或只是向右,则呼叫(to-list left)
将产生零,其余的将按照已经解释的那样工作。
我希望这会有所帮助。
注意我现在没有clojure repl,所以我没有测试语法引用的确切等价物,但它应该与我写的内容类似