请在2024 Clojure状态调查中分享您的想法!

欢迎!请查阅关于页面了解有关该功能的一些更多信息。

0
Clojure

如何从函数中解析抽象语法树?例如,给定

 (defn f [x]
     (/ (- 1.0 (Math/exp (- x))) 2.0))

是否有方法将其解析为类似于列表的数据结构

[:op "/" [:op "-" 1.0 [:op "Math/exp" [:op "-" x]]] 2.0]

谢谢!

顺便说一句,我知道这几乎是一样的。我在学习Clojure,这看起来是一个简单的问题,但我找不到解决方案。

1 答案

+2

你好!有一个名为tools.analyzer的有用库,可以处理此类任务,链接是https://github.com/clojure/tools.analyzer

谢谢!这已经相当接近了,但到目前为止我还没有找到使其做到我想要的方法。具体来说,我想将一个函数名插入到一个解析函数中,例如`(parse f)`,并且像`tools.analyzer`一样接收到函数f的AST。
通过组合tools.analyzer和clojure.repl/source函数,您可以接近那种行为。
非常好!在这里找到了一个替代方案,使用clojure.repls/source-fn:clojureverse.org/t/how-to-print-a-source-of-a-function-passed-as-a-parameter/6160/4
...