请分享您的想法,参加2024年Clojure调查!https://www.surveymonkey.com/r/clojure2024

欢迎!有关如何使用本站的信息,请参阅关于页面。

0
core.match

以下是由于存在 {{recur}} 而崩溃的内容

`
(defn rec [expr]
(match expr

     [:global] 'GLOBAL
     [:constant x] x
     [:variable x] x
     [:lazy-variable x] `(deref ~x)
     [:if test if-true if-false] `(if ~(rec test)
                                    ~(rec if-true)
                                    ~(rec if-false))
     [:delist list index] `(get ~(rec list) ~(rec index))
     [:depair pair key] `(get ~(rec pair) ~(match key :first 0 :second 1))
     [:list elements] (map rec elements)
     [:fold-recur index-arg list-sym] `(recur (+ 1 ~index-arg) (rest ~list-sym))
     [:zip left right] `(map vector ~(rec left) ~(rec right))
     [:filter list arg body] `(filter (fn [~arg] ~(rec body) ~(rec list)))
     [:len list] `(count ~(rec list))
     [:pair first second] [(rec first) (rec second)]
     [:block arg body] `(fn [~arg] ~(rec body))
     [:app f arg] `(~(rec f) ~(rec arg))
     [:query e annotations] `(QUERY ~(rec e) ~annotations)
     [:lookup key] `(LOOKUP ~key)
     [:let name value expr] `(let [~name ~value] expr)
     ; ... about 15 more
     ))

`

3 条回答

0

评论由:jneen 提出

一种笨拙的解决方法是,从外部作用域中插入 {{'recur}} 符号。

`
(def recur-sym 'recur)

(match expr
... (~recur-sym ...)``

0

评论由:dnolen 提出

现在工具-analysis.analyzer 已存在,将不会困难地解决问题。

0
参考:https://clojure.atlassian.net/browse/MATCH-95(由dnolen报告)
...