Tcl 调用最大值

Tcl calling maxima

如何在tcl中发送和接收来自外部程序的数据?我试试这个:

set d exec maxima --batch-string='5+10;'
puts d;

但是没有用。我需要从 tcl 调用 Maxima(http://maxima.sourceforge.net/index.html) 并在 tcl maxima 结果中调用 return 。官方文档是空的或非常旧,示例不起作用。

我猜你最好不要打这样的电话:

set theBatchString "5+10;"

set d [exec maxima --batch-string=$theBatchString]
puts $d

为了清楚起见,我将批处理字符串拆分为它自己的变量,请记住,单引号实际上对 Tcl 没有任何意义;他们是 shell 主义。 Tcl 使用不同的语法。

我已经编写了 maxima_call 函数来轻松调用 Maxima。您需要在 maxima_path 变量中设置您自己的 Maxima 程序路径。在 Linux 上可能是 set maxima_path maxima

proc maxima_call {expression} {
  set maxima_path "M:\Programs\maxima-5.40.0\bin\maxima.bat"
  set keys ""
#  set keys "display2d:false$"

  set result [split [exec ${maxima_path}  --batch-string=${keys}${expression}\;] \n]
  set result [lreplace $result 0 4]
  return [join $result \n]
}

puts [maxima_call "5+10"]

但是我不太清楚你打算如何解析计算结果。例如,我从 Maxima 获得了这个输出。

set expression "\[aa : 1, bb : 2, cc : 3\]; (aa + bb + cc)/(dd + ee)"
puts [maxima_call $expression]

>

(%i1) [aa:1,bb:2,cc:3]
(%o1)                              [1, 2, 3]
(%i2) (aa+bb+cc)/(dd+ee)
                                       6
(%o2)                               -------
                                    ee + dd