1000speakers用資料
プログラミング言語FIFOLの要素
オブジェクトの型は整数、ブール値、キュー、プロシージャがある。プロシージャは、{ } で囲まれたサブプログラム。
演算子はキューの操作、プログラムの制御および値出力に関する演算子と、算術論理演算および比較演算の演算子からなる。
演算子 | before | after | 説明 |
---|---|---|---|
pop | [any ...] | [...] | ヘッドのオブジェクトをPOPする |
dup | [any ...] | [... any any] | ヘッドのオブジェクトをDuplicateしてテールに入れる |
swp | [any1 any2 ...] | [... any2 any1] | ヘッドの2オブジェクトの順番を入れ替えてテールに入れる |
rot | [any ...] | [... any] | ヘッドのオブジェクトをテールに入れる |
newfifo | [...] | [... [ ] ] | 新しく空のキューを作ってテールに入れる |
fifopush | [ [..] any ...] | [... [.. any] ] | ヘッドにあるキューに2番目のオブジェクトを入れて、キューをテールに入れる |
fifopop | [ [any ..] ...] | [... [..] any] | ヘッドにあるキューのヘッドのオブジェクトをPOPしてテールにキューとPOPしたオブジェクトを入れる |
swi | [ [..] ...] | [ .. [...] ] | ヘッドにあるキューと入れ替わる |
if | [bool proc ...] | [...] | ヘッドのオブジェクトが真なら2番目のプロシージャを実行する |
ifelse | [bool proc1 proc2 ...] | [...] | ヘッドのオブジェクトが真なら2番目、偽なら3番目のプロシージャを実行する |
loop | [proc ...] | [...] | ヘッドにあるプロシージャをループさせる |
exit | [...] | [...] | 今回っているループを抜ける |
= | [any ...] | [...] | ヘッドのオブジェクトを標準出力に出力する |
? | [...] | [... any] | 標準入力から呼んだものをテールに入れる |
fifo | [...] | [...] | 現在のキューの状態を標準出力に出力する |
算術演算の演算子は、add}(加算)、sub(減算)、mul(乗算)、div(除算)、mod(剰余)、neg(符号反転)。論理演算の演算子は and(論理積)、or(論理和)、xor(排他的論理和)、not(論理否定)。整数が与えられた場合はビットごとの論理演算を行い、ブール値が与えられた場合は論理演算となる。
比較演算子はeq(等値)、ne(非等値)、ge(等値以上)、gt(より大きい)、le(等値以下)、lt(より小さい)。
FIFOLで書いた、「1〜10を出力するプログラム」
{ dup 10 rot ge { exit } rot if dup = 1 add } 1 loop