ザウルスでREXXを使う(その4)
<<
作成日時 : 2008/05/31 21:03
>>
ブログ気持玉 0 /
トラックバック 0 /
コメント 0
前回に引き続き、ザウルスでのRexx2Nrxの使用方法です。
複雑なプログラムを作成する場合、プログラムを分割して作成することが多いと思います。Rexx2Nrxから外部プログラムを使用する方法は、Externals utility programに説明があるのですが、残念ながらコンパイル済みのJavaのプログラムの呼び出しはうまくいきませんでした。しかしコンパイル時に外部のソースプログラムを取り込む形でいっしょにコンパイルすることはできましたので、自作の平方根を求める関数を例に説明したいと思います。
既存のプログラムを使用する上で、次の点に注意する必要があります。
・外部のソースプログラムの呼び出し方
・呼び出される側の変更点
・変数、パラメータ、戻り値の型(整数または実数)
呼び出す側「sqrtest1.rex」と呼び出される側「sqr.REX」、2つのプログラムを例に説明します。「sqr.REX」は、Rexx2Nrxで使用するために修正済みです。
・sqrtest1.rex
/* Rexx source */
do i = 0.0 to 2.0 by 0.1
say "i =" i ", sqr =" sqr(i)
end
/*%INCLUDE sqr */
・sqr.REX
/* REXX */
/* SQUARE ROOT */
/* (C) Copyright 1997 kyo */
sqr:
ARG N
IF N <= 0 THEN RETURN 0.0
E = 0.0001
A1 = (N + 1) / 2
ANS = (N / A1 + A1) / 2
DO UNTIL ABS(ANS - A1) <= E
A1 = ANS
ANS = (N / A1 + A1) / 2
END
RETURN ANS
上記で挙げた3点について順に説明します。
- 外部のソースプログラムの呼び出し方
Externals utility programにある通り、呼び出す側「sqrtest1.rex」の最終行に「/*%INCLUDE sqr */」を追加します。拡張子は付けません。ただしザウルスの場合、上記にもある通り呼び出される側のファイルの拡張子を大文字(.REX)にする必要がありました。
関数の呼び出し方は従来のREXXと変わらず、「sqr(パラメータ)」です。
- 呼び出される側の変更点
元は「sqr.cmd」という別ファイルで使用していましたが、この例では%INCLUDEでソースを組み込むため、「sqr:」の行を追加します。また戻り値の型を明示するため、「IF N <= 0 THEN RETURN 0.0」の行で戻り値を実数0.0としています。
- 変数、パラメータ、戻り値の型(整数または実数)
Rexx2Nrx及びNetRexxではプログラムを解析して数値変数が整数か実数かを自動的に判断しているようです。Rexxでは整数と実数を区別していないためRexxプログラムでは意識していませんが、Javaでは区別するため判断結果が整数で実行時が実数というように一致しないとコンパイルまたは実行時にエラーとなります。また、整数型変数と実数を比較する場合もエラーとなるようです。そのような場合、全て実数としていいならコンパイル時に自動的に判断しないオプション(-notype)を付けるか、必要な変数のみならプログラム内で実数であることを明示するといいでしょう。
戻り値の型の指定は上記の通りです。変数やパラメータはこの場合「sqr(i)」の「i」ですが、「i = 0.0」のような代入文をプログラムの先頭に入れるか、do文で「do i = 0.0 to 2.0 by 0.1」の行のようにして明示します。
-notypeオプションを付ける場合は、下記のようにプログラム名の後ろに付けます。
$ zrx2n.sh sqrtest1 -notype
次回は外部コマンドの呼び出し方を説明します。
|
ブログ気持玉
クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ