Julia 朱莉娅:从字典中计算表达式

Julia 朱莉娅:从字典中计算表达式,julia,Julia,我有一个表达式列表,f.x "a1 || a4" "a3 && a5 还有一本字典,里面有这些的真值 a1 -> true a2 -> false 我需要使用字典中的真/假值计算列表中的表达式 有什么办法可以轻松做到这一点吗?非常感谢您的任何帮助我觉得可能会有一个更优雅的解决方案,但这肯定会完成工作 truths=Dict(“a1”=>true,“a2”=>false) 表达式=[“a1 | | a4”,“a1&&a2”] 为了真理(关键、价值) 信息(“评估:'

我有一个表达式列表,f.x

"a1 || a4"
"a3 && a5
还有一本字典,里面有这些的真值

a1 -> true
a2 -> false
我需要使用字典中的真/假值计算列表中的表达式


有什么办法可以轻松做到这一点吗?非常感谢您的任何帮助

我觉得可能会有一个更优雅的解决方案,但这肯定会完成工作

truths=Dict(“a1”=>true,“a2”=>false)
表达式=[“a1 | | a4”,“a1&&a2”]
为了真理(关键、价值)
信息(“评估:'$key=$value')
eval(解析(“$key=$value”))
结束
表达式中的exp
信息(“$exp=>$(eval(parse(exp))”)
结束

什么是
f.x
?你说的清单是什么意思?以后,请给出工作代码,而不是像这样的代码片段

在Julia中,您几乎肯定不希望像
a1 | | a4
那样将Julia代码存储在字符串中,而是将其存储为Julia表达式(这是字符串的
parse
实际给出的结果):

其次,您可能不希望使用具有如下名称的变量,而是使用数组:

a = bitrand(5)   # 5 random bits
a[1]   # gives true
那你就用

ex = [:(a[1] || a[4]), :(a[3] && [a[5])]
你可以这样做

map(eval, ex)
它计算向量中的每个表达式

如果您认为使用
a[1]
而不是
a1
打字太多,可以遍历语法树,将
a_i
替换为
a[i]
。或者,如果您有字符串,只需对字符串使用
replace
函数:

replace("hello a3 a34", "a3", "a[3]")

(所以要小心!)

性能重要吗?表达式列表是否已修复?是否使用不同的输入值集对其进行评估?它们只是布尔值吗?如果表达式被重用,那么您可能需要对它们进行一次解析,并存储表达式,而不是每次都进行解析。srting表达式从一个JSON文件读入一个类型,表示被剔除的基因(如果你知道你的生物学),整个列表需要经常评估
replace("hello a3 a34", "a3", "a[3]")