Clojure功能说明。

时间:2016-03-16 07:23:41

标签: clojure

任何人都可以向我解释这个clojure函数的步骤

(defn to-list [{:keys [key left right] :as tree}]
  (when tree
    `(~@(to-list left) ~key ~@(to-list right))))

1 个答案:

答案 0 :(得分:2)

因此to-list函数需要map具有三个键中的一些,即keyleftright。此地图也可以通过名称tree访问。参见this参数解构。然后你有一个语法引用(详见this)。它大致相当于

(clojure.core/seq (clojure.core/concat (to-list left) 
                                       (clojure.core/list key) 
                                       (to-list rirght)))

所以基本上如果你有nil树,它将返回nil(这似乎是合理的)。如果您的树有一个键left(可能是nil或者地图可能带有键keyleftright),那么左树将被递归打印,然后添加密钥,如果你有一个密钥right,则递归打印右树。如果在任何步骤中您只是离开或只是向右,则呼叫(to-list left)将产生零,其余的将按照已经解释的那样工作。

我希望这会有所帮助。

注意我现在没有clojure repl,所以我没有测试语法引用的确切等价物,但它应该与我写的内容类似