2021年05月25日 | 公開。 |
2021年05月25日 | ページ構成の変更により、内容の一部を4ページ目に移動。 |
2022年11月24日 | ページ構成の変更により、以前の2ページの内容の一部をこのページに移動。 |
2022年12月03日 | HEX$関数、OCT$関数、およびSCRSIZE関数の解説を追加。 |
2023年01月04日 | CSRLIN関数とPOS関数の解説を追加。 |
Syn BASICで使える関数を、表3に示します。関数名の最後に$が付いている関数(CHR$など)と付いていない関数(SINなど)がありますが、関数名の最後に$が付いている関数は文字列を返す関数で、関数名の最後に$が付いていない関数は数値を返す関数です。
関数には通常1つまたは複数の引数があります。例えばSIN関数には一つの引数がありますが、SIN(X)
という具合に、引数(この場合はX)を丸括弧でくくって、関数名の後に書きます。
またLEFT$関数には2つの引数があります。この様に複数の引数がある場合は、LEFT$(A$,3)
の様に、引数(この場合はA$と3)をカンマで区切って並べます。
TIME$関数の様に引数のない関数も中にはあります。引数のない関数は、TIME$
という具合に、丸括弧を使わず表記します。ただし、TIME$()
という具合に、後ろに丸括弧を付ける表記法も、Syn BASICでは文法的に許容します。多くのBASICの処理系では、引数のない関数に丸括弧を付ける表記をするとエラーになりますので、他のBASICとの互換性を考えるなら、丸括弧を付けない表記の方が好ましいです。
関数 | エイリアス | 説明 |
---|---|---|
ABS | 絶対値、ぜったいち |
数値の引数を取り、その数値の絶対値を返します。 例えば、 参考:ABSはabsolute value(絶対値という意味)の省略形です。 |
ASC | 文字コード、もじこーど |
文字列の引数を取り、その文字列の1文字目の文字コードを返します。 例えば、 Syn BASICは、内部で文字列をUTF-16で表現するため、ASC関数が返す文字コードは、UTF-16表現の文字コードです。UTF-16は16ビットの文字コードですので、ASC関数は0~65535(65535は216-1)の範囲の数を返します。 参考:ASCはASCIIの省略形です。MBASICなどの古いBASICでは、ASC関数はUTF-16コードではなくASCIIコードを返していました。半角英数字など、ASCIIコードが128未満の文字については、ASCIIコードもUTF-16コードも同じ数になります。 |
ATN | 逆正接、ぎゃくせいせつ |
数値の引数を取り、その数値の逆正接(アークタンジェント)を返します。ATN関数は、角度をラジアン表記した数値を返します。 参考:ATNは、arc tangent(逆正接という意味)の省略形です。 |
CEIL | 天井、てんじょう |
数値の引数を取り、その数値以上の最小の整数を返します。(天井関数) 例えば、 |
CHR$ | 文字$、もじ$ |
数値の引数を取り、その数値を文字コードとする文字を返します。(返すのは1文字の文字列) 例えば、 文字コードの種類はUTF-16なので、引数は0~65535(65535は216-1)の範囲に入っている必要があります。 参考:CHRはcharacter(文字という意味)の省略形です。 |
CINT | 四捨五入、ししゃごにゅう |
数値の引数を取り、その数値を四捨五入した整数を返します。
参考:CINTのCはconvert(変換するという意味)の頭文字です。CINTのINTはinteger(整数という意味)の省略形です。 |
COS | 余弦、よげん |
数値の引数を取り、その数値の余弦(コサイン)を返します。引数は、ラジアン単位で指定します。 参考:COSはcosine(余弦という意味)の省略形です。 |
CSRLIN | カーソル行、かーそるぎょう |
CSRLIN関数には引数はありません。カーソルの垂直位置を返します。 参考:CSRLINは、cursor lineの略です。 |
DATE$ | 日付$、ひづけ$ |
ローカル時間(ロケールで設定したタイムゾーン)での日付を、年、月、日の順に、各2ケタで表示し、それぞれの間に/を挿入した形式(YY/MM/DD形式)で表した文字列を返します。年については、4桁の西暦の下2桁を表示します。 例えば、2026年1月23日にDATE$関数を呼ぶと、26/01/23という文字列を返します。 この関数に引数はありません。 |
EXP | 指数、しすう |
数値の引数を取り、その数値の、底をネイピア数(約2.71828)とする指数関数を返します。 参考:EXPはexponential function(指数関数という意味)の省略形です。 |
FIX | 切り捨て、きりすて |
数値の引数を取り、その数値の整数部(小数点以下を切り捨てた数)を返します。 例えば、 |
HEX$ | 十六進$、じゅうろくしん$ |
HEX$関数は、2つの数値の引数を取ります。HEX$関数は第1引数を16進表記した文字列を返しますが、その際、文字列が第2引数で指定した文字数よりも短ければ、文字列の前に0を適切な数だけ挿入し、第2引数で指定した文字数にして返します。第2引数が省略された場合は、第2引数に0を指定されたものとして処理されます。 例えば
16進表記の際にA~Fのアルファベットを小文字で表わす流儀と、大文字で表わす流儀がありますが、HEX$関数では大文字を使います。 HEX$関数の第1引数は、0以上の整数である必要があります。第1引数が負の値だと、エラーになります。また、第1引数が整数でなければ、小数点以下を切り捨ててから処理します。 |
INKEY$ | キー入力$、きーにゅうりょく$ |
キーボードで押されたキーを、一文字の文字列で返します。INKEY$関数には引数はありません。 例えばaのキーが押された場合は、 ただし、SHIFTキーが押された状態でaのキーを押した場合や、CAPS LOCKがかかった状態でaのキーを押した場合は、 キーが押されていない場合は、 BACK SPACEキーが押された場合は、文字コードが8の文字( 1つのキーを押している間に、何回もINKEY$関数が呼び出された場合は、最初の1回のみ、キーに対応した文字列を返し、2回目以降は空文字列を返します。 |
INT | FLOOR、整数、せいすう、床、ゆか |
数値の引数を取り、その数値以下の最大の整数を返します。(床関数) 例えば、 参考:INTはinteger(整数という意味)の省略形です。 |
LEFT$ | 左$、ひだり$ |
2つの引数を取ります。第1引数は文字列で、第2引数は数値です。第1引数の文字列の左から、第2引数で指定した文字数だけ取り出した文字列を返します。第1引数の文字数が第2引数より短い場合は、第1引数全体を返します。 例えば、 参考:leftは左という意味です。 |
LEN | 長さ、ながさ |
文字列の引数を取り、その文字列の長さ(文字数)を返します。Syn BASICは、文字列をUTF-16表現で扱うので、漢字などの全角文字も1文字として扱います。(サロゲートペアになる漢字を除く) 例えば、 参考:LENは、length(長さという意味)の省略形です。 |
LOG | 対数、たいすう |
数値の引数を取り、その数値の自然対数を返します。 参考:LOGはlogarithm(対数という意味)の省略形です。 |
MID$ | 中$、なか$ |
2つまたは3つの引数を取ります。第1引数は文字列で、第2引数と(もしあれば)第3引数は数値です。 引数が3つある場合、第1引数の第2引数番目の文字から第3引数で指定した数だけ文字を取り出し、文字列として返します。(部分文字列) 引数が2つの場合は、第1引数の第2引数番目の文字以降の文字列を返します。 例えば、 参考:MIDはmiddle(真ん中という意味)の省略形です。 |
NOW | 今、いま |
UTC(協定世界時)での1970年1月1日0時0分0秒から現在までの経過時間をミリ秒単位の整数で返します。 |
OCT$ | 八進$、はっしん$ |
OCT$関数は、2つの数値引数を取ります。OCT$関数は第1引数を16進表記した文字列を返しますが、その際、文字列が第2引数で指定した文字数よりも短ければ、文字列の前に0を適切な数だけ挿入し、第2引数で指定した文字数にして返します。第2引数が省略された場合は、第2引数に0を指定されたものとして処理されます。 例えば
OCT$関数の第1引数は、0以上の整数である必要があります。第1引数が負の値だと、エラーになります。また、第1引数が整数でなければ、小数点以下を切り捨ててから処理します。 |
POS | カーソル桁、かーそるけた |
POS関数には引数はありません。カーソルの水平位置を返します。 |
RIGHT$ | 右$、みぎ$ |
2つの引数を取ります。第1引数は文字列で、第2引数は数値です。第1引数の文字列の右から、第2引数で指定した文字数だけ取り出した文字列を返します。第1引数の文字数が第2引数より短い場合は、第1引数全体を返します。 例えば、 参考:rightは右という意味です。 |
RND | 乱数、らんすう |
0以上1未満の一様乱数を返します。この関数に引数はありません。 |
SCRSIZE | サイズ、さいず |
SCRSIZE関数は、WIDTH文で指定した画面のサイズを取得します。 SCRSIZE関数は、数値の引数を1つ取ります。引数には、0、1、2のいずれかの値を指定する必要があります。
|
SGN | 符号、ふごう |
数値の引数を取り、その数値の符号に応じた数を返します。引数が正の数の場合は1を返します。引数が0の場合は0を返します。引数が負の数の場合は-1を返します。 例えば、 参考:SGNはsign(符号という意味)の省略形です。 |
SIN | 正弦、せいげん |
数値の引数を取り、その数値の正弦(サイン)を返します。引数は、ラジアン単位で指定します。 参考:SINはsine(正弦という意味)の省略形です。 |
SQR | 平方根、へいほうこん |
数値の引数を取り、その数値の平方根の内、負でない数を返します。 例えば、 注:「9の平方根」は2乗して9になる数のを意味するので、3と-3の2つがあります。 参考:SQRは、square root(平方根)の省略形です。squareだけだと2乗という意味になります。 |
STR$ | 文字列$、もじれつ$ |
数値の引数を取り、その数値を表現する文字列を返します。 参考:STRはstring(文字列という意味)の省略形です。 |
TAN | 正接、せいせつ |
数値の引数を取り、その数値の正接(タンジェント)を返します。引数は、ラジアン単位で指定します。 参考:TANはtangent(正接という意味)の省略形です。 |
TIME$ | 時刻$、じこく$ |
ローカル時間(ロケールで設定したタイムゾーン)での時刻を、時、分、秒の順に、各2ケタで表示し、それぞれの間に:を挿入した形式(HH:MM:SS形式)で表した文字列を返します。この関数に引数はありません。 例えば、21時15分7秒にDATE$関数を呼ぶと、21:15:07という文字列を返します。 |
VAL | 数値、すうち |
文字列の引数を取り、その文字列を数値として解釈した場合の数値を返します。 引数の中のスペースは全て無視します。また、引数が数値として解釈できない文字列の場合は0を返します。引数が途中まで数値として解釈できて、途中から数値として解釈できなくなる場合は、最初の数値として解釈できる部分のみを数値化して返します。 例えば、 参考:VALはvalue(値)の省略形です。 |
この節では、Syn BASICで使える演算子について説明します。
数式の中には、色々な演算(四則演算など)を表す記号が出てきます。例えば、5+2-3
という数式には、加算を表す+と、減算を表す-の、2つの記号が出てきます。これらの記号を演算子といいます。
Syn BASICの演算子には単項演算子と2項演算子があります。
参考:Syn BASICには3項演算子はありません。
単項演算子は、数値や文字列の前に置いて使う演算子です。-5
における-が単項演算子の例です。
2項演算子は、2つの数値あるいは2つの文字列の間に置いて使う演算子です。1-2
における-や、"abc"+"def"
における+は、演算子の例です。
単項演算子の後に書く数値や文字列、あるいは2項演算子の前後に書く数値や文字列の事をオペランドといいます。-5
における5や"abc"+"def"
における"abc"と"def"は、オペランドの例です。
表4に、Syn BASICで使える演算子の一覧を示します。
演算子 | 説明 |
---|---|
+ |
この演算子は、単項演算子としての使い方と2項演算子としての使い方の2種類があります。 単項演算子として+を使う場合は、+の直後に数値を書き、演算結果は+の直後の数値と同じ値になります。例えば 2項演算子として+を使う場合は、2つの数値の間に+を書く場合と、2つの文字列の間に+を書く場合で意味が異なります。 2つの数値の間に+を書く場合は、2つの数の和を意味します。例えば 2つの文字列の間に+を書く場合は、それらの文字列を連結する演算を意味します。例えば |
- |
この演算子は、単項演算子としての使い方と2項演算子としての使い方の2種類があります。 単項演算子として-を使う場合は、-の直後に数値を書き、演算結果は-の直後の数値に-1を掛けた値(正負の符号を反転させた値)になります。例えば 2項演算子として-を使う場合は、2つの数値の間に-を書きます。この場合の演算結果は、前の数値から後ろの数値を引いた値になります。例えば |
* |
この演算子は、2項演算子で、2つの数値の間に置いて使います。演算結果は、2つの数値の積になります。 例えば、 |
/ |
この演算子は、2項演算子で、2つの数値の間に置いて使います。演算結果は、前の数値を後の数値で割った値になります。後の数値が0の場合はエラーになります。 例えば、 |
÷ |
この演算子は、/の演算子のエイリアスです。演算子の前の数値を演算子の後の数値で割った値が演算結果になります。後の数値が0の場合はエラーになります。 例えば、 |
^ |
べき乗演算子です。 べき乗演算子は左結合ですので、 注:一部のプログラム言語では、べき乗演算子が右結合として実装されているので、注意が必要です。 例えば、 |
MOD |
剰余演算子です。
例えば、 |
= |
2つの数値の間、または2つの文字列の間に置いて使います。この演算子の演算結果は、演算子の両側の数値または文字列が一致する場合に-1、一致しない場合に0になります。 例えば、 |
<> |
2つの数値の間、または2つの文字列の間に置いて使います。この演算子の演算結果は、演算子の両側の数値または文字列が一致する場合に0、一致しない場合に-になります。 例えば、 |
< |
2つの数値の間、または2つの文字列の間に置いて使います。 2つの数値の間に置いて使う場合は、前の数値が後の数値より小さい場合に、演算結果が-1になり、それ以外の場合に演算結果が0になります。 2つの文字列の間に置いて使う場合は、前の文字列の方が後の文字列より辞書順で前方にあれば演算結果が-1になり、それ以外の場合に演算結果が0になります。 例えば、 |
<= |
2つの数値の間、または2つの文字列の間に置いて使います。 2つの数値の間に置いて使う場合は、前の数値が後の数値より小さいか、前の数値と後の数値が等しい場合に、演算結果が-1になり、それ以外の場合に演算結果が0になります。 2つの文字列の間に置いて使う場合は、前の文字列の方が後の文字列より辞書順で前方にあるか、前の文字列と後ろの文字列が等しい場合に演算結果が-1になり、それ以外の場合に演算結果が0になります。 例えば、 |
> |
2つの数値の間、または2つの文字列の間に置いて使います。 2つの数値の間に置いて使う場合は、前の数値が後の数値より大きい場合に、演算結果が-1になり、それ以外の場合に演算結果が0になります。 2つの文字列の間に置いて使う場合は、前の文字列の方が後の文字列より辞書順で後方にあれば演算結果が-1になり、それ以外の場合に演算結果が0になります。 例えば、 |
>= |
2つの数値の間、または2つの文字列の間に置いて使います。 2つの数値の間に置いて使う場合は、前の数値が後の数値より大きいか、前の数値と後の数値が等しい場合に、演算結果が-1になり、それ以外の場合に演算結果が0になります。 2つの文字列の間に置いて使う場合は、前の文字列の方が後の文字列より辞書順で後方にあるか、前の文字列と後ろの文字列が等しい場合に演算結果が-1になり、それ以外の場合に演算結果が0になります。 例えば、 |
NOT |
論理否定演算子です。単項演算子で、数値の前に置いて使います。 NOT演算子は、まず後続の数値を符号付き32ビット整数に変換します。その後で、32ビットのそれぞれの論理否定を取り、得られた数が演算結果になります。 つまり、NOT演算子は後続の数値の1の補数を返します。 例えば、 参考:0と-1をそれぞれ符号付き4ビットの2進数(2の補数表現)で表記すると0000と1111になります。また3と-4をそれぞれ符号付き4ビットの2進数(2の補数表現)で表記すると、0011と1100となります。また-3と2をそれぞれ符号付き4ビットの2進数(2の補数表現)で表記すると、1101と0010となります。 |
AND |
論理積演算子です。2項演算子で、2つの数値の間に置いて使います。 AND演算子は、まず2つのオペランドを符号付き32ビット整数に変換します。その後で、32ビットのそれぞれのビットにおいて論理積を取り、得られた結果を演算結果とします。 例えば、 参考:10、3、2を4桁の2進数で表記すると、それぞれ1010、0011、0010となります。 |
OR |
論理和演算子です。2項演算子で、2つの数値の間に置いて使います。 OR演算子は、まず2つのオペランドを符号付き32ビット整数に変換します。その後で、32ビットのそれぞれのビットにおいて論理和を取り、得られた結果を演算結果とします。 例えば、 参考:10、3、11を4桁の2進数で表記すると、それぞれ1010、0011、1011となります。 |
XOR |
排他的論理和演算子です。2項演算子で、2つの数値の間に置いて使います。 XOR演算子は、まず2つのオペランドを符号付き32ビット整数に変換します。その後で、32ビットのそれぞれのビットにおいて排他的論理和を取り、得られた結果を演算結果とします。 例えば、 参考:10、3、9を4桁の2進数で表記すると、それぞれ1010、0011、1001となります。 |
IMP |
論理包含演算子です。2項演算子で、2つの数値の間に置いて使います。論理学では論理包含演算子に→を使いますが、Syn BASICでは IMPを使います。 論理包含とは、0→0=1、0→1=1、1→0=0、1→1=1で定義される論理演算です。 IMP演算子は、まず2つのオペランドを符号付き32ビット整数に変換します。その後で、32ビットのそれぞれのビットにおいて論理包含を取り、得られた結果を演算結果とします。 例えば、 参考:10、3、-9を8桁の符号付き2進数(2の補数表現)で表記すると、それぞれ00001010、00000011、11110111となります。 |
EQV |
論理同値演算子です。2項演算子で、2つの数値の間に置いて使います。論理学では論理包含演算子に⇔を使いますが、Syn BASICでは EQVを使います。 論理同値とは、0⇔0=1、0⇔1=0、1⇔0=0、1⇔1=1で定義される論理演算です。すなわち、2つのオペランドが等しい時に1、等しくない時に0を返します。否定排他的論理和(XNOR)とも呼ばれます。 EQV演算子は、まず2つのオペランドを符号付き32ビット整数に変換します。その後で、32ビットのそれぞれのビットにおいて論理同値を取り、得られた結果を演算結果とします。 例えば、 参考:10、3、-10を8桁の符号付き2進数(2の補数表現)で表記すると、それぞれ00001010、00000011、11110110となります。 |
NOT、AND、OR、XOR、IMP、EQVの6種の演算子を、ビット演算子と呼びます。
ビット演算子は、数値(倍精度浮動小数点)をオペランドに取りますが、演算する際には、まず、オペランドを符号付き32ビット整数に変換してから演算を行ないます。
オペランド(倍精度浮動小数点)を符号付き32ビット整数にする際に、まず数値を0に近い方に丸めて整数化します。そして、その整数化した数値を2進数で表した時に、桁数(ビット数)が32ビットを超えていた場合には、下位32ビットを取り出して演算の対象にします。(32ビット以内の場合は、そのまま演算の対象にします)
例として、NOT 12345678901.23
を計算する場合について考えます。オペランドを0に近い方に丸めると12345678901となります。これを2進数で表記すると、10 1101 1111 1101 1100 0001 1100 0011 0101と、34ビットの数になります。(ビット数が多いので、分かりやすい様に4ビットごとにスペースを入れています) この数は32ビットを超えていますので、下位32ビットを取ると1101 1111 1101 1100 0001 1100 0011 0101が得られます。
上記のような操作で得られた32ビットの数がNOT演算(論理否定演算)の対象になります。先程の数の各ビットをそれぞれ論理否定すると、0010 0000 0010 0011 1110 0011 1100 1010が得られます。この数を符号付き32ビット整数とみなして10進数表現すると、演算結果の539222986が得られます。
この様にして、NOT 12345678901.23
が539222986と計算されます。
1+2*3
という式は、加算を表す演算子+よりも乗算を表す演算子*の方が優先されて計算されますので、1+2*3
=1*6
=7と計算されます。この様に、演算子には優先順位が決まっており、優先順位の高い演算子から順に計算が進みます。
表5に、演算子の優先順位を示します。
優先順位の低い演算子の計算を先にしたい場合は、先に計算したい部分を丸括弧で括ります。例えば、1+2と3の積を計算したい場合は、(1+2)*3
と記述します。
優先順位 | 演算子 | 演算子の種類 |
---|---|---|
1 | ^ | べき演算子 |
2 | +、- | 符号(単項演算子) |
3 | *、/、÷ | 乗算演算子、除算演算子 |
4 | MOD | 剰余 |
5 | +、- | 加算、減算(2項演算子) |
6 | =、<>、<、>、<=、>= | 関係演算子 |
7 | NOT | 論理否定演算子 |
8 | AND | 論理積演算子 |
9 | OR | 論理和演算子 |
10 | XOR | 排他的論理和演算子 |
11 | IMP | 論理包含演算子 |
12 | EQV | 論理同値演算子 |
次のページでは、Syn BASICの画面やキーボードについて説明します。