gpt4 book ai didi

Clojure:有没有人制作过可视化代码树结构的工具?

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:18 24 4
gpt4 key购买 nike

我正在学习 Clojure(我的第一个 LISP)并学习 LISP 固有的“代码即数据”的想法可视化工具中的语法树 - 可能是宏扩展前后?

我指的是用类似 SVG 的方式对树进行图形描述。

最佳答案

真的,你所要做的就是' (quote)一种获取它的 AST 的形式。这就是 lisp 的美妙之处。假设您有标准的 every? 函数:

(defn every?
"Returns true if (pred x) is logical true for every x in coll, else
false."
{:tag Boolean
:added "1.0"
:static true}
[pred coll]
(cond
(nil? (seq coll)) true
(pred (first coll)) (recur pred (next coll))
:else false))

只要引用它就可以得到一个嵌套的符号列表:

; Notice the quote at the start!
'(defn every?
"Returns true if (pred x) is logical true for every x in coll, else
false."
{:tag Boolean
:added "1.0"
:static true}
[pred coll]
(cond
(nil? (seq coll)) true
(pred (first coll)) (recur pred (next coll))
:else false))
=>
(defn
every?
"Returns true if (pred x) is logical true for every x in coll, else\nfalse."
{:tag Boolean, :added "1.0", :static true}
[pred coll]
(cond (nil? (seq coll)) true (pred (first coll)) (recur pred (next coll)) :else false))

您可以使用标准的 clojure.pprint/pprint 函数(缩进表示嵌套)将其整理一下以便可视化:

(clojure.pprint/pprint
'(defn every?
"Returns true if (pred x) is logical true for every x in coll, else
false."
{:tag Boolean
:added "1.0"
:static true}
[pred coll]
(cond
(nil? (seq coll)) true
(pred (first coll)) (recur pred (next coll))
:else false)))
(defn
every?
"Returns true if (pred x) is logical true for every x in coll, else\n false."
{:tag Boolean, :added "1.0", :static true}
[pred coll]
(cond
(nil? (seq coll))
true
(pred (first coll))
(recur pred (next coll))
:else
false))

并且您可以通过调用 macroexpand 来获得后宏扩展表示:

(clojure.pprint/pprint
(macroexpand
'(defn every?
"Returns true if (pred x) is logical true for every x in coll, else
false."
{:tag Boolean
:added "1.0"
:static true}
[pred coll]
(cond
(nil? (seq coll)) true
(pred (first coll)) (recur pred (next coll))
:else false))))
(def
every?
(clojure.core/fn
([pred coll]
(cond
(nil? (seq coll))
true
(pred (first coll))
(recur pred (next coll))
:else
false))))

如果您正在寻找比这更多的东西,引用一些代码然后递归地搜索它是微不足道的。您可以将其更改为您想要的任何格式。

关于Clojure:有没有人制作过可视化代码树结构的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50184115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com