あなたの知らない♪Rexx (Rexx解説)

#Counter

恐竜じゃなかったらソレは何なのか ・・・ つーことで少しばかし解説してみよう。
この解説は, PC-DOSの Rexxオンラインマニュアルを元にアレしているので, 微妙にほかと違うかも知んない。 けど, たぶん似たようなもんだし, 大丈夫かも。(^^)
それから, 以前の Rexxの超簡単な紹介もあるだよ。

  1. Introduction (Rexx言語の紹介)
  2. Keyword Instructions (キーワード命令)
  3. Functions (関数)
  4. Built-in Functions (組み込み関数)
  5. External Functions (Utilities) (外部関数(ユーティリティー))
  6. Error Numbers and Messages (エラー番号およびメッセージ)
  7. 2バイト文字セット(DBCS)のサポート
    1. 概要
      • データ操作DBCS対応
      • 純DBCSストリングおよび混合SBCS/DBCSストリング
      • 混合ストリングの妥当性検査
      • 命令の例
        • PARSE
        • SAYおよびTRACE
    2. DBCS関数の取り扱い
      • ABBREV
      • COMPARE
      • COPIES
      • POSおよびLASTPOS
      • INSERTおよびOVERLAY
      • LEFT, RIGHT, およびCENTER
      • LENGTH
      • LINEIN
      • REVERSE
      • SPACE
      • STRIP
      • SUBSTRおよびDELSTR
      • SUBWORDおよびDELWORD
      • TRANSLATE
      • VERIFY
      • WORD, WORDINDEX, およびWORDLENGTH
      • WORDS
      • WORDPOS
    3. DBCS処理関数
      • DBCS関数の早見表
      • DBADJUST
      • DBBRACKET
      • DBCENTER
      • DBLEFT
      • DBRIGHT
      • DBRLEFT
      • DBRRIGHT
      • DBTODBCS
      • DBTOSBCS
      • DBUNBRACKET
      • DBVALIDATE
      • DBWIDTH

Rexx使いを名乗ってみよう(Rexxの超簡単な紹介 かも)

Rexxはプログラミング言語。 てゆーか, スプリクト言語つってもよいのかも。 スクリプト言語の定義 (なにを以てスクリプト言語とゆーのか) ってのがよく分からないんだけど, たぶん Rexxもそうなのら。

もともとは, 汎用機(大型こんぴーた)用のソレだったっぽい。 んで, OS/2にはソレが標準装備されているので, もー, いろいろ調べたりすることなく いきなり走らせてもオッケー。 ・・・ よほど古い OS/2とかじゃなければ。

さて, その指定ってゆーか, ソレが Rexxのプログラムだとする identityっつーか, そんなのが必要だったりする。 (←ってなに?)
OS/2でのばーい バッチファイルてゆー, 実行するコマンドを羅列しておくと順に実行してくれるブツがあって, 拡張子を .cmd な感じにしておくとソレと見なされるのら。
実は Rexxもまったく同じ。ただしその先頭の行がコメント /* 〜 */ になっていたら Rexxのプログラム, そうでなかったらバッチファイルて感じ。 UNIX環境での, 先頭行の #! 〜 と雰囲気似てる ・・ かも。

てことで, ごく簡単なプログラムを作ってみる。

/* 足し算 */

say 10 + 20

てゆーか, コレほど簡単ならコマンド行で試したほうが楽だよね。

rexxtry say 10+20

もちろん 30が表示される訳で ソレはソレで何も問題ないんだけど, じゃ say を取ったらどーなるのか。 そこにバッチファイルのよーなアレ, Restructured Extended Executor Language たるゆえんが垣間見られるのだ。

rexxtry 10+20
30
SYS1041: 指定された名前 30 は、内部コマンド/外部コマンド/
実行可能なプログラム名/バッチ・ファイルのいずれでもありません

結果を sayで出力たり, 変数に代入したり, そーゆーことでないのなら, Rexxはソレをコマンドだと解釈して実行しようと試みるのら。 あぁなんて けなげ。 (←けなげなのか? ソレ)

てことで, こんなこともできるあるよ (↓)。先ほどのよーに先頭行にコメントを付けるか, rexxtryを実行して, 一行ずつ入力すると試すことができたりする。さぁ, みんなもやってミソ。

flag = word('od p w', 1)   /* ← 一つ目のの項目 'od'を代入する */
sw = '/'
'dir '||sw||flag   /* ← dirが実行される */

んで, スクリプト言語としての側面はとゆーと そこそこ, それなりの機能は持ってるだよ。 ループだとか条件判断, select〜whenもあるにょ。
んで, もちろん連想配列もあるだよ。けど, ホントの配列(添字に数値を使うタイプ)てのがなかったりする。あはははは。(^^)

do i = 1 to 10
   say array.i   /* ← 「array[i]」みたいな感じ */
end

普通の配列はこんな感じで, 二次元配列のばーいは たとえばこーゆー感じ → array.i.j
だけどソレは, 次(↓)のプログラム動かしてみると, 仕組みはなんとなく理解できるはず。 このプログラムも (↑)と同様, 先頭にコメントをつけて実行するか rexxtry を使ってほしいなり。

array.1.2 = '二次元配列の要素 [1,2]のとこ'

n = '1.2'
say array.n

つまり, 他のスクリプト言語でゆーところの array["1.2"] て感じかな。 くわしくは 複合記号(Compound Symbols) てとこを見てけろ。

だけど, 欠点っぽいのもない訳じゃない。
C言語になれている人にとって, 混乱してしまいそーなとこがあるのら。

比較表
 C言語Rexx備考
&& の意味論理ANDXORRexxでは AND, ORは & | を使う。
条件によってはアレしないとか, そーゆーのは無理。
|| の意味 論理OR 文字列結合
NOT !\Rexxでは a \= b とか a <> b とか指定する。

ほかにも そーゆーのを教えてくれそなサイト もあるので調べてみるとよいかも。