十進BASICでVBScriptのeval()関数を呼び出してみました。(^_^;
VBScriptで、代入や関数定義は、Execute文を使いますが、長いので、SUB Exec(s$)としました。
また、Eval()関数は、戻り値として、数値や文字列などを返しますが、ここでは、数値を返すときは、Function Eval(s$)、文字列を返すときは、Function Eval$(s$)としました。
ということで、これらのEval()関数は、できれば、例外状態処理 WHEN EXCEPTION IN ~ USE ~ END WHEN 文の中で使った方が安全かと思います。(^_^;
ちなみに、VBScriptのeval()関数では代入ができないので、代入関数fLet()を作ってみました。自身は0を返すので、「x=a:~」とするところを「fLet(x,a)+~」として使います。(^_^;
● VBsEval1.BAS
DECLARE EXTERNAL FUNCTION VBs.Eval$, VBs.Eval DECLARE EXTERNAL SUB VBs.Exec CALL Exec("PI=4*ATN(1):E=EXP(1)") ! 定数PI、Eを設定 CALL Exec("Function fLet(x, a):x=a:fLet=0:End Function") ! 関数定義 CALL Exec("Function CosD(x):CosD=Cos(x/180*PI):End Function") ! 関数定義 LET f$ = "CosD(x)" FOR x=0 TO 180 STEP 30 WHEN EXCEPTION IN LET s$ = "fLet(x,"& STR$(x) &")+"& f$ !PRINT s$, PRINT x, Eval(s$) USE END WHEN NEXT x END MODULE VBs OLE CREATEOBJECT "ScriptControl" EXTERNAL SUB setLanguage(s$) OLE PropertyPut "language" END SUB CALL setLanguage("VBS") PUBLIC FUNCTION Eval$, Eval PUBLIC SUB Exec EXTERNAL SUB Exec(s$) OLE METHOD "ExecuteStatement" END SUB EXTERNAL FUNCTION Eval$(s$) OLE METHOD "eval" END FUNCTION EXTERNAL FUNCTION Eval(s$) OLE METHOD "eval" END FUNCTION END MODULE
●実行結果
0 1 30 .866025403784439 60 .5 90 6.12323399573677E-17 120 -.5 150 -.866025403784439 180 -1
※参考URL
●十進BASIC−OCXの利用
●同じものを含む順列の問題を十進BASICで解いてみた。
●辞書式配列の問題を十進BASICで解いてみた。
●十進BASICでVBScriptのeval関数を呼び出してみた。(2) - rscのブログ
●十進BASICでJavaScriptのeval関数を呼び出してみた - rscのブログ