書式: | ? x |
解説: | これは次の略記法です: pretty_print(1, x, {}) - すなわち、ブレースブラケットとインデントを用いて構造を明確化した演算値を標準出力に出力します。 |
用例: | |
? {1, 2} + {3, 4} -- {4, 6} が表示されます。 | |
関連事項: | pretty_print, print |
書式: | abort(i) |
解説: |
プログラム実行を停止します。引数 i はオペレーティングシステムに対して返すプログラムの状態を表す小さな整数の値を指定します。 値が0のときは通常はプログラムが正常に終了したことを表します。その他の値はエラーが発生したことをエラーの種類ごとに表すことができます。 DOSバッチ(.bat)プログラムではこの値を読んでエラーレベル機能で使用することができます。Euphoriaでこの値を読むにはsystem_exec()を使用します。 |
注釈: | abort()はプログラムが深いレベルで何層にもわたってサブルーチンを呼び出してしまったとき、実行をすぐに停止する必要があるとき、 深刻なエラーを検出したときに便利です。
abort()を使用しない場合、ex.exe/exw.exe/exwc.exe/exuは通常の終了コード0を返します。 |
用例: | |
if x = 0 then puts(ERR, "can't divide by 0 !!!\n") abort(1) else z = y / x end if | |
関連事項: | crash_message, system_exec |
動作環境: | DOS32 |
書式: | include graphics.e all_palette(s) |
解説: | 現在のグラフィックスモードにおいて全色を設定するために新規色の明度を指定します。sは次のシーケンスの形式です: {{r,g,b}, {r,g,b}, ..., {r,g,b}} 各要素は対応する色番号のために新規色の明度{赤,緑,青}を指定します。指定は色番号0から開始されます。赤・緑・青の値の範囲は0から63である必要があります。 |
注釈: | これはpalette()で一つずつ新規色の明度を指定するよりも、非常に高速で動作し実行されます。
この手続きは構造に画像をスクリーンに表示するためにread_bitmap()で使用することができます。 |
プログラム例: | demo\dos32\bitmap.ex |
関連事項: | get_all_palette, palette, read_bitmap, video_config, graphics_mode |
書式: | include machine.e a = allocate(i) |
解説: | 連続したiバイトのメモリーを確保します。メモリーブロックのアドレスを返すか、またはメモリーが確保できなかったときは0を返します。
アドレスは最小で4バイトの列が返されます。 |
注釈: | ブロックを使用終了したとき、ブロックのアドレスをfree()に与える必要があります。 これはブロックを開放して、ほかの目的で利用できるメモリーを生成します。明示的にfree()を呼び出すまでEuphoriaはブロックを開放しないか再利用しません。 プログラム終了時にオペレーティングシステムは、使用されていた全てのメモリーを他のプログラムで使用するために回収します。 |
用例: | |
buffer = allocate(100) for i = 0 to 99 do poke(buffer+i, 0) end for | |
関連事項: | free, allocate_low, peek, poke, mem_set, call |
動作環境: | DOS32 |
書式: | include machine.e i2 = allocate_low(i1) |
解説: | 連続したi1バイトの下位メモリーを確保します。すなわちコンベンショナル(1メガバイト以下のアドレス)メモリーのことです。 メモリーブロックのアドレスを返すか、またはメモリーが確保できなかったときは0を返します。 |
注釈: | いくつかのDOSソフトウェア割り込みは1つ以上のアドレスをレジスタに与える必要があります。 これらのアドレスはDOSで読み書きできるようコンベンショナルメモリーのアドレスである必要があります。 |
プログラム例: | demo\dos32\dosint.ex |
関連事項: | dos_interrupt, free_low, allocate, peek, poke |
書式: | include machine.e a = allocate_string(s) |
解説: | メモリーの空き領域に文字列sを割り当てます。文字列の終端に0を付加してメモリーの空き領域にコピーします。 これはC言語文字列として利用が想定される形式です。返値としてaには文字列のメモリーアドレスが返されます。 なお、利用可能なメモリーがないときは0を返します。 |
注釈: | 文字列の開放にはfree()を使用してください。 |
用例: | |
atom title title = allocate_string("The Wizard of Oz") | |
プログラム例: | demo\win32\window.exw |
関連事項: | allocate, free |
書式: | include file.e allow_break(i) |
解説: | iが1(真)のとき、Ctrl+CまたはCtrl+Breakがキーボードから入力されるとプログラムを強制終了できます。
iが0(偽)のとき、Ctrl+CまたはCtrl+Breakがキーボードから入力されてもプログラムを強制終了できません。 |
注釈: | DOSではプログラムが終了できない場合は^Cをスクリーンに表示します。
最初にプログラムはキーボードからCtrl+CまたはCtrl+Breakを得ると、どのようなときであっても強制終了できます。 これを回避するためにはcheck_break()を呼ぶことによりCtrl+CまたはCtrl+Breakが押されたかどうか検出できます。 |
用例: | |
allow_break(0) -- ユーザは強制終了できない! | |
関連事項: | check_break |
書式: | x3 = and_bits(x1, x2) |
解説: | x1とx2に対応するビット間に対して論理AND演算を行います。x1とx2の両方の対応するビットが1のときのみx3が1となります。 |
注釈: | この関数の引数はアトムまたはシーケンスである必要があります。規約はシーケンスの演算が適用されます。
整数・負数のいずれであっても、引数は32bit整数で表現可能な範囲である必要があります。 もし32bitの値をすべて操作するのであれば、変数を整数ではなくアトムとして宣言する必要があります。なおEuphoriaの整数型は31-bitまでの制限があります。 結果は負数として処理されます。そして最上位ビットが1のときは負数になります。 2進数表記の数値を理解するためには16進数表記で明示する必要があります。その場合はprintf()の%x形式を使用します。 |
用例1: | |
a = and_bits(#0F0F0000, #12345678) -- a は #02040000 | |
用例2: | |
a = and_bits(#FF, {#123456, #876543, #2211}) -- a は {#56, #43, #11} | |
用例3: | |
a = and_bits(#FFFFFFFF, #FFFFFFFF) -- a は -1 -- 補足事項として #FFFFFFFF は正数ですが、 -- 結果はビット論理演算として解釈され、 -- 符号付き32bitの数値であるため、負数となります。 | |
関連事項: | or_bits, xor_bits, not_bits, int_to_bits |
書式: | s2 = append(s1, x) |
解説: | s1の末尾の要素にxを追加したシーケンスを返します。なお、s2の長さはlength(s1) + 1となります。 length(s1) + 1. |
注釈: | xがアトムのときはs2 = s1 & xは等価です。しかしxがシーケンスのときは等価ではありません。
外部ストレージはEuphoriaの動的ストレージアロケーションによって自動的かつ非常に効率的に確保されます。 |
用例1: | append()を使うとシーケンスを動的に拡張することができます。すなわち、 |
sequence x x = {} for i = 1 to 10 do x = append(x, i) end for -- x の結果は {1,2,3,4,5,6,7,8,9,10} | |
用例2: | 全ての種類のEuphoriaのオブジェクトをシーケンスに追加することができます。例えば、 |
sequence x, y, z x = {"fred", "barney"} y = append(x, "wilma") -- y の結果は {"fred", "barney", "wilma"} z = append(append(y, "betty"), {"bam", "bam"}) -- z is now {"fred", "barney", "wilma", "betty", {"bam", "bam"}} | |
関連事項: | prepend, 連結演算子 &, シーケンス構造演算子 |
書式: | include misc.e x2 = arccos(x1) |
解説: | x1と等しいコサインの角度を返します。 |
注釈: | 引数としてx1は、-1 から +1を含んだ範囲でなければなりません。
0 およびラジアンのPIの間の値が返されます。 この関数はアトムまたはシーケンスの全ての要素に適用されることがあります。 arccos()はarctan()より高速ではありません。 |
用例: | |
s = arccos({-1,0,1}) -- s は {3.141592654, 1.570796327, 0} | |
関連事項: | cos, arcsin, arctan |
書式: | include misc.e x2 = arcsin(x1) |
解説: | x1と等しいサインの角度を返します。 |
注釈: | 引数としてx1は、-1 から +1を含んだ範囲でなければなりません。
-PI/2 および +PI/2 (ラジアン)の間の値が返されます。 はアトムまたはシーケンスの全ての要素に適用されることがあります。 arcsin()はarctan()より高速ではありません。 |
用例: | |
s = arcsin({-1,0,1}) -- s は {-1.570796327, 0, 1.570796327} | |
関連事項: | sin, arccos, arctan |
書式: | x2 = arctan(x1) |
解説: | x1と等しいタンジェントの角度を返します。 |
注釈: | -PI/2 および +PI/2 (ラジアン)の間の値が返されます。
この関数はアトムまたはシーケンスの全ての要素に適用されることがあります。 arctan()はarcsin() または arccos()よりも高速です。 |
用例: | |
s = arctan({1,2,3}) -- s は {0.785398, 1.10715, 1.24905} | |
関連事項: | tan, arcsin, arccos |
書式: | i = atom(x) |
解説: | xがアトムであれば1を、それ以外であれば0を返します。 |
注釈: | これはatom型の雛形となる定義です。また、オブジェクトがアトムであるかどうか調べるための関数としても使用できます。 |
用例1: | |
atom a a = 5.99 | |
用例2: | |
object line line = gets(0) if atom(line) then puts(SCREEN, "end of file\n") end if | |
関連事項: | sequence, object, integer, アトムとシーケンス |
書式: | include machine.e s = atom_to_float32(a1) |
解説: | Euphoriaのアトムを単一の4バイトからなるシーケンスに変換します。これら4バイトには32bit形式におけるIEEE浮動小数点数の表記が含まれています。 |
注釈: | 全てのEuphoriaのアトムは64-bitIEEE浮動小数点数として表現可能な値を持つため、32bit(16の有効桁数のうち7)に変換するとき、精度が欠落するかもしれません。 指数の範囲は64-bit形式(308から10対10から38)であるため非常に大きく、 いくつかのアトムでは多すぎるか小さすぎるかもしれないため32bit形式で表現することができません。 この場合は特別な32bit値が得られます: inf または -inf (infinity または -infinity)。 これを回避するには atom_to_float64()を使用することができます。 整数値は32bit浮動小数点数形式に変換されます。 |
用例: | |
fn = open("numbers.dat", "wb") puts(fn, atom_to_float32(157.82)) -- 4バイトをファイルに書き出します。 | |
関連事項: | atom_to_float64, float32_to_atom |
書式: | include machine.e s = atom_to_float64(a1) |
解説: | Euphoriaのアトムを単一の8バイトからなるシーケンスに変換します。これら8バイトには64bit形式におけるIEEE浮動小数点数の表記が含まれています。 |
注釈: | 全てのEuphoriaのアトムは64-bitIEEE浮動小数点数として表現可能な値を持ち、精度を一切損なうことなく任意のアトムを64-bit形式に変換できます。
整数値は64-bit浮動小数点数形式に変換されます。 |
用例: | |
fn = open("numbers.dat", "wb") puts(fn, atom_to_float64(157.82)) -- 8バイトをファイルに書き出します。 | |
関連事項: | atom_to_float32, float64_to_atom |
書式: | include machine.e a = bits_to_int(s) |
解説: | 0と1の2進数からなるシーケンスを正数に変換します。最下位ビットはs[1]です。 |
注釈: | sを出力するとビットは"逆順"で出現しますが、意味としては添字でアクセスできる下位ビット数を増やすときに便利です。 |
用例: | |
a = bits_to_int({1,1,1,0,1}) -- a は 23 (2進数で10111) | |
関連事項: | int_to_bits, シーケンスの演算 |
書式: | include graphics.e bk_color(i) |
解説: | テキストの背景色を標準16色の中からひとつ選んで設定します。 ピクセルグラフィックスモードにおいて変更結果は全てのスクリーンに即時反映されます。 テキストモードにおいて変更結果は次回のテキストの出力から反映されます。 いくつかのテキストモードで利用可能な背景色は8色に制限されることがあります。 |
注釈: | 標準16色はgraphics.eに定数として定義されています。
ピクセルグラフィックスモードでは色0は通常は黒であり、パレットの値{r,g,b}は色番号iと同様に設定されます。 ピクセルグラフィックスモードではスクリーン端に境界色が現れます。256色モードでは、これはパレットの17番目の色です。ほかの任意の色制御することができます。
テキストモードでは初期の背景色に復元するために、プログラム終了時にbk_color(0)といったように0 - BLACKを指定して呼び出す必要があります。 |
用例: | |
bk_color(BLACK) | |
関連事項: | text_color, palette |
書式: | include machine.e a = bytes_to_int(s) |
解説: | バイト値で構成される4要素シーケンスをアトムに変換します。要素sはi386以降で使用される最下位バイトが最初に来る順列です。 |
注釈: | 結果が大きくて整数型の許容範囲を超えたときは、それをアトムとして割り当てる必要があります。
通常sはpeek()を使用して読み取った4つの連続するメモリーの位置にある整数値を含みます。 |
用例: | |
atom int32 int32 = bytes_to_int({37,1,0,0}) -- int32 は 37 + 256*1 = 293 | |
関連事項: | int_to_bytes, bits_to_int, peek, peek4s, peek4u, poke |