JUBA.DOC Juso Basic Reference Manual 1 はじめに  Juso Basicは,Basic という言語の方言のひとつであり,変数に対するデータの代入を逐次的に行なうことによって処理を行なうということを基本的な考え方とする言語である.  本書は,Juso BasicのインタプリタであるJuso Basic interpreter, version 1.0 というプログラムの使用法について述べたものである. 2 起動と終了  Juso Basic interpreterは,Prologで書かれており,したがってそれを動作させるためにはPrologの処理系が必要である.  Juso Basic interpreterは,JUBA.PL という名前のファイルにはいっているので,    ?- ['juba.pl']. という質問をPrologのインタプリタに入力すると,それがコンサルトされる.  そののち,    ?- basic. という質問を入力すると,Juso Basic interpreterが起動し,> というプロンプトが出力される.  Juso Basic interpreterを終了させたいときは,quitという変数に任意の項を代入すればよい.したがって,    >quit := 1. という代入文を入力すると,Juso Basic interpreterが終了し,Prologの処理系に戻る.↓ 3 変数  変数はデータを入れることのできる箱である.変数にデータを入れることを,変数にデータを「代入する」と言う.変数には,Prologの項ならばなんでも代入することができる.  すべての変数には名前がある.変数の名前を「変数名」と言う.変数名はPrologの項でなければならない.変数にデータを代入するとき,および変数からデータを取り出すときは,その変数の名前を指定しなければならない.存在しない変数の名前を指定してデータを代入しようとしたときは,新しい変数が生成され,その名前がその変数に与えられる.↓  変数にデータを代入する方法については5「文」で,変数からデータを取り出す方法については4「式」で説明する.  Juso Basicでは,いくつかの変数は最初から存在していると考えることができる.そのような変数を「組み込み変数」と言う.どのような組み込み変数があるかということについては7「組み込み変数」で述べる.  すべての組み込み変数は,それにデータを代入したとき,またはそれからデータを取り出すときになんらかの動作を行なう.それを変数の「副作用」と言う. 4 式  Prologの項はすべてJuso Basicの式であると考えることができる.すべての式はなんらかのデータに対応している.式に対応しているデータを,その式の「値」と言う.与えられた式の値を求めることを,式を「評価する」という.  Juso Basicの式は,次のように4種類に分類することができる.  (1) 変数名  (2) quote 式  (3) 式リスト  (4) その他の項 (1) 変数名  変数名の値は,それを名前とする変数の内容である.たとえば,suzumeという変数に673 という数がはいっているとすると,suzumeという名前の値は,673 である.  組み込み変数の中には,内容を持たないものがある.そのような変数の名前を評価したときは,その変数の名前がそのまま値になる.たとえば,print という組み込み変数は内容を持たないので,print という名前の値は常にprint である. (2) quote 式  quote 式は,    quote(項) と書く.quote 式の値は,その括弧の中の項である.たとえば,quote(tanuki) の値はtanukiである. (3) 式リスト  式リストは,式を要素とするリストである.式リストの値は,そのすべての要素の値を順番を変えずに並べたリストである.たとえば, [quote(a), quote(b), quote(c)] という式リストの値は[a,b,c] である. (4) その他の項  変数名,quote 式,式リストのいずれでもない項を評価すると,その項がそのまま値になる.たとえば,87という名前の変数が存在しなければ,87の値は87である. 5 文  Juso basicの文は,コンピュータのなんらかの動作を意味している.文が意味している動作をコンピュータが行なうことを,文を「実行する」という.  Juso basicの文は,次のように2種類に分類することができる.  (1) 代入文  (2) 文リスト (1) 代入文  代入文は,    変数名 := 式 と書く.代入文の意味は,式を評価して,指定された変数にその値を代入する,ということである.たとえば, wakusei := asagao という代入文の意味は,wakusei という変数にasagaoという式の値を代入するということである. (2) 文リスト  文リストは,文を要素とするリストである.たとえば, [a := input, * := [a,2], print := *] は文リストの例である.  文リストの意味は,その中の文を先頭から順番に実行するということである. 6 トップ・レベル  Juso Basic interpreterのトップ・レベルは,次のような動作を繰り返す.  (1) プロンプト(>) を出力する.  (2) 文を読み込む.  (3) その文を実行する.  文を入力するとき,途中で改行を入力してもよい.入力を終了するときは,ピリオドを入力したのち,改行を入力しなければならない. 7 組み込み変数 7.1 演算変数  演算を行なう変数は,単項演算変数と二項演算変数に分類することができる. (1) 単項演算変数  単項演算変数に項を代入すると,その変数はその項に演算を行ない,その結果を自分の内容にする. −−   符号の反転  たとえば,    -- := -71 を実行すると,−−の内容は71になる. (2) 二項演算変数  二項演算変数に[項1,項2]というリストを代入すると,その変数は項1と項2に対して演算を行ない,その結果を自分の内容にする. +    加算 −    減算 *    乗算 /    除算 //   整数除算 mod  剰余  たとえば,    + := [17,6] を実行すると,+の内容は23になる.  次の二項演算変数は関係演算を行なう.それらは,[項1,項2]というリストが代入されると,項1と項2の間に関係が成り立っているかどうかを調べ,成り立っていれば1を,そうでなければ0を内容にする. ==  同一である ¥==  同一ではない >    項1のほうが項2よりも大きい <    項1のほうが項2よりも小さい >=   項1のほうが項2よりも大きいかまたは等しい =<   項1のほうが項2よりも小さいかまたは等しい  たとえば,    > := [3,7] を実行すると,>の内容は0になる. 7.2 読み込みと出力 print  項を代入すると,その項を出力する.内容は持たない. input  この変数の内容を取り出そうとすると,この変数は,ひとつの項を読み込んで,それを自分の内容にする.項を代入することはできるが,それは失われる.この変数が出力するプロンプトは?である. nl  任意の項を代入すると,改行を出力する.  たとえば, [ a := input, * := [a,2], print := *, nl := 1, * := [a,a], print := * ] は,数aを読み込んで,aの2倍,改行,aの2乗を出力する,という意味である. 7.3 文の実行 gosub  文を代入すると,その文を実行する.たとえば,aという変数に文がはいっているとすると,    gosub := a は,aの中の文を実行するという意味である. load  ファイル名を代入すると,それを名前とするファイルの中の文を実行する.ファイルの中には文が2個以上あってもよい.ファイルの中の文の末尾には,ピリオドと改行を書いておかなければならない.ファイル名はPrologのアトムでなければならない. たとえば,    load := 'b:kamome.bas' は,b:kamome.basというファイルの中の文を実行するという意味である. 7.4 インタプリタの終了 quit  任意の項を代入すると,Juso Basic interpreterの動作を終了させる. 7.5 選択と繰り返し if  [項,文1,文2]というリストを代入すると,項が0以外ならば文1を実行し,0ならば文2を実行する.たとえば, [ > := [input,0], if := [>, print := quote(plus), print := quote(not_plus) ] ] は,数を読み込んで,それが0より大きいならばplusを,そうでなければnot_plusを出力する,という意味である. while  [変数名,文]というリストを代入すると,指定された変数の内容が0以外ならば文を実行する,ということを繰り返す.変数の内容が0になれば動作は終了する.たとえば, [ a := input, b := a, =< := [b,100], while := [quote(=<), [ print := b, nl := 1, + := [b,a], b := +, =< := [b,100] ] ] ] は,数aを読み込んで,100以下の範囲にあるaの正の倍数をすべてを出力する,という意味である. do  [文,変数名]というリストを代入すると,文を実行して,指定された変数の内容を調べる,ということを繰り返す.変数の内容が0になればば動作は終了する.たとえば, [ do := [ [ a := input, > := [a,0], if := [>, [ * := [a,a], print := *, nl := 1 ], [] ] ], quote(>) ] ] は,数aを読み込んで,aの2乗を出力する,ということを繰り返し,aが0またはマイナスならば終了する,という意味である. for  [変数名,数1,数2,数3,文]というリストを代入すると,文の実行を繰り返す.そのとき,指定された変数が制御変数として使われる.制御変数の内容は,数1を初期値,数2を終値,数3を増分として変化する.たとえば, [ n := input, for := [quote(i), 1, n, 1, [ print := i, nl := 1 ] ] ] は,数nを読み込んで,1,2,3,...,nを出力する,という意味である. EOF: JUBA.DOC