2017-06-26 3 views
2

tclの外部プログラムからデータを送受信するには?私はこれを試しています:Tcl maximaを呼び出す

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

しかし、それは動作しませんでした。私はMaxima(http://maxima.sourceforge.net/index.html)をtclから呼び出し、tcl maximaの結果に戻る必要があります。公式文書は空でも古くても動作しない例です。

+0

あなたはそれが動作していない正確にどのようにそれをより詳細に説明する必要があります。また、関連するプロジェクトページ(http://maxima.sourceforge.net/relatedprojects.html)を見てください。いくつかのプロジェクトは、Maximaを使用して結果を計算するユーザーインターフェイスです。おそらくあなたはそれらの1つをコピーすることができます。 –

+0

@RobertDodier、私は最大のためのフルGUIをコピーする必要はありません。私はTcl/Tkで1つのタスクのみを作成し、ユーザーが自分のインターフェースに入れて、最大の結果を自分のインターフェースに出力するparamsを持つmaximaを呼び出すようにしたいと思っています – nueq

+0

私は驚いています。 Maximaと通信するGUIプロジェクト、または少なくとも彼らがどのようにそれを行い、独自の通信方法を作成するかを見てください。 –

答えて

1

私は簡単にMaximaを呼び出すために関数maxima_callを書きました。 Maximaプログラムへのパスをmaxima_path変数に設定する必要があります。 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 
+2

Re:「しかし、私は計算の結果をどのように解析するのかをはっきりとは分かっていません。たとえば、Maximaの出力を得ました。 Maximaは、きれいなプリンタ(いわゆる "2-d"ディスプレイ)を使用するか、または機械で解析可能な出力(いわゆる "1-d")を使用するかを決定するために、グローバルフラグ 'display2d'を尊重します。 'display2d:false;'は、かなりのプリンタを無効にします。 –

2

私はこのようなコール何かやっオフあなたが最良であろうと推測したい:心の中で私は明確にするため、独自の変数にバッチ文字列を分割しました

set theBatchString "5+10;" 

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

を、そしてクマその単一引用符ドン実際にはTclには何の意味もありません。彼らはシェルアイムです。 Tclは異なる構文を使用します。

関連する問題