Clojure 2024调查问卷中分享您的想法!

欢迎!请参阅关于页面获取更多关于如何使用该网站的信息。

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)`,以接收f函数的AST,就像`tools.analyzer`所做的那样。
评论 by Fogus
您可以通过将tools.analyzer工具与clojure.repl/source函数组合起来,接近该行为。
评论 by Simon Dirmeier
太好了,谢谢!在这里找到了一个解决方案,使用了clojure.repls/source-fn:clojureverse.org/t/how-to-print-a-source-of-a-function-passed-as-a-parameter/6160/4
...