我有一大堆数学函数从这个格式的程序中输出:
(704253724578.0182000000000000 .* (mydivide (mydivide (mydivide (mysqrt (- X13 X11)) (mydivide X18 X15)) (* (square (mydivide (* X1 X20) X19)) X2)) (mydivide (* (* X1 X20) (mydivide X25 X15)) X9))) + 77.2424201451314200
我需要编写一个脚本来将它们转换成可读的格式,如下所示:
(704253724578.0182000000000000 * ( ((sqrt(X13-X11) / (X18/X15)) /((((X1*X20)/X19)^2) * X2))/ (((X1 * X20) * (X25 / X15)) / X9)) ) + 77.2424201451314200
关于在java中执行此操作的最佳方法的任何想法?或者除了java之外还有其他更好的工具吗?
谢谢!
答案 0 :(得分:0)
安装Ruby和一个名为“sexpistol”的漂亮宝石,它允许你处理s表达式。
我为你破解了一个解决方案:
require 'sexpistol'
require 'pp'
exp="(704253724578.0182000000000000 .* (mydivide (mydivide (mydivide (mysqrt (- X13 X11)) (mydivide X18 X15)) (* (square (mydivide (* X1 X20) X19)) X2)) (mydivide (* (* X1 X20) (mydivide X25 X15)) X9))) + 77.2424201451314200"
parser = Sexpistol.new
tree= parser.parse_string(exp)
SYM={
:".*" => :*,
:* => :*,
:"+" => :"+",
:- => :-,
:mydivide => :/,
:square => "^2",
:mysqrt => "mysqrt"
}
def isPrefix sexp
return true if SYM[sexp.first]
return false
end
def p2i sexp
if sexp.is_a? Array
if isPrefix(sexp)
op,lhs,rhs =sexp
case op
when :square
return [p2i(lhs),SYM[op]]
when :mysqrt
return [:mysqrt,p2i(lhs)]
else
return [p2i(lhs),SYM[op],p2i(rhs)]
end
else
lhs,op,rhs=sexp
return [p2i(lhs),SYM[op],p2i(rhs)]
end
else
return sexp
end
end
pp parser.to_sexp(p2i(tree)).first
# prints : (704253724578.0182 * ((((mysqrt (X13 - X11)) / (X18 / X15)) / ((((X1 * X20) / X19) ^2) * X2)) / (((X1 * X20) * (X25 / X15)) / X9))) + 77.24242014513142
如果你写论文,你可以承认我!