julia - 如何在 Julia 中查找和替换 AST 的子表达式
问题描述
假设我有一个像:(Main.i / (0.5 * Main.i * sin(Main.i))
.
我想将每次出现的 替换Main.i
为其他符号。在 Julia 中有没有一种惯用的方法来做到这一点?
解决方案
Main.i
不是符号而是表达式,您可以通过dump(:(Main.i))
.
这是我认为可能符合您需求的快速撰写:
function expr_replace(expr, old, new)
expr == old && return new
if expr isa Expr
expr = deepcopy(expr) # to avoid mutation of source
for i in eachindex(expr.args)
expr.args[i] = expr_replace(expr.args[i], old, new)
end
end
expr
end
对你起作用吗?
编辑:这是一个对以下内容进行最低限度安全使用的版本deepcopy
:
function expr_replace(expr, old, new)
function f(expr)
expr == old && return deepcopy(new)
if expr isa Expr
for i in eachindex(expr.args)
expr.args[i] = f(expr.args[i])
end
end
expr
end
f(deepcopy(expr))
end
一般来说,我想这并不重要,因为你可能不想通过这个函数传递 100 行代码。
推荐阅读
- laravel - 请求输入在中间件中返回 null
- r - 如何更改 R 中 effect_plot (jtools) 的间隔颜色?
- spring-boot - spring-boot升级后的404
- google-drive-api - Google Drive API 成员限制
- neo4j - Neo4j (cypher-shell) 为现有节点创建关系太慢
- c# - 如何在通过 dotnet CLI 安装 NuGet 包时运行命令
- function - COMSOL 中作为边界条件的输入函数
- monogame - MGCB 编辑器在我启动时崩溃
- python - 有没有什么快速的方法来转换数据框中的所有值 - python
- firebase - Flutter:流不从子集合中检索数据