Paraphrase ワードリファレンス ver.

飯倉宏治

この文書では、Paraphrase ver. の 標準ワードについて説明を行います。 最初に、ソースコードの表記方法などを示した 凡例と、使用する 用語についてのまとめ、 および、本文書で説明されているワードの一覧 (目次)を示します。 その後、アルファベット順(ASCII コード順)に、 各ワードについて説明をしていきます。

このリファレンスは、あくまでも現時点(バージョン )の ものです。 そのため、将来的には標準の拡張辞書へ移動する可能性のあるワードも含まれています。 バージョン 1.00 までにはこの辺りの事柄も整理していければ、と思っております。

Paraphrase は Forth 系の言語です。 そのため、いくつかのワードは少なからぬ影響を Forth から得ています。 しかし、Forth のプログラムとの互換性はありません。 Forth に存在するワードであっても、処理内容が異なる場合もありますし、 そもそも Paraphrase には存在しない場合もあります。

本文書では Forth を知っている人のための情報は載せていませんが、 (かつての、または、現役の)Forth ユーザーが混乱しないよう、 補足説明を追記していければ、と思っております。

なお、この文章では便宜上「プログラミング言語 C」を「C 言語」と表記しています。 この表現が気になる人は適当に読み替えて下さい。

目次

1. ワードインデックス

1.1 カテゴリ別

1.2 アルファベット順

2. 凡例

2.1. ワード名

2.2. スタックの変化

2.3. ユーザーの入力とインタプリタの出力

2.4. サンプルプログラム

2.5. ソースコードに対する注釈

3. 記号用語等

3.1. ワード名で用いられる記号

3.2. スタック上の値を表す記号

3.3. 略語

3.4. 用語

4. ワードリファレンス

1. ワードインデックス (全語)

1.1. カテゴリ別

四則演算等 + - * %
@+ @- @* @⁄ +@
-@ *@ ⁄@ %@
比較演算 < <= > ≥= ==
!= 0? @< @<= @>
@>= @!= @== not-true?
ビット演算 & | ~ ^ >>
<< @& @| @~ @^
@<< @>>
論理演算 true false && || and
or xor not
数学関数 square sqrt @sqrt exp pow
(と関連ワード) log log10 abs sin cos
tan asin acos atan deg-to-rad
rad-to-deg set-random-seed randomize rand
random rand-to floor ceil min
max even? @even? round
文字列 raw<<< >>>raw <<< >>> @empty-str?
@not-empty-str? size @size at
sputf >upper >lower start-with?
@start-with? end-with? @end-with? search
@search replace-str trim split-str-by
eval make-literal-code-list str-to-list-byte
thru utf8>sjis sjis>utf8 ccc-str
定数 pi rand-max bool-type int-type long-type
float-type double-type word-type
配列 new-array new-array-with set @set
get @get @valid-index? size
@size last @last
リスト ( ) (< >) ()
empty-list? not-empty-list? @empty-list?
@not-empty-list? en-list expand @expand
append @append push-back @push-back get
set @set tuple car @car
cdr @cdr pop-front @pop-front last
@last split concat slice size
@size product zip min-zip max-zip
max-zip-with map vmap sort
sort+ sort- filter find has?
@has? in? @in? foreach
reverse-foreach
連想配列 new-assoc set @set get
has-key? @has-key?
型変換等 >int >long >long? >big-int >float
>double >double? >bool >string >symbol
>hex >array >assoc >list >word
>address >int? >float? bool? int?
long? big-int? float? double? string?
word? @word? array? @array? list?
@list? assoc? @assoc? type-name @type-name
@type> >type is?
定義 : :: ; def update
defined? forget set-delete-by-forget
clear-delete-by-forget check-delete-by-forget immediate
vocabulary set-vocabulary get-voc {
} {{ }} }}, const
const! enum >lit >here alias
last-defined-word
呼び出し exec :( );
局所変数 local map-local local-decl let map-let
,(カンマ) >param ... ++ --
<- += -= ∗= /=
%=
大域変数 global global-decl store fetch
条件分岐 if else then switch cond
case default -> ->> break
dispatch otherwise-drop otherwise-2drop
繰り返し for+ for- next step leave
continue redo i j
as-counter while do
while-pipe loop repeat when
チャネル >pipe pipe>
eoc eoc? reset-pipes
並列処理 [ ] [[ ]] [->
[[-> [[=> >[ >[[ >>[
>>[[ >[-> >[[-> >>[-> >>[[->
>[[=> ]= ]]= ]> ]]>
]=> ]]=> ]>> ]]>> ]=>>
]]=>> num-of-threads set-num-of-threads
join @join
スタック clear clear-rs empty? depth dup
2dup clone full-clone swap swap-rs
over pick replace drop 2drop
3drop drop-rs 2drop-rs rot inv-rot
>r @>r r> @r>
入出力 . (ドット) @. .cr write
putc putf printf cr dump
flush-stdout fexist? open to-read new-file
close >file fwrite fgets @fgets
unfgets flush-file load import get-line
eof? @eof? fcopy get-std-code
mkdir
制御構造定義用 loop-epilogue
AOP set-code default-docol worded-docol-caller
set-worded-docol-callee docol docol-target-word
属性 set-attr @set-attr get-attr remove-attr has-attr?
show-attr has-any-attr?
単体テスト use-mock-stdin use-mock-stdout
>mock-stdin get-line-from-mock-stdout
use-stdout use-stdin
デバッガ set-breakpoint _b clear-breakpoint
_cb quit-debugger _q cont
_c step-over _n step-in _s
その他 return panic sleep this-word-is-removed
show-trace tron troff tron? args
invalid valid? @valid? invalid? @invalid?
size @size ⁄∗ *⁄ //
show show-rs ⁄∗ inspect @word-name
word-name @word-short-name word-short-name
show-local-vars quit exit self
caller windows? linux? mac? interactive?

※ 配列およびリスト等にワード size 等が書かれていますが、 同名のワードは全て同じワードを指します。 これらのワードは配列やリストにも対応するワードですので、 複数のカテゴリに所属させています。

1.2. アルファベット順

記号   != % %= %@ &
&& ( () (< )
); * *⁄ ∗= *@
+ ++ += +@ ,(カンマ)
- -= -- -@ ->
->> . (ドット) ... .cr
⁄∗ // /= ⁄@
: :( :: ; <
<- << <<< <= ==
> >) >= >> >>>
>>>raw >>[ >>[-> >>[[ >>[[->
>address >array >assoc >big-int >bool
>double >double? >file >float >float?
>here >hex >int >int? >list
>lit >long >long? >lower
>mock-stdin >param >pipe >r
>string >symbol >type >upper >word
>[ >[-> >[[ >[[-> >[[=>
[ [-> [[ [[-> [[=>
] ]= ]=> ]=>> ]>
]>> ]] ]]= ]]=> ]]=>>
]]> ]]>> ^ { {{
| || } }} }},
@!= @& @* @+ @-
@. @⁄ @< @<< @>
@<= @== @>> @>= @>r
@^ @| @append @array? @assoc?
@car @cdr @empty-list? @empty-str?
@end-with? @eof? @even? @expand
@fgets @get @has-key? @has? @in?
@invalid? @join @last @list?
@not-epmty-list? @not-empty-str? @pop-front
@push-back @r> @search @set @set-attr
@size @sqrt @start-with? @type-name
@type> @valid-index? @valid? @word-name
@word-short-name @word? @~ _c
~ _b _cb _n _q
_n
数値 0? 2drop 2drop-rs 2dup 3drop
A abs acos alias and append
args array? as-counter asin
assoc? at atan
B big-int? bool-type bool? break
C caller car case ccc-str cdr
ceil check-delete-by-forget clear
clear-breakpoint clear-delete-by-forget clear-rs
clone close concat cond const
const! cont continue cos cr
D def default default-docol defined?
deg-to-rad depth dispatch do docol
docol-target-word double-type double? drop
drop-rs dump dup
E else empty? empty-list? en-list
end-with? enum eoc eoc?
eof? eval even? exec exit
exp expand
F false fcopy fetch fexist? fgets
filter find float-type float? floor
flush-stdout flush-file for for-dec
foreach forget full-clone fwrite
G get get-attr get-line
get-line-from-mock-stdout get-std-code
get-voc global global-decl
H has-any-attr? has-attr? has-key? has?
I i if immediate import in?
inspect int-type int? interactive? inv-rot
invalid invalid? is?
J j join
L last last-defined-word leave let
linux? list? load local local-decl
log log10 long-type long? loop
loop-epilogue
M mac? make-literal-code-list map map-let
map-local max max-zip max-zip-with
min min-zip mkdir
N new-array new-array-with new-assoc
new-file next not not-empty-list?
not-true? num-of-threads
O open or otherwise-2drop
otherwise-drop over
P panic pi pick pipe>
pop-front pow printf product push-back
putc putf
Q quit quit-debugger
R r> rad-to-deg rand rand-to rand-max
random randomize raw<<< redo remove-attr
repeat replace replace-str reset-pipes return
reverse-foreach rot round
S search self set set-attr
set-breakpoint set-code set-delete-by-forget
set-num-of-threads set-random-seed
set-vocabulary set-worded-docol-callee show
show-attr show-local-vars show-rs show-trace
sin size sjis>utf8 sleep slice
sort sort+ sort- split split-str-by
sputf sqrt start-with? step step-in
step-over store str-to-list-byte string?
square
swap swap-rs switch
T tan then this-word-is-removed thru
to-read trim troff tron tron?
true tuple type-name
U update use-mock-stdin use-mock-stdout
use-stdin use-stdout utf8>sjis unfgets
V valid? vmap vocabulary
W when while while-pipe windows? word-name
word-short-name word-type word?
worded-docol-caller write
X xor
Z zip

2. 凡例

2.1. ワード名

この文書で説明しているワードは、デフォルトで使用可能なもののみです。 これらのワードは標準ボキャブラリ std に所属していますが、 ボキャブラリ名を含んだ正規名ではなく、短縮名を記載しています。 例えば、加算を実施するワードの正規名は std:+ ですが、 単にワード + として説明を行っています。

なお Paraphrase のボキャブラリは Forth におけるそれとは完全に同一ではありません。 Paraphrase におけるボキャブラリは C++ などにおける名前空間に近いものです。 ボキャブラリに関する詳しい説明については、 後にリリースされるであろう Paraphrase のプログラミングガイドを参照して下さい。

2.2. スタックの変化

ワードの実行による、実行前と実行後のスタックの変化は、 Forth にならい、記号 --- を挟んで表現しています。 --- の左側がワードの実行前のスタックを表し、 右側がワードの実行後のスタックの状況を表しています。 スタックの状況は左側がスタックの底に近い部分を表し、 右側がスタックの上の方を表しているものとします。 最も右側に書かれているものがスタックの最上部 (TOS=Top Of Stack)です。

例えば、+ というワードはスタックから 2 つの数値を取り出し、 それらの和をスタックに積みますので、 ワード + におけるスタックの変化は「数値 数値 --- 数値」と表されますが、 この文書では、数値を表す記号 N を用いて、 N1 N2 --- N などと表記することとします。 スタックの変化を説明するために使用される記号については、 次節 「3.記号用語等」 を参照して下さい。

なお、Forth ではスタックの変化を示す情報は (n1 n2 --- n3) 等と、丸括弧で囲んで表記されることもありますが、 本文書では特に必要のない限り両端の丸括弧は省略するものとします。

ワード size など、 複数の種類の値に対応するワードでは、 例えば TOS にある値について、{ A | S } --- I などという表現を用いています。 中括弧 { } と、縦線で構成される { A | S } という表記ですが、 これは A または S という状態を表すこととします。

スタックの状態を示す際に「RS:」という表記がある場合は、 リターンスタックの状態を表すものとします。

2.3. ユーザーの入力とインタプリタの出力

1 2 + . のように、 下線がついている部分は ユーザーが入力する部分を表しています。 下線が付いていない部分は Paraphrase インタプリタの出力です。

2.4. サンプルプログラム

サンプルプログラムは、 以下に示すように、Paraphrase インタプリタへの入力例として記載しています。

> 1 2 + .
  3 ok.

1行目の > は、Paraphrase インタプリタによるプロンプトです。 2 行目の 3 ok. はインタプリタが出力したものです。

2.5. ソースコードに対する注釈

ソースコードと共に掲載されている、 背景色が黄色の説明文は ソースコードに対する注釈です。 プログラムの一部ではありません (Paraphrase のコメント用ワードではありません)。

3. 記号用語等

3.1. ワード名で用いられる記号

> 不等号の意味としてももちろん使用されますが、 pipe や r などといった字句とも合わせて使用されます。 このような場合、例えば '>pipe' や 'pipe>' などといった時は、 to-pipe や from-pipe といった読み方をします。 このような考え方は Forth の文化から拝借しています。

なお、並列処理関連のワードの接頭詞または接尾詞でで用いられる場合は、 上記の意味とは異なる意味となります。詳しくは後述の 「 3.5. 並列処理関連ワードの接頭詞・接尾詞について」 を見て下さい。

@ いくつかのワードについては、その名前が @ で始まっています。 これらのワードは原則として、先頭の @ を除くと同名のワードが存在します。 @ が付かないものと、付くものの違いは、 付かないものはスタック上の値を消費しますが、 @ が付くものは消費しません。

@ より始まるワード名を持つものは、 先頭の @ を取り除いた同名のワードの参照型と呼ばれます。

例えば、>r というワードはデータスタックの TOS を取り出し、 その値をリターンスタックに積むワードですが、 @>r というワードはデータスタックの TOS を「見るだけ」とし、 取り出すことはせず、今見た値と同じものをリターンスタックに 積むワードとなります。

@ による接頭語は、 あくまでもワード名に関する指標のようなものであり、 システム的に制限・強要されているものではありません。 ワード名を @ から開始したからといって、 スタックを消費しないワードに、自動的に変換されることはありません。

また、スタックを消費しないワードの名前が、 必ずしも @ から始まるということではありません。 スタックの現在の状況を表示する show などがその例です。 @ という記号は、あくまでも、@ が付くものと付かないワードが 共に存在する場合に限り、スタックを消費しないバージョンであることを 示しているだけです。

標準ワードに関しては、 このような命名規則を運用上のルールとして規定しています。 ユーザー定義のワードにおいても、考慮していただけると助かります もちろん、強要はいたしませんが、 現段階における Paraphrase の文化というか、 推奨コーディングルールのようなものですので、 協力していただければ助かります。

3.2. スタック上の値を表す記号

小文字 任意の値を示します。 記号 X と同じですが、スタック上の順序が変化する場合などに使用します。 例えば、a b --- b a という表記では、 スタック上の 2 つの値が入れ替わっている様子を示しています。
A 配列を表します。
B 真偽値を表します。
C 標準コード(へのポインタ)を表します。
D double を表します。
E float, double もしくは big-int 型の値を表します。
End of Channel (EoC) を表します。
F float 型の値を表します。
ファイルを表します。
End of File(EoF) を表します。
I int を表します。
J big-int を表します。
K 整数値(int、long または big-int)を表します。
L long を表します。
任意のリストを表します。
M big-int 以外の数値 (int, long, float, double)を表します。
N 任意の数値(int, long, big-int, float, double)を表します。
Q コンテキストを表します。
S 文字列を表します。
σ シンボルを表します。
W ワードを表します。
X 任意の値を表します。
Y チャネルを表します。
Z キーと紐付けられた値を保持する連想配列を表します。
α アドレス値を表します。
κ 構文スタックに積む制御ブロック(Control Block)情報を示します。
θ 実行レベル閾値を表します。
μ 補助情報値を表します。この値は整数値です。 コメントブロックの状態やヒアドキュメントの ブロック構造を示す値として使用します。
ν 現在定義中のワードを指します(new word とも呼ぶ場合があります)。
η 無効な値を示します。
π 現在コンパイル中のスレッドにおいて、 次にコンパイルされるものが格納されるアドレスを示します。
ω 現在定義中のワードを表します。 新たにワードを定義する場合は、 現在定義中のワード(これが ω で表されるものです)をスタック上に プッシュするなどします。

3.3. 略語

DS データスタック(Data Stack)の意味です。 一般的に Paraphrase のワードはこのデータスタックから値を取り出し、 処理の結果もこのデータスタックに積みます(プッシュします)。
IP インストラクションポインタ(Instruction Pointer)の意味です。 Paraphrase では Forth 同様、 ワードを構成するワードや値からなる列は、 スレッドに格納されています。 この格納されているワード列に対し、 次に実行すべきワードを指し示しているのが IP です。 IP は基本的に 1 つづつ増加し、順次格納されているワードを実行していきますが、 この値を変更することにより、分岐を実現することもできます。
RS 補助スタックを表します。 RS という表記は、Forth における return stack に由来しています。 Paraphrase では、ワードの呼び出し・復帰に補助スタックを使用していませんが、 現在のところ Forth と同様にリターンスタックと呼ぶこととしています。
TOS Top Of the Stack の略。 単に TOS と書かれている場合は、 データスタックの最上部にある値を指します。
VM 他の言語と同じく Virtual Machine の意味です。 別スレッドで実行される並列処理ブロック毎に VM が生成され、 各 VM 上で並列処理ブロックは実行されます。

各 VM はそれぞれ(データ)スタックおよびリターンスタック等を 所有しています(これをコンテストと呼びます)。 VM は内部インタプリタと呼ばれる場合もあります。

3.4. 用語

コンテキスト VM で操作される情報の塊またはそれらの情報を指します。 データスタックなどの情報もコンテキストの一部です。

Paraphrase では並列実行される各スレッド毎に独立した コンテキストが存在し、チャネル通信に関する部分を覗いては、 互いに独立して計算処理を進めます。

スタック 本文書では、特に断りがない限り、 データスタックのことを単に「スタック」と呼びます。
セカンド スタックの上から 2 番目の値を指します。 単にセカンドと書かれている場合は、 データスタックの上から 2 番目にある値を指します。
親スレッド 特に断りが無い場合は、説明の対象となっているワードを実行する スレッドを指します。
子スレッド 特に断りが無い場合は、説明の対象となっているワードの実行により生成された スレッドを指します。 子スレッドは複数生成される場合があります。

3.4. 並列処理関連ワードの接頭詞・接尾詞について

当該の接頭詞・接尾詞全般に共通すること

他の接頭詞・接尾詞と同様に、これらは言語システムとして 機能しているものではありません。 単にワードの命名における単なる命名規則であり、 他のワードにこれらの接頭詞・接尾詞を付せば 同様の機能が付加されることはありません。 ワード名から機能が類推できるよう、ワード名を工夫しているだけです。

> 子スレッドのデフォルトチャネルを、 親スレッドのデフォルトのチャネルに接続することを意味します。 例えば、子スレッドを生成するワード [ に対するワード >[ では、 以下のような状況となります: >[ ... ] で生成される子スレッド中においては、 pipe> にて親スレッド側で >pipe を用いて送信された値を受信できます。

[[ ... ]]> では、子スレッド側で >pipe にて送信した値を 親スレッド側では pipe> を用いて受信できるようになります。

送信・受信用チャネルの指定でもこれらのワードは利用でき、 >[ ... ]> で生成した子スレッドと親スレッドは、 それぞれが >pipe ならびに pipe> を用いて 相互に値を送受信できます。

>> 接頭詞として使われる場合は、 子スレッドのデフォルト入力チャネルを 親スレッドの TOS に格納されているチャネルに接続します。 接尾詞として使われている場合は、 子スレッドのデフォルトの出力チャネルを 親スレッドのスタックに積みます。

4. ワードリファレンス

!=

実行レベル 標準実行レベル
スタックの変化
N N --- B
または
S S --- B
機能 スタック上にある 2 つの数値、 もしくは 2 つの文字列を取り出して比較し、 それらが等しくない場合には true を、 そうでなければ false をプッシュします。
使用例 次の例では、10 と 20 を比較し、 異なる値であるため true をスタックに積んでいます。
> 10 20 != .
  true ok.
エラー スタック上に 2 つの数値がない場合にはエラーとなります。

%

実行レベル 標準実行レベル
スタックの変化 K K --- K
機能 スタックの上から 2 番目の整数に対し、 TOS の整数で割った余りをスタックにプッシュします。
使用例 次の例では、12 を 5 で割った値を計算し、その結果を表示しています。
> 12 5 % .
  2 ok.
エラー スタック上に整数が 2 つ存在しなければエラーとなります。

%=

実行レベル 即時実行レベル 1
スタックの変化
SS: I ---

参考: 本ワードで生成されるコードによるスタックの変化は、

DS: K ---

となります。
機能 ワード <- と対をなし、 <- の直前にコンパイルされている シンボル名を持つ局所変数に、実行時の TOS の値で割った余りを 格納するコードを生成します。
使用例 使用例はありません。 ワード <- の使用例を参考にして下さい。
エラー SS の TOS が整数値でなかったり、 ワード <- の直前にコンパイルされている シンボル名を持つ局所変数が存在しない場合はエラーとなります。

%@

実行レベル 標準実行レベル
スタックの変化 N N --- N N
機能 セカンドの値で TOS の値で割った余りを TOS の値とします。 スタックの深さおよびセカンドの値は変化しません。
使用例
> 7 3 %@ show
      +-------+
TOS-->| int 1 |
      | int 7 |
DS:---------------
 ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

&

実行レベル 標準実行レベル
スタックの変化 K K --- K
機能 Second と TOS のビット単位での論理積(and)を計算します。 計算時には、Second と TOS のうち、情報量が大きい方へと整えられます。 例えば int と long 型で計算を行った場合、 計算結果は long となります。
使用例 次の例では、0x1234 の下位 4 ビットを取り出して表示しています。
> 0x1234 0x000F & .
  4 ok.
エラー TOS と Second が整数型(int もしくは long)でない場合は エラーとなります。

&&

実行レベル 標準実行レベル
スタックの変化 B B --- B
機能 Second と TOS の論理積を計算し、スタックにプッシュします。
使用例 次の例では、true と false の論理積を計算しています。
> true false && .
  false ok.
エラー スタックに 2 つ以上の値が格納されていなかったり、 TOS および Second が bool 値でなかったりした場合にはエラーとなります。

(

実行レベル 即時実行レベル 2
スタックの変化 RS: --- ν θ
機能 リストの定義を開始します。
使用例 次の例では、( 1 2 3 ) というリストを作成し、スタックに積みます。
> ( 1 2 3 )
  ok.
> . ← ワード . (ドット)でスタックに積んだ リストを表示する
( 1 2 3 ) ok.
エラー エラーは発生しません。

()

実行レベル 標準実行レベル
スタックの変化 ---
機能 空のリストをスタックに積みます。
使用例 次の例では、空のリストをスタックに積み、それを表示させて確認しています。
> ()
  ok.
> .
  ( ) ok.
エラー エラーは発生しません。

(<

実行レベル 標準実行レベル
スタックの変化 SS: --- I
機能 ワード >) と連携して、 動的にリストを生成するため、 現在のスタックの深さを SS に積みます。
使用例 使用例はワード >) のものを 参照して下さい。
エラー エラーは発生しません。

)

実行レベル 即時実行レベル 2
スタックの変化 RS: θ ν ---
機能 リスト定義を終了します。
使用例 ワード ( の例を参照して下さい。
エラー リターンスタック上に要素が 2 つ以上存在しない場合や、 想定しているデータが存在しない場合にはエラーとなります。

);

実行レベル 標準実行レベル
スタックの変化 RS: W ---
機能 RS に積まれているワードを取り出し実行します。 ワード :( と対をなし、 前置記法によるワード呼出を実現します。
使用例 ワード :( の使用例をみて下さい。
エラー RS が空であったり、RS の TOS がワードでない場合はエラーとなります。

*

実行レベル 標準実行レベル
スタックの変化 N N --- N
機能 スタックの上から 2 つの数値の積をスタックにプッシュします。 計算後の数値の型は、2 つの数値のうち、精度が高い方にあわせられます。

例:int * float なら、計算結果は float となります。

使用例 次の例では、1.2 と 3 の積を計算し、計算結果を表示します。
> 1.2 3 * .
  3.60000 ok.
エラー スタック上に数値が 2 つ存在しなければエラーとなります。

*⁄

実行レベル 即時実行レベル 2
スタックの変化 RS: --- θ ω
機能 ワード ⁄∗ と対を成し、 コメントブロック(=破棄されるコンパイルされたシンボルの列)を構成します。 本ワード実行後はワード ⁄∗ 実行時の 実行モードに戻ります。
使用例 ワード [[ の例を参照して下さい (サンプルコード中にコメントがあります)。
エラー リターンスタック上に然るべき値がプッシュされていない場合はエラーとなります。

∗=

実行レベル 即時実行レベル 1
スタックの変化
SS: I ---

参考: 本ワードで生成されるコードによるスタックの変化は、

DS: N ---

となります。
機能 ワード <- と対をなし、 <- の直前にコンパイルされている シンボル名を持つ局所変数に、実行時の TOS を乗ずるコードを生成します。
使用例 使用例はありません。 ワード <- の使用例を参考にして下さい。
エラー SS の TOS が整数値でなかったり、 ワード <- の直前にコンパイルされている シンボル名を持つ局所変数が存在しない場合はエラーとなります。

-@

実行レベル 標準実行レベル
スタックの変化 N N --- N N
機能 セカンドの値に TOS の値を乗じたものを TOS の値とします。 スタックの深さおよびセカンドの値は変化しません。
使用例
> 2 3 *@ show
      +-------+
TOS-->| int 6 |
      | int 2 |
DS:---------------
 ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

+

実行レベル 標準実行レベル
スタックの変化 N N --- N
機能 TOS およびセカンドが数値の場合、 スタックの上から 2 つの数値の和をスタックにプッシュします。 計算後の数値の型は、2 つの数値のうち、精度が高い方にあわせられます。

例:int + float なら、計算結果は float となります。


TOS およびセカンドが文字列ならば、 セカンドに TOS を連結した文字列をスタックにプッシュします。
使用例 次の例では、10 と 2.3 の和を計算し、計算結果を表示します。
> 10 2.3 + .
  12.300000 ok.

次の例では、to-hex-str で得られた結果に "0x" を追加して表示しています。
> 0x41 to-hex-str "0x" swap + .
  0x41 ok.
エラー スタック上に数値が 2 つ存在しなければエラーとなります。

++

実行レベル 即時実行レベル 1
スタックの変化 ---
機能 直前にコンパイルされたシンボルと同名の局所変数の値を 1 だけ増やすコードを生成します。

指定される局所変数はそのワード(無名ワードを含む)にて 宣言されたものに限ります(動的スコーピングは適用されません)。

使用例 次の例では、初期値 100 として宣言した局所変数 x の値を 本ワードを用いて +1 しています。
> { 100 `x local
>> `x ++
>> `x , "x=%d\n" putf } exec
x=101
  ok.
エラー 指定されたシンボルと同名の局所変数が存在しない場合は、 本ワード実行時にエラーとなります。 また、当該ワード(無名ワード含む)の実行時においては、 本ワードの記述場所に実行が移ったとき、 指定された局所変数に数値が格納されていない場合、エラーとなります。

+=

実行レベル 即時実行レベル 1
スタックの変化
SS: I ---

参考: 本ワードで生成されるコードによるスタックの変化は、

DS: N ---

となります。
機能 ワード <- と対をなし、 <- の直前にコンパイルされている シンボル名を持つ局所変数に、実行時の TOS を加算する コードを生成します。
使用例 使用例はありません。 ワード <- の使用例を参考にして下さい。
エラー SS の TOS が整数値でなかったり、 ワード <- の直前にコンパイルされている シンボル名を持つ局所変数が存在しない場合はエラーとなります。

+@

実行レベル 標準実行レベル
スタックの変化 N N --- N N
機能 セカンドの値と TOS の値を加えたものを TOS の値とします。 スタックの深さおよびセカンドの値は変化しません。
使用例
> 1 2 +@ show
      +-------+
TOS-->| int 3 |
      | int 1 |
DS:---------------
 ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

,(カンマ)

実行レベル 標準実行レベル
スタックの変化
σ --- X
または
--- X1 X2 ... Xn
機能 TOS がシンボルの場合: TOS を取り出し、その TOS と同名のローカル変数の値をスタックに積みます。

TOS がシンボルリストの場合: TOS を取り出し、そのシンボルリスト中のシンボルと同名の ローカル変数の値を順次スタックに積んでいきます。 なお、リスト中のシンボルは先頭より順次取り出されていきます。

使用例 次の例では、シンボルリストを活用して、 ローカル変数の値が順次スタックに積まれる様子を示しています。
{ 10 20 30 ( x y z ) local
>> ( z x y x x ) , show } exec
      +--------+
TOS-->| int 10 |
      | int 10 |
      | int 20 |
      | int 10 |
      | int 30 |
DS:----------------
 ok.
エラー TOS が空であったり、シンボルまたはシンボルリストでない場合はエラーとなります。

-

実行レベル 標準実行レベル
スタックの変化 N N --- N
機能 スタックの上から 2 番目の数値から、 TOS の数値を減じた値をスタックにプッシュします。 2 つの数値の型が異なる場合は、 精度の高い方の型に変換され、計算が行われます。

例:int - doubleなら、計算結果は double となります。

使用例 次の例では、10 から 2.3 を引いた値を計算し、計算結果を表示します。
> 10 2.3 - .
  7.700000 ok.
エラー スタック上に数値が 2 つ存在しなければエラーとなります。

-=

実行レベル 即時実行レベル 1
スタックの変化
SS: I ---

参考: 本ワードで生成されるコードによるスタックの変化は、

DS: N ---

となります。
機能 ワード <- と対をなし、 <- の直前にコンパイルされている シンボル名を持つ局所変数に、実行時の TOS を減ずるコードを生成します。
使用例 使用例はありません。 ワード <- の使用例を参考にして下さい。
エラー SS の TOS が整数値でなかったり、 ワード <- の直前にコンパイルされている シンボル名を持つ局所変数が存在しない場合はエラーとなります。

--

実行レベル 即時実行レベル 1
スタックの変化 ---
機能 直前にコンパイルされたシンボルと同名の局所変数の値を 1 だけ減らすコードを生成します。

指定される局所変数はそのワード(無名ワードを含む)にて 宣言されたものに限ります(動的スコーピングは適用されません)。

使用例 次の例では、初期値 100 として宣言した局所変数 x の値を 本ワードを用いて -1 しています。
> { 100 `x local
>> `x --
>> `x , "x=%d\n" putf } exec
x=99
  ok.
エラー 指定されたシンボルと同名の局所変数が存在しない場合は、 本ワード実行時にエラーとなります。 また、当該ワード(無名ワード含む)の実行時においては、 本ワードの記述場所に実行が移ったとき、 指定された局所変数に数値が格納されていない場合、エラーとなります。

->

実行レベル 即時実行レベル 1
スタックの変化
生成されるコードの振る舞い:
TOS が真のとき
X B ---
TOS が偽のとき
X B --- X

コンパイル時:
SS: α3 α2 α1 I0 κ --- α3 α2 α1 I0 κ(変化しません)

SS 上の情報については、ワード switch の説明を 参照して下さい。
機能 本ワードは case と連携して使用します。 TOS が false でなければ本ワード -> 以降を実行するコードを 生成します。 このワードの動作は、->> と殆ど同じです。 異なる部分は、実行時に TOS が真であった場合に drop を実行するところです。 本ワードは、 ->> drop と同値です。

使用例 使い方については、ワード switch の例を参照して下さい。
エラー SS 上に switchdispatch ブロック もしくは conddispatch ブロック に関する情報が構築されていない場合はエラーとなります。

->>

実行レベル 即時実行レベル 1
スタックの変化
生成されるコードの振る舞い:
B ---

コンパイル時:
SS: α3 α2 α1 I0 κ --- α3 α2 α1 I0 κ(変化しません)

SS 上の情報については、ワード switch の説明を 参照して下さい。
機能 本ワードは case と連携して使用します。 TOS が false でなければ本ワード ->> 以降を実行するコードを 生成します。

本ワード実行時(コンパイル時)は、α3 に示すアドレスに、 現在コンパイル中のアドレスを格納し、 次の case または default への ジャンプを行うための空スロットを生成します。 その後、α3 にこの空きスロットのアドレスを格納します。

同様のワードに -> がありますが、 -> との違いは、TOS を捨てるかどうかだけです。 -> は TOS を捨てる drop を暗黙的に実行しますが、 本ワード ->> はこの drop を実行しません。 そのため、->> 以降の処理においても、 TOS が保存されるという違いがあります。

使用例

最大公約数を求めるワード gcd はスタックより 2 つの整数値をとり、 その 2 数の最大公約数をスタックに積むものとします。

// usage: m n gcd
`gcd :
    switch
        // m 0 gcd なら m とする。
        case 0? -> break

        // 等しいときは m (==n)  が答え
        case drop @== ->> drop

        // m<n なら n m gcd で再計算
        case drop @<  ->> swap gcd 

        // 上記以外の時は n m%n gcd
        default ->> dup inv-rot % gcd
    dispatch
;
エラー SS 上に switchdispatch ブロック もしくは conddispatch ブロック に関する情報が構築されていない場合はエラーとなります。

-@

実行レベル 標準実行レベル
スタックの変化 N N --- N N
機能 セカンドの値から TOS の値を引いたものを TOS の値とします。 スタックの深さおよびセカンドの値は変化しません。
使用例
> 3 1 -@ show
      +-------+
TOS-->| int 2 |
      | int 3 |
DS:---------------
 ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

. (← ドット)

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS のデータを取り出し、標準出力または擬似標準出力へ出力します。
使用例 次の例では、2+3 を計算し、その結果である数値 5 を出力しています。
> 2 3 + .
  5 ok.

同様のワードとして TOS を消費しない(参照するだけ)の @.というワードもあります。

エラー スタックが空の場合はエラーとなります。

...

実行レベル 即時実行レベル 1
スタックの変化 実行時: ---
機能 ワード >param と連携し、 残りの引数として、引数リストの残り全ての要素を取り込んだリストを スタックに積みます。 詳細については >param の説明を参照して下さい。
使用例 使用例についても>param の例を参照して下さい。
エラー ワード定義中に使用しない場合はエラーとなります。

.cr

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS を改行付きで標準出力または擬似標準出力へ出力します。 このワードは .cr を 連続して実行したものと同値です。
使用例 次の例では、123 という値を改行付きで表示しています。
> 123 .cr
  123
  ok.
エラー スタックが空の場合はエラーとなります。

実行レベル 標準実行レベル
スタックの変化 N N --- N
機能 スタックの上から 2 番目の数値に対し、 TOS の数値を割った値をスタックにプッシュします。 2 つの数値の型が異なる場合は、 精度の高い方の型に変換され、計算が行われます。

例:int / doubleなら、計算結果は double となります。

使用例 次の例では、1 を 4.0 で割った値を計算し、その結果を表示しています。
> 1 4.0 / .
  0.250000 ok.
エラー スタック上に数値が 2 つ存在しなければエラーとなります。

⁄∗

実行レベル 即時実行レベル 2
スタックの変化
DS: --- θ ν
RS: --- μ
機能 ワード *⁄ と対を成し、 コメントブロック(=破棄されるコンパイルされたシンボルの列)を構成します。
使用例 ワード [[ の例を参照して下さい (サンプルコード中にコメントがあります)。
エラー エラーは発生しません。

//

実行レベル 即時実行レベル 2
スタックの変化 RS: θ ω μ ---
機能 外部インタプリタにより暗黙的に実行されるワード __EOL__ と対をなし、 行末までをコメントとして扱います。
使用例
> `sq : dup * ; // calc square
  ok.
エラー エラーは発生しません。

/=

実行レベル 即時実行レベル 1
スタックの変化
SS: I ---

参考: 本ワードで生成されるコードによるスタックの変化は、

DS: N ---

となります。
機能 ワード <- と対をなし、 <- の直前にコンパイルされている シンボル名を持つ局所変数に、実行時の TOS の値で割るコードを生成します。
使用例 使用例はありません。 ワード <- の使用例を参考にして下さい。
エラー SS の TOS が整数値でなかったり、 ワード <- の直前にコンパイルされている シンボル名を持つ局所変数が存在しない場合はエラーとなります。

/@

実行レベル 標準実行レベル
スタックの変化 N N --- N N
機能 セカンドの値を TOS の値で割った値を TOS の値とします。 スタックの深さおよびセカンドの値は変化しません。
使用例
> 24 6 /@ show
      +--------+
TOS-->| int 4  |
      | int 24 |
DS:----------------
 ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

:

実行レベル 即時実行レベル 1
スタックの変化 { σ | S } ---
機能

ワード ; (セミコロン)と対をなし、 TOS にある文字列をワード名として、 ワード定義モード(コンパイルモード)に移行します。

ただし、'$' 記号で始まるワード名は使用できません ('$' 記号で始まるワードは、 グローバル変数や定数定義の処理にて予約されています)。

定義されるワードは、省略形として TOS に積まれたワード名と ボキャブラリ名と TOS に積まれたワード名とを コロンで繋いだ正規名でのワード、両方が定義されます。 デフォルトのボキャブラリ名は user です。 例えば test という文字列が TOS にある場合は、 user:test という名前が正規名となります。

使用例 次の例では、TOS を 2 倍する twice というワードを定義しています。
> `twice : 2 * ;
  ok.
エラー TOS が文字列でない場合はエラーとなります。 TOS にある文字列が '$' 記号で始まる場合はエラーとなります。

:(

実行レベル 標準実行レベル
スタックの変化 DS: { W | S | σ } --- RS: W
機能 ワード ); と対をなし、 前置き記法を実現します。
使用例 次の例では、2 の平方根をワード sqrt を用いて 計算しています。 Forth 由来の書き方では、2 sqrt と書くこととなりますが、 本ワードとワード ); を用いて ワード sqrt の引数が 2 であることを明示し、かつ、 前置記法にて sqrt を呼び出しています:

> `sqrt :( 2 ); .
  1.414214 ok.
エラー TOS に格納されている値がシンボルの場合、 そのシンボル名に対応するワードが見つからない場合はエラーとなります。

::

実行レベル 即時実行レベル 1
スタックの変化 { σ | S } ---
機能 ワード : では、短縮形と正規名を共に定義しますが、 ワード :: では、ボキャブラリ名+コロン+ワード名からなる 正規名のみをワード定義します。 それ以外はワード : と同じです。 使用されるボキャブラリ名はデフォルトのボキャブラリ名であり、 これはワード vocabulary で 確認できます。
使用例 サンプルコードはありません。
エラー TOS が文字列でない場合はエラーとなります。

;

実行レベル 即時実行レベル 1
スタックの変化 ---
※ 変化しません。
機能 ワード ::: と 対を成し、ワード定義を行います。 本ワード ; を実行することにより、ワード定義を終了し、 インタプリタモードへとモードを変更します。
使用例 ワード : のサンプルコードを参照して下さい。
エラー ワードの定義中でなかったり、while 〜 repeat など、 繰り返し処理で対になるワードが閉じていない場合はエラーとなります。

<

実行レベル 標準実行レベル
スタックの変化 N N --- B
機能 スタック上にある 2 つの数値を取り出して比較し、 TOS の方が大きい場合には true を、 そうでなければ false をプッシュします。
使用例 次の例では、1 と 2 を比較し、先に積まれている 1 の方が 真に小さいため、その結果である true をスタックに積んでいます。
> 1 2 < .
  true ok.
エラー スタック上に 2 つの数値がない場合にはエラーとなります。

<-

実行レベル 即時実行レベル 1
スタックの変化 SS: --- I
機能 += 等の局所変数むけ複合代入演算用ワードの、 対象となる局所変数を指定します。

本ワードは、+= 等のワードと 連携することを想定して用意されています。 これらのワードと正しく連携するためには、 本ワードの直前に局所変数名を示すシンボル値がコンパイルされている必要があります。

使用例 次の例は、TOS の値に 100 加えたものを局所変数 `x に格納し、 その値をスタックに積みます:
> `test :
>>   `x local
>>   `x <- 100 +=
>>   `x ,
>> ;
  ok.
> 23 test .cr
  123
  ok.
エラー ワード定義中でない場合、エラーが発生します。

<<

実行レベル 標準実行レベル
スタックの変化 K K --- K
機能 Second の値を TOS 分だけビット単位で左シフトします。 計算時には、Second と TOS のうち、情報量が大きい方へと整えられます。 例えば int と long 型で計算を行った場合、 計算結果は long となります。
使用例 次の例では、0x1234 を左に 4 ビットシフトして、 その値を 16 進数にて表示しています。
> 0x1234 4 << to-hex-str .
  12340 ok.
エラー TOS と Second が整数型でない場合はエラーとなります。

<<<

実行レベル 即時実行レベル 2
スタックの変化
DS: --- θ ν
RS: --- μ
機能 ワード >>> と連携し、 dedent されたヒアドキュメントブロックを構成します。

このワードの後に置かれた文字列は、 文頭もしくは行頭の空白文字を取り除かれた文字列として処理されます。

行頭の空白文字を無視しない(raw モード)での ヒアドキュメントを使用する場合は、 ワード raw<<<>>>raw を使用して下さい。

使用例 次の例では、"Zapper\nBlaster\n" という文字列をスタックに積んでいます。
> <<<
>>   Zapper
>>   Blaster
>> >>>
  ok.
エラー エラーは発生しません。

<=

実行レベル 標準実行レベル
スタックの変化 N N --- B
機能 スタック上にある 2 つの数値を取り出して比較し、 TOS の方が大きいか等しい場合には true を、 そうでなければ false をプッシュします。
使用例 次の例では、10 と 20 を比較し、 2 番目に積まれている 10 は TOS の 20 以下であるため、 true をスタックに積んでいます。
> 10 20 <= .
  true ok.
エラー スタック上に 2 つの数値がない場合にはエラーとなります。

==

実行レベル 標準実行レベル
スタックの変化 N N --- B
または、
--- B
機能 スタック上にある 2 つの数値またはリストを取り出して比較し、 それらが等しい場合には true を、 そうでなければ false をプッシュします。
使用例 次の例では、10 と 10 を比較し、 同じ値であるため true をスタックに積んでいます。
> 10 10 == .
  true ok.
エラー スタック上に 2 つの数値またはリストがない場合にはエラーとなります。

>

実行レベル 標準実行レベル
スタックの変化 N N --- B
機能 スタック上にある 2 つの数値を取り出して比較し、 TOS の方が小さい場合には true を、 そうでなければ false をプッシュします。
使用例 次の例では、2 と 1 を比較し、先に積まれている 2 の方が 真に大きいため、その結果である true をスタックに積んでいます。
> 2 1 > .
  true ok.
エラー スタック上に 2 つの数値がない場合にはエラーとなります。

>)

実行レベル 標準実行レベル
スタックの変化
DS: X0 X1 ... Xn ---
SS: I ---
機能 SS からワード (< によって積まれた 値(これは、動的なリストを構築開始したときのデータスタックの深さである)を 取得し、現在のデータスタックの深さより減じます。 これにより、動的に構築しなければならないリストの要素が確定するため、 その分だけデータスタックより値を取得し、動的にリストを構築します。

ワード(< を実行した時と比較して、 本ワードを実行した時のスタックの深さが浅い、もしくは同じ深さだった場合、 空のスタックを生成してスタックに積みます。

( 1 2 3 ) も (< 1 2 3 >) も同じ ( 1 2 3 ) というリストを スタックにプッシュしますが、リストの生成方法は大きく異なります。

ワード () では、 間に存在するシンボルをコンパイルすることにより、リストを構築していました。 一方、ワード (< および 本ワード >) を用いた場合は、 動的にリストを構築しデータスタックにプッシュします。 その点が ( および ) を 用いる場合と異なります。

ワード (< および 本ワード >) を用いる場合は、 あくまでも実行時に動的にリストを構築するため、 局所変数を用いた動的なリスト構築が可能となります。

これは、コンパイルによりワードを構築する ワード( および ) を用いる方法では実現できません (コンパイル時には局所変数の値が定まっていないため、 これらのワードではリストを構築することができません)。

使用例 次の例では、スタックよりひとつの数値を受け取り、 その数値自身およびその 10 倍、100 倍からなる リストを構築するワード test を定義しています:
> `test : `x local (< `x , `x , 10 * `x , 100 * >) ;
  ok.
> 3 test .
( 3 30 300 ) ok.
エラー SS に整数値が積まれていない場合はエラーとなります。

>=

実行レベル 標準実行レベル
スタックの変化 N N --- B
機能 スタック上にある 2 つの数値を取り出して比較し、 スタックの上から 2 つ目にあった値が TOS 以上であれば true を、 そうでなければ false をプッシュします。
使用例 次の例では、2 と 1 を比較し、先に積まれている 2 の方が TOS の値 1 以上であるため、 その結果である true をスタックに積んでいます。
> 2 1 >= .
  true ok.
エラー スタック上に 2 つの数値がない場合にはエラーとなります。

>>

実行レベル 標準実行レベル
スタックの変化 K K --- K
機能 Second の値を TOS 分だけビット単位で右シフトします。 計算時には、Second と TOS のうち、情報量が大きい方へと整えられます。 例えば int と long 型で計算を行った場合、 計算結果は long となります。
使用例 次の例では、0x1234 を右に 4 ビットシフトして、 その値を 16 進数にて表示しています。
> 0x1234 4 >> to-hex-str .
  123 ok.
エラー TOS と Second が整数型(int もしくは long)でない場合は エラーとなります。

>>>

実行レベル 即時実行レベル 2
スタックの変化
DS: θ ν ---
RS: μ ---
機能 ワード <<< と連携し、 dedent されたヒアドキュメントブロックを構成します。

使用例 ワード <<< の仕様例を参照して下さい。
エラー DS および RS スタック上にしかるべき値が積まれていない場合はエラーとなります。

>>>raw

実行レベル 即時実行レベル 2
スタックの変化
DS: θ ν ---
RS: μ ---
機能 ワード raw<<< と連携し、 ヒアドキュメントブロックを構成します。

使用例 ワード raw<<< の仕様例を参照して下さい。
エラー DS および RS スタック上にしかるべき値が積まれていない場合はエラーとなります。

>>[

実行レベル 即時実行レベル 1
スタックの変化 RS: --- ν θ
SS: --- κ
機能 ワード [ と同様に並列処理ブロックを 開始します。 ワード ] と対を成し、 並列処理ブロックを構成する点もワード [ と同様です。

ワード [ と異なる点は、 子スレッドにおけるデフォルトの読み込み用チャネルは、 親スレッドの TOS に積まれているチャネルと接続されるところです。

使用例 次の例では、ワード [ および ]>> により構成される 並列処理ブロック(=スレッド 1)にて生成されるチャネルをスタックに積み、 そのチャネルをデフォルトの読み取り用のチャネルとする、 並列処理ブロック(=スレッド 2)を本ワードを用いて生成・実行しています。
> [ "one " >pipe /* thread 1 */ ]>>
  ok.
> >>[ pipe> "two" + "s='%s'\n" putf /* thread 2 */ ]
  ok.
s='one two'   ok.
エラー エラーは発生しません。

>>[->

実行レベル 即時実行レベル 1
スタックの変化 コンパイル時
RS: --- ν θ
SS: --- κ
コンパイルにより生成されたコードの実行時
親スレッド: X ---
子スレッド: --- X
機能 ワード [-> と同様に ワード ] と対を成し、 並列処理ブロックを構成します。 ワード [-> と動作は殆ど同じですが、 本ワードで定義される並列処理ブロックの デフォルトの入力用パイプが親スレッドのスタックの TOS にある 出力用チャネルと接続される点が異なります。

子スレッドのスタックに積まれる値は、 親スレッドのセカンドの値が用いられます。

使用例 サンプルプログラムはありません。
エラー コンパイル時にはエラーは発生しませんが、 生成されたコードの実行時には、 親スレッドのスタック上に 2 つの値が存在しなかったり、 TOS がチャネルでない場合はエラーとなります。

>>[[

実行レベル 即時実行レベル 1
スタックの変化 RS: --- ν θ
SS: --- κ
機能 ワード [[ と同様に、 ワード ]] と対をなし、 複数の子スレッドを生成する並列処理ブロックを構成します。 生成するスレッドの数もワード [[ と 同様です。

ワード [[ と異なる点は、 TOS に積まれたチャネルを生成する各スレッドのデフォルトの 入力チャネルとする点です。

使用例 次の例ではスレッド 1 から送られてくる値を、 生成した複数の子スレッドで受け取り 100 倍して、 スレッドの ID と共に表示しています:
> reset-pipes
  ok.
> [ 1 10 for+ i >pipe next /* thread 1 */ ]>>
  ok.
> >>[[ ( "id=%d data=%d\n" ) thread-idx @append
>>     pipe> 100 * @append printf /* thread 2 */ ]]
  ok.
> id=2 data=300
id=3 data=400
id=4 data=500
id=1 data=100
id=0 data=200
id=5 data=600
id=6 data=700
id=7 data=800

  ok.
>
エラー エラーは発生しません。

>>[[->

実行レベル 即時実行レベル 1
スタックの変化 コンパイル時
RS: --- ν θ
SS: --- κ
コンパイルにより生成されたコードの実行時
親スレッド: X ---
子スレッド: --- X
機能 ワード [[-> と同様に ワード ]] と対を成し、 並列処理ブロックを構成します。 ワード [[-> と動作は殆ど同じですが、 本ワードで定義される並列処理ブロックの デフォルトの入力用パイプが親スレッドのスタックの TOS にある 出力用チャネルと接続される点が異なります。

各子スレッドのスタックに積まれる値は、 親スレッドのセカンドのものが用いられます。

使用例 サンプルプログラムはありません。
エラー コンパイル時にはエラーは発生しませんが、 生成されたコードの実行時には、 親スレッドのスタック上に 2 つの値が存在しなかったり、 TOS がチャネルでない場合はエラーとなります。

>address

実行レベル 標準実行レベル
スタックの変化 K --- α
機能 int または long もしくは BigInt 型をアドレス値に変換します。 BigInt 型の場合は、その値が long の最大値以下である場合に限り、 アドレス値へと変換します。
使用例 使用例はありません。
エラー スタックが空であったり、TOS が整数値でない場合や、 BigInt 型でその値が long の最大値よりも大きかった場合などは エラーとなります。

>array

実行レベル 標準実行レベル
スタックの変化 S --- A
機能 TOS にある文字列を取り出し、 ホワイトスペース(空白、タブ、改行文字)で分割します。 これら、分割された文字列から成る配列を生成し、 スタックに積みます。

ホワイトスペースのみからなる文字列に本ワードを適用すると、 要素数 0 の配列をスタックに積みます。 また、ホワイトスペースを含まない文字列に本ワードを的湯すると、 当該文字列のみを含む要素数 1 の配列をスタックに積みます。

使用例 次の例では、 "  HALITO   MAHALITO LAHALITO  " という文字列から、 "HALITO", "MAHALITO", "LAHALITO" という 3 つの文字列から構成される 配列を生成しています。
> "  HALITO   MAHALITO LAHALITO  " >array .
 array:(size=3 data=0x7fa236e16d98)
[0]=HALITO
[1]=MAHALITO
[2]=LAHALITO
 ok.
なお、上に表示されている 16 進数は実行される環境により変化します。
エラー TOS に文字列が無い場合はエラーとなります。

>assoc

実行レベル 標準実行レベル
スタックの変化 --- Z
機能 TOS に格納されている全てタプルからなるリスト(タブルリストと呼ぶ)を取り出し、 連想配列に変換しスタックに積みます。 タブルリストの要素を ( K V ) とするとき、インデックス K に対し、V なる値を 持つものとします。 詳細は使用例を見て下さい。
使用例 次の例では、タプルリストを連想配列に変換し、 その内容を表示しています:
> ( ( long-range-zapper 10 )
>>  ( octpus ( 70 100 ) )
>>  ( spinner 150 )
>> ) >assoc dump
assoc(
	key=spinner, value=150
	key=octpus, value=( 70 100 )
	key=long-range-zapper, value=10
)
 ok.
エラー TOS がタプルリストでない場合はエラーとなります。

>big-int

実行レベル 標準実行レベル
スタックの変化
N --- J
または
S --- J
機能 TOS にある文字列もしくは整数値を取り出し、 多倍長整数(big-int)に変換してスタックに積みます。
使用例 次の例では、10 番目のメルセンヌ素数 (=pow(2,89)-1) を計算しています。
> 2 >big-int 89 pow 1- .
  618970019642690137449562111 ok.
エラー スタックが空であったり、 TOS が予期しない値である場合はエラーとなります。

>bool

実行レベル 標準実行レベル
スタックの変化 { N | B | S | α | η } --- B
機能 TOS から値を取り出し、その値を真偽型に変換し スタックに積みます。 TOS に格納されている値が真偽型の場合、スタックは何も変換しません。

数値型の場合は 0 は false に変換され、それ以外は true に変換されます。 この場合は 0 != と同値です。 アドレス型の場合も同様です (アドレス型の場合は >int 0 != と同値となります)。

文字列の場合は、空の文字列の場合は false に変換され、 それ以外は true に変換されます。 この場合は "" != と同値です。

無効な値(invalid 型)は常に false に変換されます。 それ以外の値の場合は、真偽型に変換できないとし、エラーとなります。

使用例 次の例では、1 という値を true に変換しています。
> 1 >bool .
  true ok.
エラー TOS が空であったり、 TOS の値が本ワードに対応している型でなかった場合はエラーとなります。

>double

実行レベル 標準実行レベル
スタックの変化 { N | S } --- D
機能 TOS にある数値または数値を表した文字列を double 型の値に変換します。
使用例 次の例では、整数 123 を double 型に変換する様子を示しています。
> 123 >double type-name .
  double ok.
エラー スタックが空であったり、 TOS が想定されている値でなかったりした場合はエラーとなります。 また、double 型に収まり切らない値を変換しようとした場合も エラーとなります。

>double

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS にある値を取り出し、その値が double 型に変換可能であれば true を、 さもなければ false をスタックに積みます。
使用例 次の例では、整数 123 が double 型に変換可能であることを確認しています。
> 123 >double? .
  true ok.
エラー スタックが空の場合はエラーとなります。

>file

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS にある値を取り出し、 スタックの 2 番目にあるファイルオブジェクトに文字列として出力します。
使用例 ワード open の例を参照して下さい。
エラー スタックに 2 つ以上値が存在しなかったり、 スタックの上から 2 番目のデータがファイルオブジェクトで なかったりした場合はエラーとなります。

>float

実行レベル 標準実行レベル
スタックの変化 { N | S | α } --- F
機能 TOS にある数値もしくは文字列またはアドレス値を float 型の値に変換します。
使用例 次の例では、整数 123 を float 型に変換する様子を示しています。
> 123 >float type-name .
  float ok.
エラー スタックが空であったり、 TOS が数値でなかったりや数値に変換できな文字列の場合はエラーとなります。 また、float 型に収まり切らない値を変換しようとした場合も エラーとなります。

>float?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が float に変換できるか否かを調べます。 TOS に格納されている値が数値であっても、 その値の大きさが float で表現できる範囲に収まらなければ false を スタックに積みます。 float の範囲で表現できる値であれば true を積みます。

bool 値は >float で float の値に変換 できないため、本ワードでも false をスタックに積みます。

使用例 使用例はありません。
エラー スタックが空の場合、エラーとなります。

>here

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS にある値をシンボルとしてコンパイルします。
使用例

次の例では、1 から 9 までの値より構成されるリストを 手続きにより定義しています。

> ( {{ 1 10 for+ i >here next }} ) .
  ( 1 2 3 4 5 6 7 8 9 ) ok.

備考:実は上のサンプルコードは、 ワード }}, を使うと、 本ワード >here を用いずとも実現できます。 詳細はワード }}, の サンプルコードを見て下さい。

エラー スタックが空である場合はエラーとなります。

>hex

実行レベル 標準実行レベル
スタックの変化
K --- S
機能 TOS にある整数値を取り出し、16 進の文字列としてプッシュします。
使用例 次の例では、10 進の整数値 65535 を 16 進数の文字列 FFFF に 変換して表示しています。
> 65535 >hex .
  FFFF ok.
エラー スタックが空であったり、 TOS が整数でない場合はエラーとなります。

>int

実行レベル 標準実行レベル
スタックの変化 { N | S | α } --- I
機能 TOS に積まれている数値もしくはアドレスを int 型へと変換します。

参考:文字列を数値へ変換する場合、 eval も利用できます。
使用例 次の例では、1.2 を整数に変換し、その値(=1)を表示しています。
> 1.2 >int .
  1 ok.
エラー TOS が数値でない場合や、 int に収まらない値の場合はエラーとなります。

>int?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が int に変換できるか否かを調べます。 TOS に格納されている値が数値であっても、 その値の大きさが int で表現できる範囲に収まらなければ false を スタックに積みます。 int の範囲で表現できる値であれば true を積みます。

bool 値は >int で int の値に変換 できないため、本ワードでも false をスタックに積みます。

使用例 次の例では、8 番目のメルセンヌ素数 2147483647 が int に変換できることを確認しています。

> 2LL 31 pow 1 - >int? .
  true ok.
エラー スタックが空の場合、エラーとなります。

>list

実行レベル 標準実行レベル
スタックの変化 X ---
機能

TOS にある値を取り出し、リストに変換した後スタックに積みます。 配列など集合型の値場合は、それらの要素からなるリストに変換します。 int など集合型でない値の場合は、その値ひとつからなるリストに変換します (非集合型の値の場合はワード en-list と同様の処理となります)。

集合型に対する挙動は en-list とは異なります。 例えば、TOS に要素数 3 の配列が格納されている場合、 en-list では、その配列そのものを要素にもつリストが生成されます。 この場合、生成されたリストの要素数は 1 です。 一方、本ワードで生成されるリストの要素数は 3 となります。

配列に対して本ワードを使用すると、 配列の 0 番目から順次左詰めのリストが生成されます。 連想配列に対してはキーと値の組からなるリストが生成されます。 この場合、リストの要素としてどのような順序となるかは未定義です。 リストに対しては、変換前と同じリストが生成されてスタックに積まれます。

使用例 次の例では、>array にて 配列に変換したリストを、 本ワードを用いてリストに戻しています (リストに対する >array の逆演算としての 本ワード):

> ( ADO CAP LUTE ZAKO ) >array >list .cr
  ( ADO CAP LUTE ZAKO ) ok.
エラー スタックが空の場合はエラーとなります。

>lit

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS にある値をリテラル(値としてコンパイルされたもの)にします。
使用例 ワード }} の例をみて下さい。
エラー スタックが空の場合はエラーとなります。

>long

実行レベル 標準実行レベル
スタックの変化 { N | S | α } --- L
機能 TOS に積まれている数値を long (長製数)へと変換します。
使用例 次の例は、int 型の値 123 を long 型に変換している様子を示しています。
> 123 >long type-name .
  long ok.
エラー TOS が数値でない場合や、 long に収まらない値の場合はエラーとなります。

>long?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS に積まれている値を取り出し、 その値が long (長製数)へと変換できるなら true を、 さもなければ false をスタックに積みます。
使用例 次の例は、int 型の値 123 が long 型に変換可能である事を示しています。

> 123 >long? .
  true ok.
エラー スタックが空の場合はエラーとなります。

>lower

実行レベル 標準実行レベル
スタックの変化 S --- S
機能 TOS にある文字列中の半角英字を小文字に変換します。
使用例 次の例では、"HELLO WORLD" を小文字に変換しています。
> "HELLO WORLD" >lower .
  hello world ok.
エラー スタックが空であったり、TOS が文字列でなかったりした場合はエラーとなります。

>mock-stdin

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS にある文字列を擬似標準入力(mock-stdin)に追加します。 疑似標準入力に追加された文字列は、 疑似標準入力モードにおいて、 疑似標準入力モードに対応した入力用ワードにて、追加した順序で取り出されます。

擬似標準入力は標準入力からの入力を伴う単体テストのために用意されています。 このワードを実行すると、擬似標準入力モードに切り替わります。 通常の標準入力モードに戻すには、 ワード use-stdin を実行して下さい。

使用例 次の例では、擬似標準入力に対応した get-line を用いて、 mock-stdin が正しく動作している様子を確認しています。
> "hello" >mock-stdin
  ok.
> get-line .
  hello ok.
エラー TOS が文字列でないとエラーとなります。

>param

実行レベル 即時実行レベル 1
スタックの変化 ---
機能

ワードでの仮引数実現をするワードです。 コンパイルモードにて使用し、 本ワードの直前に記述されたリストにて 仮引数を宣言します。

ワード local と異なるのは、 オプショナルな局所変数や、スタック上のすべての値を取り込むことができる点です。 詳細については以下の説明をみて下さい。

本ワードは仮引数の宣言のみならず、 実行時に TOS にあるリストを取り出し、 仮引数の初期値とする処理も生成します。

仮引数の宣言に使用するリストには、 使用する変数を記述します。 以下の例では、x と y および z という局所変数を宣言しています:

( x y z ) >param

変数名を括弧で囲む場合は、 オプションとしての変数(オプション変数)の宣言となります。 オプションでない場合は、対応する値が存在しないときはエラーとなりますが、 オプション変数では無効な値として初期化されます (実行時エラーにはなりません)。 括弧と変数名の間には空白を入れないで下さい(リストになってしまうためです)。 以下の例では、 x および y に相当する値は必須ですが、 変数 z はオプション変数となります:

( x y (z) ) >param

オプション変数を指定すると、それ以降はオプション変数もしくは 後述する余剰情報変数のみを指定可能です:

( x y (z) (w) ) >param    // OK
( x y (z) w ) >param      // NG

変数名として ... を指定すると、 仮引数よりも多くの実引数を与えられた時、 余剰の情報を ... にて受け取れます。 例えば、

( x y (z) ... ) >param 

として、実引数 ( 10 20 30 40 50 ) を与えた場合、 (x,y,z)=(10,20,30) となり、... には ( 40 50 ) というリストが 代入されます。

この ... ですが、同名のワード ... にて その値を取得できます。 ここで注意が必要なのですが、例えば局所変数 x の値を取得する場合、 ワード , (カンマ)を用いて、

`x ,

としますが、... の場合は , (カンマ)は必要ありません。 そもそも ... はワードですので、ワード ... の実行により局所変数 ... に格納されている余剰情報をスタックに積みます。

仮引数を指定するリストにおいて、 ... 以降に変数やオプション変数の記述はできません。 ... は最後に一つだけ指定できます (余剰情報を活用する必要がなければ、... を記述する必要はありません)。

使用例 次の例では、仮引数と余剰情報を表示しています:
`test : ( x y (z) ... ) >param
    "x=" . `x , .cr
    "y=" . `y , .cr
    "z=" . `z , .cr
    "...=" . ... .cr
;

> ( 10 20 30 40 apple banana cherry ) test
 x= 10
 y= 20
 z= 30
 ...= ( 40 apple banana cherry )
 ok.
エラー 仮引数として宣言するためのリストの記述方法に誤りがある場合は エラーとなります。 また、本ワードを用いて仮引数を利用するワードの実行時においては、 実引数の数が仮引数よりも少ない場合(オプション変数を除く)は、 エラーとなります。

>pipe

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS を現在デフォルトとなっているパイプ(通信用チャネル) に送ります。 送信された値は、パイプを読み出す(ワード pipe>)ことにより、 受信できます。
使用例 ワード [[ の例を参照して下さい。
エラー スタックが空であったり、 パイプが既に閉じられていた場合はエラーとなります。

>r

実行レベル 標準実行レベル
スタックの変化
X ---
RS: --- X
機能 TOS を取り出してリターンスタックにプッシュします。
使用例 次の例では、文字列 "TILTOWAIT" をリターンスタックにプッシュしています。
> "TILTOWAIT" >r show-rs
      +-----------+
TOS-->| TILTOWAIT |
RS:-------------------
 ok.
エラー スタックが空の場合はエラーとなります。

}},

実行レベル 即時実行レベル 2
スタックの変化 RS: I ω θ ---
機能 ワード {{ と対を無し、 即時実行される無名ワードを構成します。 本ワードにより定義された無名ワードは即時に実行され、 かつ、ワード {{ 実行時に 保存されたデータスタックの深さを読み出し、 それよりも増えている分について以下の処理を行います。 対をなすワード {{ の実行直前の モードが、
インタプリタモードの場合
なにもしません。 本ワードの実行により、 実行された無名ワードによりデータスタックに積まれた値は そのままデータスタックに残ります。

コンパイルモードの場合
増加したデータスタック上の値は、 リテラルとしてコンパイルされます。 データスタックの深さにより、増加した値として認識されるので、 例えば、drop して、 2 つの値をプッシュした場合は最後の値のみがリテラル化されます。

シンボルモードの場合
リテラルとしてコンパイルされずにシンボルとしてコンパイルされる以外は、 コンパイルモードのときと同様です。
使用例

次の例では、1 から 10 までの値より構成されるリストを 手続きにより定義しています。

> ( {{ 1 10 for+ i next }}, ) .
  ( 1 2 3 4 5 6 7 8 9 10 ) ok.
エラー リターンスタックのデータが予期せぬ値となっている場合はエラーとなります。

@!=

実行レベル 標準実行レベル
スタックの変化 N N --- N N B
機能 セカンドと TOS に格納されている数値を参照し(=取り出さず)、 それら 2 数が等しくないことを確認します。
使用例
> 2 1 @!= show
      +-----------+
TOS-->| bool true |
      |   int 1   |
      |   int 2   |
DS:-------------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@&

実行レベル 標準実行レベル
スタックの変化 K K --- K K K
機能 セカンドと TOS に格納されている整数値を参照し(=取り出さず)、 それら 2 数のビットごとの論理積を計算しプッシュします。
使用例
> 2 15 @& show
      +--------+
TOS-->| int 2  |
      | int 15 |
      | int 2  |
DS:----------------
  ok.
エラー スタック上に 2 つの整数値が存在しない場合はエラーとなります。

@*

実行レベル 標準実行レベル
スタックの変化 N N --- N N N
機能 セカンドと TOS に格納されている数値を参照し(=取り出さず)、 それら 2 数の積を計算しプッシュします。
使用例
> 2 15 @* show
      +--------+
TOS-->| int 30 |
      | int 15 |
      | int 2  |
DS:----------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@+

セカンドと TOS を参照し(取り出さずに)、その和をプッシュします。
実行レベル 標準実行レベル
スタックの変化 N N --- N N N
機能
使用例
> 10 20 @+ show
      +--------+
TOS-->| int 30 |
      | int 20 |
      | int 10 |
DS:----------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@-

セカンドと TOS を参照し(取り出さずに)、その差をプッシュします。
実行レベル 標準実行レベル
スタックの変化 N N --- N N N
機能
使用例
> 30 20 @- show
      +--------+
TOS-->| int 10 |
      | int 20 |
      | int 30 |
DS:----------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@. (← @ドット)

実行レベル 標準実行レベル
スタックの変化 X --- X
このワードの実行によりスタックは変化しません。
機能 TOS のデータを標準出力または擬似標準出力へ出力します。 TOS のデータは参照するのみであり、取り出すことはしません。
使用例 次の例では、2+3 を計算し、その結果である数値 5 を出力しています。
> depth
  0 ok. ← スタックは空です
> 2 3 + @.
  5 ok. ← TOS の値を表示するも、取り出しは行いません
> depth
  1 ok. ← スタックにはデータ(整数値 5)が残っています

同様のワードとして TOS を消費し表示を行う . (ドット)というワードもあります。

エラー スタックが空の場合はエラーとなります。

@⁄

実行レベル 標準実行レベル
スタックの変化 N N --- N N N
機能 セカンドと TOS を参照し(取り出さずに)、その商をプッシュします。
使用例
> 30 10 @⁄ show
      +--------+
TOS-->| int 3  |
      | int 10 |
      | int 30 |
DS:----------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@<

実行レベル 標準実行レベル
スタックの変化 N N --- N N B
機能 セカンドと TOS を参照し(取り出さずに)、 セカンドの方が真に小さいか否かを調べます。
使用例
> 30 10 @< show
      +------------+
TOS-->| bool false |
      |   int 10   |
      |   int 30   |
DS:--------------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@<<

実行レベル 標準実行レベル
スタックの変化 K K --- K K K
機能 Second と TOS を参照し(取り出さずに)、 Second の値を TOS 分だけビット単位で左シフトします。 計算時には、Second と TOS のうち、情報量が大きい方へと整えられます。 例えば int と long 型で計算を行った場合、 計算結果は long となります。
使用例 次の例では、0x1234 を左に 4 ビットシフトして、 その値を 16 進数に変換しています。
> 0x1234 4 @<< to-hex-str show
      +--------------+
TOS-->| string 12340 |
      |    int 4     |
      |   int 4660   |
DS:----------------------
ok.
エラー TOS と Second が整数型でない場合はエラーとなります。

@<=

実行レベル 標準実行レベル
スタックの変化 N N --- N N B
機能 セカンドと TOS を参照し(取り出さずに)、 セカンドの値が TOS の値以下であるか否かを調べます。
使用例
> 30 10 @<= show
      +------------+
TOS-->| bool false |
      |   int 10   |
      |   int 30   |
DS:--------------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@==

実行レベル 標準実行レベル
スタックの変化 N N --- N N B
機能 セカンドと TOS に格納されている数値を参照し(=取り出さず)、 それら 2 数が等しいことを確認します。
使用例
> 2 1 @== show
      +------------+
TOS-->| bool false |
      |   int 1    |
      |   int 2    |
DS:--------------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@>

実行レベル 標準実行レベル
スタックの変化 N N --- N N B
機能 セカンドと TOS を参照し(取り出さずに)、 セカンドの値が TOS の値より大きいか否かを調べます。
使用例
> 30 10 @> show
      +-----------+
TOS-->| bool true |
      |  int 10   |
      |  int 30   |
DS:-------------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@>>

実行レベル 標準実行レベル
スタックの変化 K K --- K K K
機能 Second と TOS の値を参照し(取り出さずに)、 Second の値を TOS 分だけビット単位で右シフトします。 計算時には、Second と TOS のうち、情報量が大きい方へと整えられます。 例えば int と long 型で計算を行った場合、 計算結果は long となります。
使用例 次の例では、0x1234 を右に 4 ビットシフトして、 その値を 16 進数にて表示しています。
> 0x1234 4 @>> to-hex-str show
      +------------+
TOS-->| string 123 |
      |   int 4    |
      |  int 4660  |
DS:--------------------
  ok.
エラー TOS と Second が整数型でない場合はエラーとなります。

@>=

実行レベル 標準実行レベル
スタックの変化 N N --- N N B
機能 セカンドと TOS を参照し(取り出さずに)、 セカンドの値が TOS の値以上であるかを調べます。
使用例
> 30 10 @>= show
      +-----------+
TOS-->| bool true |
      |  int 10   |
      |  int 30   |
DS:-------------------
  ok.
エラー スタック上に 2 つの数値が存在しない場合はエラーとなります。

@>r

実行レベル 標準実行レベル
スタックの変化
X --- X
RS: --- X
※ データスタックは変化しません。
機能 TOS をリターンスタックにプッシュします。 (データ)スタック上の TOS は取り出されません(参照するだけです)。
使用例 サンプルコードはありません。
エラー スタックが空の場合はエラーとなります。

@^

実行レベル 標準実行レベル
スタックの変化 K K --- K K K
機能 セカンドと TOS に格納されている整数値を参照し(=取り出さず)、 それら 2 数のビットごとの排他的論理和を計算しプッシュします。
使用例
> 5 70 @^ show
      +-------+
TOS-->| int 2 |
      | int 7 |
      | int 5 |
DS:---------------
  ok.
エラー スタック上に 2 つの整数値が存在しない場合はエラーとなります。

@|

実行レベル 標準実行レベル
スタックの変化 K K --- K K K
機能 セカンドと TOS に格納されている整数値を参照し(=取り出さず)、 それら 2 数のビットごとの論理和を計算しプッシュします。
使用例
> 3 10 @| show
      +--------+
TOS-->| int 11 |
      | int 10 |
      | int 3  |
DS:----------------
  ok.
エラー スタック上に 2 つの整数値が存在しない場合はエラーとなります。

@append

実行レベル 標準実行レベル
スタックの変化 X ---
機能 リストの末尾に TOS の値を追加します。
使用例 次の例では、( 10 20 ) というリストに 30 という値を最後に追加し、 ( 10 20 30 ) というリストを構築しています。
> ( 10 20 ) 30 append
  ok.
> . ← リストを表示してみる
  ( 10 20 30 ) ok.
エラー スタックの要素が 2 個以上なかったり、 また上から 2 番目の要素がリストでない場合などはエラーとなります。

@array?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 TOS に格納されている値を参照し、その値が配列である場合には true を さもなければ false をスタックに積みます。 array? の参照版です。
使用例 使用例はありません。
エラー スタックが空の場合はエラーとなります。

@assoc?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 TOS に格納されている値を参照し、その値が連想配列である場合には true を さもなければ false をスタックに積みます。 assoc? の参照版です。
使用例 使用例はありません。
エラー スタックが空の場合はエラーとなります。

@car

実行レベル 標準実行レベル
スタックの変化 --- X
機能 TOS にあるリストの先頭要素を取り出し、スタックに積みます。 対象のリストはスタックから取り除かれません。 ワード @pop-front とは異なり、 実行直前に TOS にあったリストの先頭要素は、 そのリストから取り除かれません。
使用例 次の例では、リスト ( 10 20 30 ) から、先頭の要素 10 を得ます。
> ( 10 20 30 ) @car
  ok.
> .
  10 ok. ← 先頭の要素が得られていることが分かる
> .
  ( 10 20 30 ) ok.
↑ 対象のリストから先頭の要素は取り除かれていません
エラー スタックが空の場合はエラーとなります。 また、リストが空のリストの場合もエラーとなります。

ccc-str

実行レベル 標準実行レベル
スタックの変化 --- S
機能 文字コード変換モード(ccc mode=Character Code Conversion mode)を 表す文字列をスタックに積みます。 ccc が無変換(=thru)のときは THRU を、 UTF8 から SJIS へ変換する場合は utf8>sjis を、 逆に SJIS から UTF8 へ変換する場合は sjis>utf8 なる文字列を スタックに積みます。
使用例 サンプルコードはありません。
エラー エラーは発生しません。

@cdr

実行レベル 標準実行レベル
スタックの変化 ---
機能 TOS にあるリストの cdr 部をスタックに積みます。 ワードの実行直前に TOS にあったリストは変化しません。
使用例 次の例では、cdr 部を取り出し表示します。
> ( apple banana cherry ) cdr .
  ( banana cherry )ok.
> . ← 元のリストを確認しても…
↓ 変化していないことが確認できる
  ( apple banana cherry ) ok.
エラー TOS がリストでない場合はエラーとなります。 また、リストが空のリストの場合もエラーとなります。

@eof?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 TOS の値を参照し、その値が EOF かどうかを調べます。 EOF であったならば true を、 さもなければ false をスタックに積みます。
使用例 サンプルコードはありません。
エラー スタックが空のときはエラーとなります。

@even?

実行レベル 標準実行レベル
スタックの変化 K --- K B
機能 TOS にある整数を参照し、 その整数が偶数であるか否かを調べます。 偶数である場合は true を、さもなければ false を スタックに積みます。
使用例 サンプルコードはありません。
エラー TOS に整数(int, long, big-int )が積まれていない場合は エラーとなります。

@end-with?

実行レベル 標準実行レベル
スタックの変化 S1 S2 --- S1 B
機能

文字列 S1 が文字列 S2 で終わっているか否かを調べます。 S2 で終わっている場合は true を、 そうでない場合は false をスタックに積みます。

他の参照型と異なり、TOS を消費するので注意して下さい。 セカンドは保存されます。

使用例 次の例では、スタックにある文字列 "sample.p8e" が ".p8e" で始まっているか否かを調べています。
> "sample.p8e" ".p8e" end-with? .
  true ok.
エラー スタックが空であったり、 スタック上部に 2 つの文字列が存在しない場合は エラーとなります。

@expand

実行レベル 標準実行レベル
スタックの変化 { | A } --- { | A } X1 X2Xn
機能 TOS にあるリストまたは配列を参照し、 それらに含まれる要素をそれぞれ取り出し、 先頭の要素またはインデックス値の小さい順にスタックに積んでいきます。
使用例 次の例では、( 10 20 30 ) というリストを分解し、 10 20 30 という値が順次スタックに積まれていることを確認しています。
> ( 10 20 30 ) @expand
      +-------------------+
TOS-->|      int 30       |
      |      int 20       |
      |      int 10       |
      | list ( 10 20 30 ) |
DS:---------------------------
  ok.
エラー TOS がリストまたは配列でない場合はエラーとなります。

@fgets

実行レベル 標準実行レベル
スタックの変化 --- S
機能 ワード fgets の参照版です。
使用例 次の例では、まず title.txt というファイルを新規作成し、 そのファイルに文字列を書き込みます。 次に、そのファイルを再度オープンし、 先程書き込んだ文字列を読み込んで表示します。

まずは書き込み:
> "title.txt" new-file
  ok.
> "cadet mitochondria\n" >file
  ok.
> "cadet microbe\n" >file
  ok.
> "cadet amoeba\n" >file
  ok.
> close
  ok.
つぎに読み込み:
> "title.txt" open to-read
  ok.
> fgets .
  cadet mitochondrila ok.
> fgets .
  cadet microbe ok.
> fgets .
  cadet amoeba ok.
> fgets .
  (invalid-value) ok.
エラー スタックが空であったり、 TOS がファイルオブジェクトでない場合はエラーとなります。

@get

実行レベル 標準実行レベル
スタックの変化
A I --- A X
または
I --- X
または
Z Xk --- Z Xv
機能

配列またはリストもしくは連想配列より値を読み出し、 スタックに積みます。

配列またはリストについては、指定したインデクス(I)に 対応する値(X)をスタックに積みます。 連想配列の場合はインデックスではなく、 キー(Xk) に紐付けられている値(Xv)を読み出し、スタックに積みます。

配列およびリストに対するインデックスは 0 オリジンです。 有効なインデックスの最小値は 0 であり、 最大値は配列もしくはリストの要素数-1 となります(C 言語と同じです)。

なお、配列に対してはスレッドセーフです。

使用例 次の例では、配列の 1 番目に格納されている "hello" という文字列を取り出し、表示します。
> 5 new-array   ← 要素数 5 の配列を作成して、
  ok.
↓ 1 番目の要素に"hello" という 文字列を代入します。
> 1 "hello" set  
  ok.
> 1 @get .  
  hello ok.
↑ 1 番目に格納されている値 ("hello")を get で取り出し、 . (ドット)で表示しています。
エラー スタックに積まれているデータの数が 2 未満であったり、 TOS が有効なインデックス値でなかったり、 スタックの上から 2 番目の値が配列・リスト・連想配列でない場合は エラーとなります。

@has-key?

実行レベル 標準実行レベル
スタックの変化 Z X --- Z X B
機能 セカンドにある連想配列に対して、 TOS の値をキーとして有していあるか否かを調べます。 セカンドおよび TOS の値は消費しません。
使用例 サンプルコードはありません。
エラー セカンドに連想配列が積まれていないと、エラーとなります。

@has?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 スタックより TOS およびセカンドを参照し、TOS にあるリスト中に、 セカンドの要素が含まれているか否かを調べます。 含まれている場合は true をプッシュします。
使用例 使用例はありません。 本ワードはワード has? のスタックを消費しない版ですので、 ワード has? の使用例を参考にして下さい。
エラー スタックに 2 つ以上の値が存在しなかったり、 TOS がリストでない場合はエラーとなります。

@in?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 スタックより TOS およびセカンドを参照し、 TOS にある値がセカンドにあるリスト中に含まれているか否かを調べます。 含まれている場合は true をプッシュします。
使用例 使用例はありません。 本ワードはワード in? のスタックを消費しない版ですので、 ワード in? の使用例を参考にして下さい。
エラー スタックに 2 つ以上の値が存在しなかったり、 セカンドがリストでない場合はエラーとなります。

@invalid?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 TOS にある値を参照し、その値が無効な値であるかどうかを調べます。 無効な値であれば true を、さもなければ false をスタックに積みます。 @valid? not と同値です。
使用例 サンプルコードはありません。
エラー スタックが空の場合はエラーとなります。

@join

実行レベル 標準実行レベル
スタックの変化 ---
ただし、TOS には以下の型の値が格納されていることを期待しています。
{ Q | A | | Z }
機能 TOS にあるコンテキストまたはコンテナを参照し、 それらの、または、それらに格納されているコンテキストで実行されている (全ての)スレッドの終了を待ちます。 ワード join の参照版です。
使用例 使用例はありません。
エラー TOS が想定されている型の値でなかったり、 コンテナにコンテキスト以外の値が格納されている場合はエラーとなります。

@last

実行レベル 標準実行レベル
スタックの変化
--- X
または
A --- A X
機能

TOS にある配列またはリストを参照し、 その最後もしくは末尾の要素をスタックに積みます。 対象となる配列やリストは変化しません。

使用例
> ( 11 22 33 ) @last show
      +-------------------+
TOS-->|      int 33       |
      | list ( 11 22 33 ) |
DS:---------------------------
  ok.
エラー TOS が配列やリストでない場合や、 対象の配列やリストが空であった場合はエラーとなります。

@list?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 TOS にある値を参照しリストか否かを調べます。 リストであれば true を、そうでなければ false をスタックに積みます。
使用例 次の例では、TOS にある値がリストか否かを調べています。
> ( apple banana cherry ) @list? .
  true ok.
エラー スタックが空の場合はエラーとなります。

@set

実行レベル 標準実行レベル
スタックの変化
A I X --- A
または
I X ---
または
Z X1 X2 --- Z
機能

配列またはリストもしくは連想配列に値を書き込みます。

配列およびリストについては、指定したインデクス(I)に TOS の値(X)を書き込みます。 連想配列の場合はインデックスではなく、 キー(X1) に対し値(X2)を紐付けます。

配列およびリストに対するインデックスは 0 オリジンです。 有効なインデックスの最小値は 0 であり、 最大値は配列もしくはリストの要素数-1 となります (C 言語と同じです)。

ワード名の戦闘に @ が付いていますが、 保存されるのはスタックの上から 3 つ目に格納されている、 配列・リスト・連想配列のみです。 インデックス(もしくはキー)および格納する値については、 スタックから取り除かれます。

なお、配列に対してはスレッドセーフです。

使用例 次の例では、配列の 0 番目に 123 という整数値を格納し、 1 番目に "hello" という文字列を格納しています。
> 5 new-array   ← 要素数 5 の配列を作成して、
  ok.
> 0 123 @set   ← 0 番目の要素に 123 を代入し、
  ok.
↓ 1 番目の要素に"hello" という 文字列を代入します。
> 1 "hello" @set  
  ok.
> .   ← 実際に配列を表示させて、確認してみると、
  array (size=5 data=0x7fc4e4d0d7b8) [0]= 123 [1]= hello [2]= (invalid-value) [3]= (invalid-value) [4]= (invalid-value)
  ok.
↑ となり、正しく値が格納されている様子が分かります。
エラー

スタックにデータが 3 つ以上存在しない場合や、 スタックの上から 3 番目に存在する値が配列・リスト・連想配列の いずれでもない場合はエラーとなります。

配列やリストに対する操作の場合、 スタックの上から 2 番目のデータが整数でない場合もエラーとなります。 2 番目のデータが整数であっても、 3 番目に格納されている配列やリストに対し、 その値が有効なインデックス値にならない場合もエラーとなります。

@set-attr

実行レベル 標準実行レベル
スタックの変化 W Xk Xv --- W
機能 ワード W に対し、キー Xk の値として Xv を登録します。 本ワードは set-attr の参照型となります。
使用例 使用例はありません。
エラー W, Xk, Xv がスタック上に適切に積まれていないと、エラーとなります。

@size

実行レベル 標準実行レベル
スタックの変化 TOS の値を参照し、その値のサイズをスタックに積みます。 各値のサイズについては、 ワード size の説明を見てください。
{ A | | S | σ } --- { A | | S | σ } I

※ ただし、実行後のセカンドの値は、 実行前の TOS と同一であるとします。
機能 TOS にある配列・リスト・文字列・シンボルのサイズ(または要素数)を スタックに積みます。
使用例 次の例では、要素数 5 の配列を作成し、 その配列のサイズを表示しています。
> 5 new-array   ← 要素数 5 の配列を作成
  ok.
> @size . ← TOS にある配列のサイズを取得し、 それを表示
  5 ok.   ← 要素数 5 と表示された。

次はリストの要素数を取得して表示します。 リストの要素は apple、banana というシンボル 2 つと、 シンボルと数値からなる ( cherry 100 ) というリスト 1 つなので、 計 3 つとなります。
> ( apple banana ( cherry 100 ) ) @size .
  3 ok.
エラー TOS が本ワードに対応している値でない場合はエラーとなります。

@sqrt

実行レベル 標準実行レベル
スタックの変化 N --- N E
機能 TOS を参照し、その値の平方根をスタックに積みます。
使用例 使用例はありません。
エラー TOS が数値でない場合はエラーとなります。

@start-with?

実行レベル 標準実行レベル
スタックの変化 S1 S2 --- S1 B
機能

文字列 S1 が文字列 S2 で始まっているか否かを調べます。 S2 で始まっている場合は true を、 そうでない場合は false をスタックに積みます。

ワード start-with?の参照型ですが、 参照するのはセカンドの値のみです。 TOS は消費するので注意して下さい。

使用例 次の例では、スタックにある文字列 "Medieval Madness" が "Med" で始まっているか否かを調べています。
> "Medieval Madness" "Med" start-with? .
  true ok.
エラー スタックが空であったり、 スタック上部に 2 つの文字列が存在しない場合は エラーとなります。

@type-name

実行レベル 標準実行レベル
スタックの変化 X --- X S
機能 TOS の型を文字列としてスタックに積みます。 ワード実行前の TOS はスタックから取り出されません (そのままスタックに残ります)。
使用例 次の例では、数値 1.23 の型を表示しています。
> 1.23 @type-name . .
  double 1.23000 ok.
エラー スタックが空の場合、エラーとなります。

@type>

実行レベル 標準実行レベル
スタックの変化 X --- X L
機能 TOS にある値を参照し、 その値の型情報を示す long 値を取り出します。
使用例 使用例はありません。
エラー スタックが空の場合はエラーとなります。

@valid-index?

実行レベル 標準実行レベル
スタックの変化
A I --- A I B
または、
I --- I B
機能 TOS の値が、スタックの 2 番目に格納されている 配列またはリストに対し、有効であるかどうかを調べ、スタックに積みます。 有効なインデックス値であれば true が積まれ、 無効なインデックス値であれば false が積まれます。 TOS に格納されているインデックス値は消費されません。
使用例 次の例では、要素数 5 の配列に対し、 3 が有効なインデックス値であることを確認し、 -1 が無効なインデックス値であることを確認します。
> 5 new-array   ← 要素数 5 の配列を作成し、
  ok.
↓ この配列に対し、 3 が有効なインデックス値であることを確認します。
> 3 @valid-index? .
  true ok.
↓ 同様に、-1 が無効なインデックス値であることを 確認します。
> drop ← まず、残っているインデックス値 3 を捨てます。
  ok.
↓ 次に、-1 が無効なインデックス値であることを確認します。
> -1 @valid-index? .
  false ok.
エラー スタックに格納されているデータ数が 2 未満であったり、 TOS が整数値でなかったり、 2 番目に格納されているデータが配列でなかった場合は エラーとなります。

@valid?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 TOS にある値を参照し、その値が有効な値であるかどうかを調べます。 有効な値であれば true を、さもなければ false をスタックに積みます。
使用例 サンプルコードはありません。
エラー スタックが空の場合はエラーとなります。

@word-name

実行レベル 標準実行レベル
スタックの変化 W --- W S
機能 TOS にあるワードポインタからワード名を取得しスタックに積みます。 TOS にあるワードへのポインタはそのままスタックに残ります。
使用例 次の例では、test というワードへのポインタから "user:test" という文字列を取得しています。
> `test : /* empty */ ;
  ok.
> "test" >word @word-name .
  'user:test' ok.
エラー TOS にワードポインタが無い場合はエラーとなります。

@word-short-name

実行レベル 標準実行レベル
スタックの変化 W --- W S
機能 TOS にあるワードポインタを参照し、 短縮ワード名を取得しスタックに積みます。 TOS にあるワードへのポインタはそのままスタックに残ります。
使用例 次の例では、test というワードへのポインタから "test" という文字列を取得しています。
> `test : /* empty */ ;
  ok.
> "test" >word @word-short-name .
  'test' ok.
エラー TOS にワードポインタが無い場合はエラーとなります。

@word?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 TOS に格納されている値を参照し、 その値がワードであるか否かを調べます。 ワードであった場合は true を、 そうでない場合は false をスタックに積みます。 本ワードは dup word? と同値です。
使用例 使用例はありません。
エラー スタックが空の場合はエラーとなります。

@~

実行レベル 標準実行レベル
スタックの変化 K --- K K
機能 TOS を取り出さずに参照し、そのビット単位での反転(not)を計算します。
使用例 次の例では、2 のビット単位での反転を計算しています。
> 2 @~ show
      +--------+
TOS-->| int -3 |
      | int 2  |
DS:----------------
  ok.
ちなみに、-3 の 16 進表現は、
> -3 to-hex-str .
  FFFFFFFD ok.
であり、2 をビット反転したものが -3 であることが分かります。
エラー TOS が整数型(int もしくは long)でない場合はエラーとなります。

@empty-list?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 TOS のリストを消費しない empty-list? です。
使用例
> clear ( 1 2 3 ) @empty-list? . .
  false ( 1 2 3 ) ok.
エラー スタックが空であったり、TOS がリストでない場合はエラーとなります。

@empty-str?

実行レベル 標準実行レベル
スタックの変化 S --- S B
機能 TOS にある文字列が空の文字列であれば true を、 そうでなければ false を積みます。 TOS にある文字列は取り出されません。
使用例 次の例では、空の文字列をスタックに積み、 本ワードにて空の文字列かどうかを調べています。
> "" @empty-str? .
  true ok.
エラー スタックが空であったり、TOS が文字列でない場合はエラーとなります。

@not-empty-list?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 TOS を消費しない not-empty-list? です。
使用例
> ( 1 2 3 ) @not-empty-list? . .
  true ( 1 2 3 ) ok.
エラー スタックが空であったり、TOS がリストでない場合はエラーとなります。

@not-empty-str?

実行レベル 標準実行レベル
スタックの変化 S --- S B
機能 TOS にある文字列が空の文字列でなければ true を、 さもなければ false をプッシュします。 調査対象の文字列はスタックからポップされません。
使用例 次の例では、TOS にある文字列 "abc" に対し、 空の文字列でであるか否かを確認しています。
> "abc" @not-empty-str? .
  true ok.
エラー スタックが空であったり、 TOS が文字列でない場合はエラーとなります。

@pop-front

実行レベル 標準実行レベル
スタックの変化 --- X
機能 TOS にあるリストの先頭要素を取り出し、スタックに積みます。 対象のリストはスタックから取り除かれませんが、 リストの先頭要素はリストから取り除かれます。
使用例 次の例では、リスト ( 10 20 30 ) から、 先頭の要素 10 を取り出します。
> ( 10 20 30 ) @pop-front
  ok.
> .
  10 ok. ← 先頭の要素が取り出されていることが分かる
> .
  ( 20 30 ) ok.
↑ 対象のリストから先頭の要素が取り除かれていることが分かる
エラー スタックが空の場合はエラーとなります。 また、リストが空のリストの場合もエラーとなります。

@r>

実行レベル 標準実行レベル
スタックの変化
RS: X --- X
DS: --- X
機能 リターンスタックの TOS をデータスタックにプッシュします。 リターンスタック上の TOS は取り出されません(参照するだけです)。
使用例 サンプルコードはありません。
エラー リターンスタックが空の場合はエラーとなります。

>string

実行レベル 標準実行レベル
スタックの変化 { B | N | S | σ } --- S
機能 TOS にある値を文字列に変換してプッシュします。
使用例 次の例では、123 という数値を文字列の "123" に変換しています。
> 123 >string show .
      +------------+
TOS-->| string 123 |
DS:--------------------
 ok.
エラー スタックが空である場合はエラーとなります。

>symbol

実行レベル 標準実行レベル
スタックの変化 { B | S | σ } --- σ
機能 TOS にある値をシンボルに変換してプッシュします。 ただし、変換後のシンボル名はアルファベットもしくはアンダーバーで 始まるものでなければなりません。
使用例 次の例では、"orange" という文字列をシンボルとしての orange に変換しています。
> "orange" >symbol show
      +---------------+
TOS-->| symbol orange |
DS:-----------------------
 ok.
エラー TOS が想定された値でない場合や このワードでシンボルに変換できない値の場合はエラーとなります。

>type

実行レベル 標準実行レベル
スタックの変化 X1 K --- X2
機能 TOS にある値を型情報とし、 セカンドの値に設定する(セカンドの値の型が変わる)。
使用例 次の例では、16.0f という浮動小数点値を ビットパターンそのままで整数値として解釈しなおしています。
> 16.0f int-type >type .
  1098907648 ok.
エラー スタックの深さが 2 以上でないとエラーとなります。 また、TOS の値が型情報として有効でない場合もエラーとなります。

>upper

実行レベル 標準実行レベル
スタックの変化 S --- S
機能 TOS にある文字列中の半角英数小文字を半角英数大文字に変換します。
使用例 次の例では、"hello 世界" という文字列に含まれている、 hello という文字列を大文字に変換しています。
> "hello 世界" >upper .
  HELLO 世界 ok.
エラー スタックが空であったり、TOS が文字列でない場合はエラーとなります。

>word

実行レベル 標準実行レベル
スタックの変化 S --- W
機能 TOS にある文字列を取り出し、 その文字列と同名のワードへのポインタをスタックにプッシュします。
使用例 次の例では、"+" という文字列を用いて数値の加算を行っています。
> 2 3 "+" >word exec .
  5 ok.
エラー スタックが空であったり、 TOS が文字列でなかったりした場合にはエラーとなります。 また、指定された文字列と同名のワードが存在しない場合にもエラーとなります。

>[

実行レベル 即時実行レベル 1
スタックの変化 RS: --- ν θ
SS: --- κ
機能 ワード [ と同様にスレッドを生成します。 子スレッドにおけるデフォルトの読み込み用チャネルは、 親スレッドのデフォルトの書き込み用チャネルと接続されます。
使用例 次の例では、グローバルコンテキストのデフォルトチャネルから 値を受け取り、その値を表示するスレッドを作成しています。
> reset-pipes
> >[ while-pipe "RECV=" . .cr repeat "QUIT" .cr ]
  ok.
> 1 5 for+ i >pipe next
  ok.
RECV= 1
RECV= 2
RECV= 3
RECV= 4
> eoc >pipe
QUIT
  ok.
エラー エラーは発生しません。

>[->

実行レベル 即時実行レベル 1
スタックの変化 コンパイル時
RS: --- ν θ
SS: --- κ
コンパイルにより生成されたコードの実行時
親スレッド: X ---
子スレッド: --- X
機能 ワード [-> と同様に ワード ] と対を成し、 並列処理ブロックを構成します。 ワード [-> と動作は殆ど同じですが、 本ワードで定義される並列処理ブロックの デフォルトの入力用パイプが親スレッドのデフォルトの 出力用チャネルと接続される点が異なります。
使用例 次の例では、親スレッドの TOS より HELLO という文字列を、 パイプから world という文字列を受け取って表示します。

> reset-pipes
  ok.
> "HELLO"
  ok.
> >[-> ( "tos=%1% from-pipe=%2%\n" )
>>     @push-back pipe> @append printf ]
  ok.
> 'world' >pipe
  ok.
> tos=HELLO from-pipe=world
  ok.
エラー コンパイル時にはエラーは発生しませんが、 生成されたコードの実行時には、 スタックが空であるとエラーとなります。

>[[->

実行レベル 即時実行レベル 1
スタックの変化 コンパイル時
RS: --- ν θ
SS: --- κ
コンパイルにより生成されたコードの実行時
親スレッド: X ---
子スレッド: --- X
機能 ワード [[-> と同様に ワード ]] と対を成し、 並列処理ブロックを構成します。 ワード [[-> と動作は殆ど同じですが、 本ワードで定義される並列処理ブロックの デフォルトの入力用パイプが親スレッドのデフォルトの 出力用チャネルと接続される点が異なります。
使用例 使用例はありません。
エラー コンパイル時にはエラーは発生しませんが、 生成されたコードの実行時には、 スタックが空であるとエラーとなります。

>[[=>

実行レベル 即時実行レベル 1
スタックの変化
コンパイル時
RS: --- ν θ
SS: --- κ
コンパイルにより生成されたコードの実行時
親スレッド: ---
子スレッド: --- Xi
注: i 番目のスレッドには ℒ の i 番目の要素が渡されます。
機能 ワード [[=> と同様に ワード ]] と対を成し、 並列処理ブロックを構成します。 ワード [[=> と異なるところは、 ワード ]] までに囲まれた並列処理 ブロックのデフォルトの入力チャネルが、 親スレッドのデフォルトの出力チャネルと繋がるところです。
使用例 使用例はありません。
エラー コンパイル時にはエラーは発生しませんが、 生成されたコードの実行時には、 TOS がリストでなかった場合はエラーとなります。

>[[

実行レベル 即時実行レベル 1
スタックの変化 RS: --- ν θ
SS: --- κ
機能 ワード [[ と同様に 複数のスレッドを生成します。 それぞれの子スレッドにおけるデフォルトの読み込み用チャネルは、 親スレッドのデフォルトの書き込み用チャネルと接続されます。
使用例 次の例では、グローバルコンテキストのデフォルトチャネルから 値を受け取り、その値を表示するスレッドを作成しています。

> reset-pipes
> >[[ ( "id=%d data=%d\n" thread-idx @append
>>    pipe> 100 * @append printf ]]
  ok.
> 1 9 for+ i >pipe next
  ok.
> id=0 data=100
id=2 data=300
id=1 data=200
id=3 data=400
id=5 data=500
id=4 data=600
id=6 data=700
id=7 data=800
  ok.

なお、上の出力例は CPU が 8 コアの環境で実行したものです。 各スレッドからの出力の順序は上記の例とは異なる場合があります。

エラー エラーは発生しません。

[

実行レベル 即時実行レベル 1
スタックの変化 RS: --- ν θ
SS: --- κ
機能 並列処理ブロックを開始します。

このワードは、ワード ] と対を成し、 並列処理ブロックを構成します。 ワード [ と ] にて定められた並列処理ブロックは、 新たにスレッドを 1 つだけ作成し、そのスレッドにて並列に実行されます。

使用例 次の例では、パイプから伝えられた数値を 10 倍し、 表示する並列処理ブロック(ワーカースレッド)を 1 つ作成します。 そして、ワード >pipe を用いて、そのワーカースレッドに値を渡し、 その値が 10 倍されて表示されることを確認します。 値 eoc (End Of Communication) をパイプに送り、通信用パイプを閉じます。 それによりワーカースレッドが、"TERMINATED" を出力し、終了します。
↓ データを受け渡すパイプを(念のため)初期化しておきます
> reset-pipes
  ok.
↓ 並列処理ブロックを作成し、起動
> [ "START" . cr while-pipe 10 * . cr repeat "TERMINATED" . cr ]
  ok.
>   START ←並列処理ブロックによる出力
←プロンプトを表示するために、とりあえずリターンキー押下
> 1 >pipe
  ok.
>   10 ←並列処理ブロックによる出力
←プロンプトを表示するために、とりあえずリターンキー押下
> eoc >pipe
  ok.
  TERMINATED
エラー エラーは発生しません。

[->

実行レベル 即時実行レベル 1
スタックの変化 コンパイル時
RS: --- ν θ
SS: --- κ
コンパイルにより生成されたコードの実行時
親スレッド: X ---
子スレッド: --- X
機能 ワード ] と対を成し、 並列処理ブロックを構成します。 ワード [ と動作は殆ど同じですが、 本ワード実行時に TOS にあるデータを、 子スレッドの実行 VM のスタックにプッシュする部分が異なります。 本ワードを用いることにより、 子スレッドのスタックをある値で初期化した状態で、 子スレッドを実行することが可能となります。
使用例 サンプルコードはありません。
エラー コンパイル時にはエラーは発生しませんが、 生成されたコードの実行時には、 スタックが空であるとエラーとなります。

[[

実行レベル 即時実行レベル 1
スタックの変化 RS: --- ν θ
機能 ワード [ の複数スレッド版です。 ワード ]] を対を成し、 複数のスレッドで実行される並列処理ブロックを構成します。 生成するスレッドの数は、実行している計算機に搭載されている CPU のコア数と同数となります。
使用例 次の例では、複数の並列処理ブロックで手分けをし、 1 から 10 万までの素数の個数(9,592 個)を数え、表示します。
ファイル countPrimeMT.p8e に以下の内容を記しておき、
--- ファイル countPrimeMT.p8e の内容:ここから ---
↓ TOS が素数か否かを調べるワード prime? を定義する
`prime? :
    true swap
    dup sqrt ceil >int 2 swap
    for+
        dup
        i % 0 == if
            swap drop false swap leave
        then
    next
    drop
;

reset-pipes

↓ ワーカースレッドにパラメータを渡す scatter を [ 〜 ] で作成し、実行しておく。
[ 1 100000 for+ i >pipe next ]

↓ ワーカースレッドでは、パイプからやってくる 整数に対し、素数かどうかを調査する。 素数であった場合は、数え上げ用の処理に パイプ経由でその数値を渡す。
[[
    while-pipe
        dup prime? if >pipe else drop then
    repeat
]]

↓ 数え上げ用の処理
/* count */
0 ← カウンタの初期化
while-pipe ← ワーカースレッドから素数を受け取って、
    drop 1+ ← カウント
repeat
. cr
--- ファイル countPrimeMT.p8e の内容:ここまで ---

インタプリタにて、以下のように入力し実行する。
> "countPrimeMT.p8e" load
  9592
  ok.
エラー エラーは発生しません。

[[->

実行レベル 即時実行レベル 1
スタックの変化
コンパイル時
RS: --- ν θ
コンパイルにより生成されたコードの実行時
親スレッド
X ---
子スレッド
--- X
機能 ワード ] と対を成し、 並列処理ブロックを構成します。 ワード [[ と動作は殆ど同じですが、 本ワード実行時に TOS にあるデータを、 すべての子スレッドの実行 VM のスタックにプッシュする部分が異なります。 本ワードを用いることにより、 子スレッドのスタックをある値で初期化した状態で、 子スレッドを実行することが可能となります。 本ワードは、ワード [-> の 複数スレッド起動版 (ワード [ に対する ワード [[)のようなものです。
使用例 サンプルコードはありません。
エラー コンパイル時にはエラーは発生しませんが、 生成されたコードの実行時には、 スタックが空であるとエラーとなります。

[[=>

実行レベル 即時実行レベル 1
スタックの変化
コンパイル時
RS: --- ν θ
SS: --- κ
コンパイルにより生成されたコードの実行時
親スレッド: ---
子スレッド: --- Xi
注: i 番目のスレッドには ℒ の i 番目の要素が渡されます。
機能 ワード ]] と対を成し、 並列処理ブロックを構成します。 ワード [[ と動作は殆ど同じですが、 本ワード実行時に TOS にあるリストの各要素を、 生成する子スレッドのスタックにプッシュする部分が異なります。

同様のワード [[-> では、 スタックの初期値として用いられる値は、親スレッドの TOS の値でした。 そのため、全ての子スレッドのスタックの初期値は全て同一でした。 しかし、本ワードでは、親スレッドの TOS にあるリストの要素が 生成されるスレッドのスタックに順次積まれますので、 各子スレッドのスタックの初期値はそれぞれ異なる状態となります。

本ワードを用いることにより、 子スレッドのスタックをそれぞれ異なる値で初期化し、 その状態で各子スレッドを開始できます。

使用例 次の例では、並列実行する数を 4 とし、 それぞれの子スレッドのスタックの初期値として、 1 〜 4 までの値を用いています。
> ( 1 2 3 4 )
  ok.
> [[=> "INITIAL-TOS is " . .cr ]]
  INITIAL-TOS is 1
  INITIAL-TOS is 2
  INITIAL-TOS is 3
  INITIAL-TOS is 4
  ok.
エラー コンパイル時にはエラーは発生しませんが、 生成されたコードの実行時には、 TOS がリストでなかった場合はエラーとなります。

]

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---
機能 ワード '[' と対を成し、並列処理ブロックを形成します。 この並列処理ブロックはスレッド数 1 で実行されます。
使用例 使用例はワード [ の例を参照して下さい。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]=

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
--- Q
機能 ワード ] と同様に、 ワード [ 等と 対を成し、並列処理ブロックを形成します。 ワード ] と異なる点は、 子スレッドのコンテキストを親スレッドのスタックに積むところです。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]=>

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
--- Q
機能 ワード ] と同様に、 ワード [ 等と 対を成し、並列処理ブロックを形成します。 ワード ] と異なる点は、 子スレッドのコンテキストを親スレッドのスタックに積む点です。 さらに本ワードでは、子スレッドの標準出力パイプを、 親スレッドの標準入力パイプに接続します。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]=>>

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
--- Q Y
機能 ワード ] と同様に、 ワード [ 等と 対を成し、並列処理ブロックを形成します。 ワード ] と異なる点は、 子スレッドのコンテキストならびに 子スレッドのデフォルト出力要パイプのチャネルを 親スレッドのスタックに積む点です。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]>

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
---
機能 ワード ] と同様に、 ワード [ 等と 対を成し、並列処理ブロックを形成します。 ワード ] と異なる点は、 生成した子スレッドのデフォルトの出力パイプは、 親スレッドのデフォルトの入力パイプに接続されるところです。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]>>

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
--- Y
機能 ワード ] と同様に、 ワード [ 等と 対を成し、並列処理ブロックを形成します。 ワード ] と異なる点は、 生成した子スレッドのデフォルトの出力パイプのチャネルを 親スレッドのスタックに積む点です。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]]

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---
機能 ワード '[[' と対を成し、並列処理ブロックを形成します。 この並列処理ブロックは、デフォルトでは搭載しているコア数と 同数のスレッド数で実行されます。
使用例 使用例はワード [[ の例を参照して下さい。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]]=

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
--- Q
機能 ワード ]] と同様に、 ワード '[[' と対を成し、並列処理ブロックを形成します。 ワード ]] と異なる点は、 子スレッドのコンテキストを親スレッドのスタックに積むところです。

この並列処理ブロックは、デフォルトでは搭載しているコア数と 同数のスレッド数で実行されます。

使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]]=>

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
--- Q
機能 ワード ]] と同様に、 ワード [[ 等と 対を成し、並列処理ブロックを形成します。 ワード ]] と異なる点は、 子スレッドのコンテキストを親スレッドのスタックに積む点です。 さらに本ワードでは、子スレッドの標準出力パイプを、 親スレッドの標準入力パイプに接続します。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]]=>>

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
--- Q Y
機能 ワード ]] と同様に、 ワード [[ 等と 対を成し、並列処理ブロックを形成します。 ワード ]] と異なる点は、 子スレッドのコンテキストならびに 子スレッドのデフォルト出力要パイプのチャネルを 親スレッドのスタックに積む点です。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]]>

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
---
機能 ワード ]] と同様に、 ワード [[ 等と 対を成し、並列処理ブロックを形成します。 ワード ]] と異なる点は、 生成した子スレッドのデフォルトの出力パイプは、 親スレッドのデフォルトの入力パイプに接続されるところです。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

]]>>

実行レベル 即時実行レベル 1
スタックの変化 RS: θ ν ---

実行時:
--- Y
機能 ワード ]] と同様に、 ワード [[ 等と 対を成し、並列処理ブロックを形成します。 ワード ]] と異なる点は、 生成した子スレッドのデフォルトの出力パイプのチャネルを 親スレッドのスタックに積む点です。
使用例 ありません。
エラー リターンスタック上に想定されたデータがプッシュされていない場合は エラーとなります。

^

実行レベル 標準実行レベル
スタックの変化 K K --- K
機能 Second と TOS のビット単位での排他的論理和(xor)を計算します。 計算時には、Second と TOS のうち、情報量が大きい方へと整えられます。 例えば int と long 型で計算を行った場合、 計算結果は long となります。
使用例 次の例では、0x123B の下位 4 ビットを全て反転させ、 16 進数にて表示しています。
> 0x123B 0x000F ^ to-hex-str .
  1234 ok.
エラー TOS と Second が整数型(int もしくは long)でない場合は エラーとなります。

{

実行レベル 即時実行レベル 2
スタックの変化 RS: --- ω θ
機能 ワード } と対を成し、 無名ワード(ラムダ)を定義します。 現在の実行モードをリターンスタック上に保存し、 コンパイルモードへと移行します。
使用例 ワード exec の使用例を参照して下さい。
エラー エラーは発生しません。

{{

実行レベル 即時実行レベル 2
スタックの変化 RS: --- I ω θ
機能

ワード }}}}, と対を成し、 無名ワード(ラムダ)を定義します。 現在の実行モード等をリターンスタック上に保存し、 コンパイルモードへと移行します。

{{ … }} で構成される無名ワードブロックは、 コンパイル中であっても即時に実行されます。 ワード >lit を用いることにより、 リスト内に配置された無名ワードブロックにて、 手続きによりリストを構築できます。

本ワードの実体は { と殆ど同じですが、 本ワード実行直前のデータスタックの位置を RS にキャプチャ (プッシュして保存)するところが異なります。 このキャプチャされたデータスタックの位置の利用方法については、 ワード }}, の説明をみて下さい。

使用例 ワード }} または }}, の使用例を見て下さい。
エラー エラーは発生しません。

|

実行レベル 標準実行レベル
スタックの変化 K K --- K
機能 Second と TOS のビット単位での論理和(or)を計算します。 計算時には、Second と TOS のうち、情報量が大きい方へと整えられます。 例えば int と long 型で計算を行った場合、 計算結果は long となります。
使用例 次の例では、0x1234 の下位 4 ビットを全て 1 にセットし、 16 進数にて表示しています。
> 0x1234 0x000F | to-hex-str .
  123F ok.
エラー TOS と Second が整数型(int もしくは long)でない場合は エラーとなります。

||

実行レベル 標準実行レベル
スタックの変化 B B --- B
機能 Second と TOS の論理和(or)を計算します。
使用例 次の例では、true と false の論理和を計算し、 その結果(true)を表示しています。
> true false || .
  true ok.
エラー TOS と Second が論理値でない場合はエラーとなります。

}

実行レベル 即時実行レベル 2
スタックの変化 RS: ω θ ---
機能 ワード { と対を成し、 無名ワード(ラムダ)を定義します。 実行モードはワード { の実行時のものに 復元されます。 本ワードにより生成された無名ワードの取り扱いは、 この復元された実行モードにより異なります。
インタプリタモードの場合:

生成された無名ワードは、スタックに積まれます。

上記以外の場合:
無名ワードが即時実行属性を持たない場合は、 リテラルとして生成された無名ワードをコンパイルします。 リスト中であればリストの要素として無名ワードが格納されます。

なお、本ワードはコメント中では何も処理を行いません。

使用例
その 1 - インタプリタモードでの使用

次のコードでは、"lambda\n" と表示する無名ワードをスタックに積み、 その積まれた無名ワードをワード exec により 実行しています。

> { "lambda\n" . } exec
  lambda
  ok.

その 2 - リスト中での使用

以下に示すコードではリスト中に無名ワード(ラムダ)を格納し、 それを利用しています。

> ( { "1st lambda" .cr } { "2nd lambda" .cr } )
  ok.
> car exec
  1st lambda
  ok.
エラー リターンスタック上にしかるべき情報が存在しなければエラーとなります。

}}

実行レベル 即時実行レベル 2
スタックの変化 RS: I ω θ ---
機能 ワード {{ と対を成し、 無名ワード(ラムダ)を定義します。 実行モードはワード {{ の実行時のものに 復元されます。

本ワードにより生成された無名ワードは コンパイル中であっても即時に実行されます。 ワード >here>lit と併用することにより、 プログラムにてワードやリストを定義することが可能となります。

使用例 次の例では、1 から 10 までの値をスタックに積むワードを、 プログラムにより生成します。
> `test : {{ 1 10 for+ i >lit next }} ;
  ok.
> test show
      +--------+
TOS-->| int 10 |
      | int 9  |
      | int 8  |
      | int 7  |
      | int 6  |
      | int 5  |
      | int 4  |
      | int 3  |
      | int 2  |
      | int 1  |
DS:----------------
  ok.
エラー リターンスタック上にしかるべき情報が存在しなければエラーとなります。
実行レベル 標準実行レベル
スタックの変化
S1 S2 --- S1 A
または
S1 S2 --- S1 η
機能

文字列 S1 を参照し、正規表現 S2 を用いて検索を行い、 適合する文字列からなる配列をスタックに積みます。 対応する文字列が存在しない場合は無効な値(η)を スタックに積みます。

適合する文字列が存在した場合、 配列の 0 番目にはパターンに適合する文字列の全体が 格納されます。 パターン中に少括弧 ( ... ) が存在する場合、 配列の 1 番目以降に順次それら部分的に適合する文字列が格納されます。 なお、配列の最後の要素は、 S1 における適合しなかった残りの文字列が格納されます。

使用例 次の例では、郵便番号であるか否かの確認をしています。
> "441-3124" '^\d{3}-\d{4}$' @search show
      +---------------------------------------+
TOS-->| array (size=1 data=0x7fd4a860c0a8)... |
      |            string 441-3124            |
DS:-----------------------------------------------
 ok.
エラー スタック上部に 2 つの文字列が存在しない場合はエラーとなります。

~

実行レベル 標準実行レベル
スタックの変化 K --- K
機能 TOS のビット単位での反転(not)を計算します。
使用例 次の例では、2 のビット単位での反転を計算しています。
> 2 ~ .
  -3 ok.
ちなみに、-3 の 16 進表現は、
> -3 to-hex-str .
  FFFFFFFD ok.
であり、2 をビット反転したものが -3 であることが分かります。
エラー TOS が整数型(int もしくは long)でない場合はエラーとなります。

_b

実行レベル 標準実行レベル
スタックの変化 { S | σ | W } ---
機能 ワード set-breakpoint の別名です。
使用例 ワード set-breakpoint の 使用例をご覧ください。
エラー TOS にワードもしくはワード名が設定されていないとエラーとなります。 また、指定されたワード名を持つワードが存在しない場合もエラーとなります。 本ワードをデバッガ上で実行しない場合もエラーとなります。

_c

実行レベル 標準実行レベル
スタックの変化 ---
機能 ワード cont の別名です。 詳細については cont をご覧ください。
使用例 使用例はありません。
エラー デバッガとの対話中でない場合、エラーとなります。

_b

実行レベル 標準実行レベル
スタックの変化
S ---
または
W ---
機能 ワード clear-breakpoint の別名です。
使用例 ワード clear-breakpoint の 使用例をご覧ください。
エラー TOS にワードもしくはワード名が設定されていないとエラーとなります。 また、指定されたワード名を持つワードが存在しない場合もエラーとなります。 本ワードをデバッガ上で実行しない場合もエラーとなります。

_n

実行レベル 標準実行レベル
スタックの変化 ---
機能 ワード step-over の別名です。
使用例 使用例はありません。
エラー 本ワードをデバッガ上で実行しない場合はエラーとなります。

_q

実行レベル 標準実行レベル
スタックの変化 ---
機能 ワード quit-debugger の別名です。
使用例 使用例はありません。
エラー 本ワードをデバッガ上で実行しない場合はエラーとなります。

_s

実行レベル 標準実行レベル
スタックの変化 ---
機能 ワード step-in の別名です。
使用例 使用例はありません。
エラー 本ワードをデバッガ上で実行しない場合はエラーとなります。

0?

実行レベル 標準実行レベル
スタックの変化 N --- B
機能 TOS が整数の 0 であるときには true をプッシュし、 そうでなければ false をプッシュする。
使用例 次の例では、TOS にある 0 を 0? で調査し、 その結果 true をスタックにプッシュしています。
> 0 0? .
  true ok.
エラー スタックが空である場合にはエラーとなります。

1+

実行レベル 標準実行レベル
スタックの変化 N --- N
機能 TOS に 1 を加えます。 1 + と同等です。
使用例 次の例では、本ワードにより値が 1 増えていることを確認します。
> 3.21 1+ .
  4.210000 ok.
エラー TOS が数値でない場合はエラーとなります。

1-

実行レベル 標準実行レベル
スタックの変化 N --- N
機能 TOS から 1 を引きます。 1 - と同等です。
使用例 次の例では、本ワードにより値が 1 減っていることを確認します。
> 3.21 1- .
  2.210000 ok.
エラー TOS が数値でない場合はエラーとなります。

2/

実行レベル 標準実行レベル
スタックの変化 N --- N
機能 TOS にある数値を 1/2 にします。
使用例 次の例では、1.0 を 2 で割った値を表示しています。
> 1.0 2/ .
  0.500000 ok.
エラー スタックが空であったり、 TOS が数値でない場合はエラーとなります。

2drop

実行レベル 標準実行レベル
スタックの変化 X X ---
機能 drop を 2 回繰り返します。 結果としては、TOS ならびにセカンドを捨てます。
使用例 次の例では、TOS とセカンドの値が捨てられている様子を示しています。
> 100 200 300 2drop show
      +---------+
TOS-->| int 100 |
DS:-----------------
 ok.
エラー スタックにデータが 2 つ以上存在しない場合はエラーとなります。

2drop-rs

実行レベル 標準実行レベル
スタックの変化 RS: X X ---
機能 ワード drop-rs を 2 度実行することと 同等の処理を行います。
使用例 使用例はありません。
エラー リターンスタックの深さが 2 未満の場合、 エラーとなります。

2dup

実行レベル 標準実行レベル
スタックの変化 a b --- a b a b
機能 スタックの上から 2 つの要素をまとめて複製します。
使用例 次のコードは、 本ワードを使用したときのスタックの様子を示しています。
> clear "DigDug" "MAPPY" 2dup show
      +---------------+
TOS-->| string MAPPY  |
      | string DigDug |
      | string MAPPY  |
      | string DigDug |
DS:-----------------------
 ok.
エラー

3drop

実行レベル 標準実行レベル
スタックの変化 X X X ---
機能 drop を 3 回繰り返します。 つまり、スタックの上から 3 つのデータは破棄されます。
使用例 次の例では、スタックの上から 3 つの値が捨てられている様子を示しています。
> 100 200 300 400 3drop show
      +---------+
TOS-->| int 100 |
DS:-----------------
 ok.
エラー スタックにデータが 3 つ以上存在しない場合はエラーとなります。

abs

実行レベル 標準実行レベル
スタックの変化 N --- N
実行後の TOS の型は、実行前の TOS と同じ数値型となります。
機能 スタックより値を一つ取り出し、 その値の絶対値をスタックにプッシュします
使用例 次の例では、-5 の絶対値を表示しています。
> -5 abs .
  5 ok.
エラー TOS が数値でない場合はエラーとなります。

acos

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 スタックより値を一つ取り出し、その値の逆余弦( acos )を計算します。 そして、計算結果をスタックにプッシュします (計算結果はラジアンとなります)。
使用例 次の例では、0.5 の逆余弦を計算し、 rad-to-deg ワードを用いて度に変換しています。
> 0.5 acos rad-to-deg .
  60.000000 ok.
エラー TOS が数値でない場合はエラーとなります。

alias

実行レベル 標準実行レベル
スタックの変化 { S1 | σ1 } { S2 | σ2 } ---
機能 ワード名 S1 をワード S2 の別名として定義します。
使用例 次の例では、my-dup というワードをワード dup の 別名として定義します。
> "my-dup" "dup" alias
  ok.
エラー スタック上に 2 つの文字列が存在しなかったり、 基となるワードが存在しなかった場合はエラーとなります。

and

実行レベル 標準実行レベル
スタックの変化 --- B
機能

TOS にあるラムダリスト (全ての要素が(無名)ワードから構成されているリスト)を 取り出し、格納されている(無名)ワードを順次実行していきます。 全ての(無名)ワードの実行結果が true であった場合に限り、 true をプッシュします。 それ以外の場合は false をプッシュします。

ある(無名)ワードの実行結果が false であった場合、 それ以降の(無名)ワードは実行されません (その時点で、本ワードは false をプッシュすることが確定するので)。

リストに格納されている無名ワードは、 実行の結果、true または false をスタックにプッシュすることを 期待されています。 しかし、これらの無名ワードの挙動まではシステムとして 確認している訳ではありません。 あくまでも各無名ワードを実行し、 実行直後のスタックからひとつ値を取り出して、 その値が true であるか否かを確認するだけです。

使用例 次の例では、TOS の値(この例では 5)が 3 より大きく、 かつ 10 未満であるかどうかを確認しています。
> 5 ( { dup 3 > } { 10 < } ) and .
  true ok.
エラー スタックに 2 つの値が存在しなかったり、 TOS がラムダリストでない場合はエラーとなります。

append

実行レベル 標準実行レベル
スタックの変化 X ---
機能 セカンドおよび TOS から値を取り出し、 セカンドのリストの末尾に TOS の値を追加します。
使用例 使用例はありません。
エラー スタックの要素が 2 個以上なかったり、 また上から 2 番目の要素がリストでない場合などはエラーとなります。

args

実行レベル 標準実行レベル
スタックの変化 --- ℒ
機能

コマンドライン引数として与えられたスクリプトファイルへの引数 (スクリプトファイル以降に与えられたプログラム列)をリスト化して スタックにプッシュします。

args に格納される引数(プログラム片)は、 それぞれ評価の後に格納されます。 そのため、スクリプトファイル中で定義されるワードは、 args に格納される時点では、まだワードとして認識されないため、 「ワードの可能性のあるトークン」として評価・格納されます。

本ワードでスタックに積まれるリストは、 言語処理系 para と連携しています。 args dup { drop } foreach などとすると、 args と連携するリストは空となります。

上記の処理がスクリプトファイル中で実行された場合、 当該スクリプトの実行の終了後は実行すべき 引数が存在しないこととなります。 この場合は、コマンドライン引数として いくつかの引数を与えたとしても 言語処理系 para は何も外部インタプリタにそれらを 引き渡すことはありません(つまり何もしません)。

args のこのような機能は、言語処理系 para と スクリプトファイルによって実用的な処理を行う場合に 利用できます。 例えば、para cat.p8e filePath などとした場合でも、 args のこの機能を利用すれば、 para -e "'filePath'" cat.p8e などと書く必要がなくなります (もちろん、cat.p8e の処理として、 args が指すリストより適切に対象ファイルのファイルパスを 取り出し、その後、当該リストを空にする必要があります)。

以上では、args の示すリストの要素を減らす場合でしたが、 要素を増やした場合、当該スクリプトの実行後に 評価される引数を増やすこともできます。

使用例 次の例では、ワンライナーとして与えらた引数を表示しています。 この例は、他の例と異なり、Paraphrase インタプリタ上での実行例ではなく、 MacOS での terminal での実行の様子です。 表示されている 16 進数は、実行環境により変化するもののため、 必ずしも以下の例のような値にはなりません。
$ ./para "" 1 23 args .cr
( 1 23 0x7fc313c06830[std:args] 0x7fc313c07070[std:.cr] )
$
エラー エラーは発生しません。

array?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が配列である場合には true を さもなければ false をスタックに積みます。
使用例 次の例では、局所変数 x に格納されている値が 配列であるか否かを調べています。

> `test : `x local `x , array? . ;
  ok.
> "thi is a string" test
  false ok.
エラー スタックが空の場合はエラーとなります。

as-counter

実行レベル 即時実行レベル 1
スタックの変化
コンパイル時: ---
生成されたコードの実行時: ---
機能 コンパイル時に、for{+|-} ループ内で使用されることを想定しているワードです。 直前にコンパイルされているものがシンボル値である必要があります (さもなければエラーとなります)。 本ワードを実行すると、以下の処理をするプログラムが生成されます:

直前にコンパイルされているシンボル(これをカウンタ用変数と呼ぶ)に対し、 ワード i にてカウンタ値を取得し、 その値をカウンタ用変数に格納する。

カウンタ用の変数が局所変数として宣言されていない場合は、 その宣言もあわせて行います。
使用例 次の例では、ワード i の代わりに局所変数 t をカウンタ変数として利用しています:
> `test : 1 10 for+ `t as-counter `t , . next ;
  ok.
> test
  1 2 3 4 5 6 7 8 9 ok.
エラー 直前にコンパイルされている要素がシンボル値でない場合はエラーとなります。 また、インタプリタモードでの使用もエラーとなります

なお、for+ や for- などは無名ワードの定義を開始しますので、 一見インタプリタモードでの実行に見えますが、 実態はコンパイルモードになっています。 よって、インタプリタモードでも for{+|-} ループ内では、 本ワードは正常に機能します。

asin

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 スタックより値を一つ取り出し、その値の逆正弦( asin )を計算します。 そして、計算結果をスタックにプッシュします (計算結果はラジアンとなります)。
使用例 次の例では、0.5 の逆正弦を計算し、 rad-to-deg ワードを用いて度に変換しています。
> 0.5 asin rad-to-deg .
  30.000000 ok.
エラー TOS が数値でない場合はエラーとなります。

assoc?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が連想配列である場合には true を さもなければ false をスタックに積みます。
使用例 次の例では、局所変数 x に格納されている値が 連想配列であるか否かを調べています。

> `test : `x local `x , assoc? . ;
  ok.
> "this is a string." test
  false ok.
エラー スタックが空の場合はエラーとなります。

at

実行レベル 標準実行レベル
スタックの変化 S1 I --- S1 S2
機能 セカンドに格納されている文字列 S1 に対し、 TOS に格納されている整数値 I (これをインデックス値と呼ぶ)を取り出し、 S1 の I 番目の文字をスタックに積みます。 S1 の先頭の文字列は 0 番目とします(0 オリジン)。
使用例 次の例では、文字列 "Xevious" の 2 番目の文字 "v" を取り出しています。
> clear "Xevious" 2 at show
      +----------------+
TOS-->|    string v    |
      | string Xevious |
DS:------------------------
 ok.
エラー セカンドが文字列でなかったり、 TOS が整数値で無い場合はエラーとなります。 また、インデックス値が負であったり、 文字列の長さ以上であった場合もエラーとなります。

atan

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 スタックより値を一つ取り出し、その値の逆正接( atan )を計算します。 そして、計算結果をスタックにプッシュします (計算結果はラジアンとなります)。
使用例 次の例では、1 の逆余弦を計算し、 rad-to-deg ワードを用いて度に変換しています。
> 1 atan rad-to-deg .
  45.000000 ok.
エラー TOS が数値でない場合はエラーとなります。

big-int?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が big-int である場合には true を さもなければ false をスタックに積みます。
使用例 次の例では、局所変数 x に格納されている値が big-int であるか否かを調べています。

> `test : `x local `x , big-int? . ;
  ok.
> 123LL test
  true ok.
エラー スタックが空の場合はエラーとなります。

bool-type

実行レベル 標準実行レベル
スタックの変化 --- L
機能 bool 値を表す型情報の数値をスタックに積みます。
使用例 次の例では、0 という整数値を bool 値型に変換しています。
> clear 0 bool-type >type show
      +------------+
TOS-->| bool false |
DS:--------------------
  ok.
エラー エラーは発生しません。

bool?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が bool である場合には true を さもなければ false をスタックに積みます。
使用例 次の例では、局所変数 x に格納されている値が bool であるか否かを調べています。

> `test : `x local `x , bool? . ;
  ok.
> true test
  true ok.
エラー スタックが空の場合はエラーとなります。

break

実行レベル 即時実行レベル 1
スタックの変化 SS: α3 α2 α1 I0 κ --- α3 α2 α1 I0 κ(変化しません)

SS 上の情報については、ワード switch の説明を 参照して下さい。
機能 switch - dispatch または cond - dispatch ブロックにて使用され、 -> または ->> の後に記述します。 break の位置にて、(結果として)dispatch 以降にジャンブするコードを 生成します。

補足:「結果として」という意味ですが、 本ワードでは α1 に格納されているアドレスへジャンプするコードを 生成します。 このアドレスには、dispatch の直後にジャンプする コードが書かれているため、結果として dispatch の直後に処理が移ることとなります。

使用例 switch の例を参照して下さい。
エラー SS 上に switchdispatch ブロックに関する 情報が構築されていない場合はエラーとなります。

実行レベル 標準実行レベル
スタックの変化 --- { W | η }
機能 本ワードを呼び出したワードを呼び出したワードをスタックに積みます (同じような文章が続いていますが間違いではありません)。 ワード中ではなく、トップレベルから呼び出された場合や、 本ワードを呼び出しているワードをトップレベルから呼び出した場合などでは、 無効な値をスタックに積みます。

本ワードの定義としては以上の説明のとうりなのですが、 プログラマの感覚からすると、caller と記述されている ユーザー定義ワードを呼び出しているワードをスタックに積むと 理解してもらっても構いません。 というのも、caller を呼び出しているワードを呼び出しているワードは、 caller から見れば「本ワードを呼び出したワードを呼び出したワード」に 他ならないからです。

使用例 次の例では、print-caller を呼び出したワード test1 および test2 の名前を、 print-caller にて表示しています。
> `print-caller : "called by" . caller word-name .cr ;
  ok.
> `test1 : print-caller ;
  ok.
> `test2 : print-caller ;
  ok.
> test1
  called by user:test1
  ok.
> test2
  called by user:test2
  ok.
エラー エラーは発生しません。

car

実行レベル 標準実行レベル
スタックの変化 --- X
機能 TOS にあるリストを取り出し、その先頭要素をスタックに積みます。
使用例 次の例では、リスト ( 10 20 30 ) から、先頭の要素 10 を得ます。
> ( 10 20 30 ) car
  ok.
> .
  10 ok.
エラー スタックが空の場合はエラーとなります。 また、リストが空のリストの場合もエラーとなります。

case

実行レベル 即時実行レベル 1
スタックの変化
実行時:
DS: X --- X X

コンパイル時:
SS: α3 α2 α1 I0 κ --- α3 α2 α1 I0 κ(変化しません)

SS 上の情報については、ワード switch の説明を 参照して下さい。
機能

ワード -> および ->> と対を成すワードです。 switchdispatch ブロック、 もしくは conddispatch ブロックにて 条件分岐をする際に使用します。

switchdispatch ブロックでは TOS の値を各 case 〜 { -> | ->> } ブロックで 利用することが想定されるため、 switchdispatch ブロック内で 利用された場合は、case が記述されたいる位置に dup を生成します (言い換えれば conddispatch ブロック内で 使用した場合には生成しません)。

複製された TOS は case 直後に書かれた判定式で true となった場合、対となるワード -> にて drop されます。 よって、-> 以降で TOS の値を使用したい場合は、 -> ではなく、drop しない ->> を使うようにして下さい。

コンパイル時は、α3 が示すアドレスに 現在コンパイル中のアドレスを書き込みます。 これにより、直前の case 〜 {-> | ->>} で 条件が満たない場合に、現在コンパイル中の case 部分にジャンプしてくるようになります。

使用例 次の例では、いわゆる FizzBuzz 問題を処理するワード FizzBuzz を定義しています。
`FizzBuzz :
    switch
        case 15 % 0? -> "FizzBuzz"
        case 5 % 0? -> "Buzz"
        case 3 % 0? -> "Fizz"
    dispatch
;
エラー switchdispatch ブロック もしくは conddispatch ブロック 以外で使用した場合はエラーとなります。

cdr

実行レベル 標準実行レベル
スタックの変化 ---
機能 TOS にあるリストを取り出し、cdr 部をスタックに積みます。
使用例 次の例では、cdr 部を取り出し表示します。
> ( apple banana cherry ) cdr .
  ( banana cherry )ok.
エラー TOS がリストでない場合はエラーとなります。 また、リストが空のリストの場合もエラーとなります。

ceil

実行レベル 標準実行レベル
スタックの変化 N --- I
機能 天井関数(TOS 以上の最小の整数を返す関数)を実行します。 負の数の場合、絶対値が減る方向の値を返すので注意。
使用例 次の例では、1.2 の ceil である 2 を表示しています。
> 1.2 ceil .
  2 ok.
エラー TOS が数値でない場合はエラーとなります。

check-delete-by-forget

実行レベル 標準実行レベル
スタックの変化 --- B
機能 ワード forget の動作状態を調べます。 set-delete-by-forget が設定されている場合は true を、 clear-delete-by-forget が設定されている 場合は false をスタックに積みます。
使用例 次の例では、 set-delete-by-forget および clear-delete-by-forget の 実行により、本ワードで積まれる値が変化する様子を示しています。
> set-delete-by-forget
  ok.
> check-delete-by-forget .
  true ok.
> clear-delete-by-forget .
  ok.
> check-delete-by-forget .
  false ok.
エラー エラーは発生しません。

clear

実行レベル 標準実行レベル
スタックの変化 --- (空になります)
機能 スタックを空にします。
使用例 次の例では、値を積んだスタックを空にしています。
> 1 2 3 depth .
  3 ok.
> clear depth .
  0 ok.
エラー エラーは発生しません。

clear-breakpoint

実行レベル 標準実行レベル
スタックの変化
S ---
または
W ---
機能 TOS に積まれているワード名のワード、 もしくはワードに対し、 デフォルトの実行処理(標準 docol)を設定します。 この処理はブレークポイントが設定されている・いないに関係ありません。 ブレークポイントを設定していないワードに対しても、 本ワードは適用可能です。

言い換えると、AOP にて標準 docol ではなく、 異なるアドバイスが設定されている場合は、 標準 docol がアドバイスとして設定されます。

使用例 次の例では、ブレークポイントが設定された hello というワードから ブレークポイント処理を解除しています。
> `hello : "HELLO" .cr ;
  ok.
> "hello" set-breakpoint
  ok.
> "hello" clear-breakpoint
  ok.
エラー TOS にワードもしくはワード名が設定されていないとエラーとなります。 また、指定されたワード名を持つワードが存在しない場合もエラーとなります。 本ワードをデバッガ上で実行しない場合もエラーとなります。

clear-delete-by-forget

実行レベル 標準実行レベル
スタックの変化 ---
機能 ワード forget の動作を指定します。 このワードの実行語は、短縮名および正規名に対して forget を実行した場合であっても、 当該ワードはメモリ上から除去さません。 もちろん、名前によるワードの指定はできなくなりますが、 当該ワードを使用している定義済みのワードは、 forget の実行後であっても、 これまで通りに動作します。 新たに同名のワードを定義した場合であっても、 既に定義されているワードの挙動が変化することはありません。 定義済みのワードから利用されているワードも挙動を差し替える場合は、 ワード update を使用して下さい。 なお、言語処理系 para の起動直後は、本ワードを実行した場合と 同じ状態になっています。
使用例 次の例では、ワード quadruple が参照している twice について、 短縮名および正規名を削除してもその動作に影響がないことを確認しています。
> `twice : 2 * ;
  ok.
> `quadruple : twice twice ;
  ok.
> clear-delete-by-forget
  ok.
> `twice forget
  ok.
> `user:twice forget
  ok.
> 5 quadruple .
  20 ok.
エラー エラーは発生しません。

clear-rs

実行レベル 標準実行レベル
スタックの変化 RS: --- (空になります)
機能 リターンスタックを空にします。
使用例 サンプルコードはありません。
エラー エラーは発生しません。

clone

実行レベル 標準実行レベル
スタックの変化 X --- X X
機能 TOS にある値を複製します。 ワード dup では、 文字列や配列、リストは同じ実体を指すものを複製しますが、 このワードでは、同じ値を持つ、異なる実態を指す値として複製します。 配列やリストでは、各要素そのものまでは、 異なる実態を指す値としては複製しません。 要素単位で異なる実態を指すように複製する場合には full-clone を使用して下さい。
使用例 次の例では、リストを複製していますが、 dup とは異なり、それぞれの値を保持している様子を示しています。
> ( 1 2 3 ) clone 10 append . .
  ( 1 2 3 10 ) ( 1 2 3 ) ok.
> ( 1 2 3 ) dup 10 append . .
  ( 1 2 3 10 ) ( 1 2 3 10 ) ok.
エラー スタックが空の場合、エラーとなります。

close

実行レベル 標準実行レベル
スタックの変化 ---
機能 TOS にあるファイルオブジェクトをクローズします。
使用例 ワード open の例を参照して下さい。
エラー TOS がファイルオブジェクトでない場合はエラーとなります。

concat

実行レベル 標準実行レベル
スタックの変化 ℒ1 ℒ2 ---
機能 スタックの 2 番目にあるリスト 1 と、TOS にあるリスト 2 を取り出し、 それらを連結したリストをプッシュします。
使用例 次の例では、リスト ( 1 2 3 ) と ( 4 5 ) を連結した、 リスト ( 1 2 3 4 5 ) を作成します。
> ( 1 2 3 ) ( 4 5 ) concat .
  ( 1 2 3 4 5 ) ok.
空のリストと連結する場合は、リストは変化しません。
> ( 1 2 3 ) () concat .
  ( 1 2 3 ) ok.
> () ( 1 2 3 ) concat .
  ( 1 2 3 ) ok.
エラー TOS および 2 番目のデータがリストでない場合はエラーとなります。

cond

スタックの変化は switch を参照して下さい。 なお、Syntax Stack (SS) 上の κ の値は cond を示す値となります。
実行レベル 即時実行レベル 1
スタックの変化
機能 dispatch と対を成し、複数の条件に応じた分岐処理を実現します。 switch 〜 dispatch では、switch が記述されている位置へ処理が進んだ時、 その時の TOS の値を用いて case にて分岐を行うことが期待されています。

本ワードでは、cond の位置における TOS の値は、 必ずしも使用する必要はなく、case 〜 {->|->>} 間に 記述された条件式により、複数の分岐処理を実行することを期待しています。

そもそも本ワードが導入された理由は、Forth 系では、 他の言語が対応している

// この例は C による例です
if( condExpr1 ) {
    doSomething1();
} else if( condExpr2 ) {
    doSomething2();
} else if( condExpr3 ) {
    doSomething3();
} else {
    doSomething4();
}


という処理が記述しづらい、という問題がありました。 実際に cond を用いずに上記と同等の処理を Paraphrase で記述しようとすると、

condExpr1 if
    doSomething1
else
    condExpr2 if
	    doSomething2
	else
	    condExpr3 if
		    doSomething3
		else
		    doSomething4
		then
	then
then


となり、最後に正しい数だけ then を連ねられるよう、 入れ子の数を正確に管理する必要がありました。

コーディング時においては、当然ですが、 このような余分な管理コストは削除したいものです。 本ワード cond を用いると、上記のコードは以下のように記述できます:

cond
    case condExpr1 -> doSomething1
    case condExpr2 -> doSomething2
    case condExpr3 -> doSomething3
    default        -> doSomething4
dispatch


if 〜 else 〜 then を用いたものよりも、 すっきりと記述できています。

もちろん、このとき condExpr1 は cond の場所に実行が移った際の TOS を必ずしも利用する必要はありません (利用する場合は switch を用いた方が より簡便に記述できると思います)。

使用例 次の例では、本ワードを用いて最大公約数を計算しています。 なお以下の例は対話的な入力ではなく、 スクリプトファイルとしてファイルに記述する場合の例です。
// m n gcd
`gcd :	// cond version
    ( m n ) local
    cond
        case `m , `n , ==   -> `m ,
        case `n , 0 ==      -> `m ,
        case `m , `n , >    -> `n , `m , gcd
        default -> `m , "%" :( `n , `m , ); gcd
	dispatch
;
エラー エラーの発生状況については、 switch を参照して下さい。

const

実行レベル 標準実行レベル
スタックの変化 { S | σ } X ---
機能 second で指定したワードを実行すると、 TOS の値がスタックに積まれるように、 TOS の値を second の名前にて定義します。 主に定数として使用できるワードの定義を念頭において用意されたワードです。 このワードでは、既に定義されている名前で、 値を再定義することはできません。
使用例 次の例では、12345679 という値を magic-number という名前にて定義しています。
> "magic-number" 12345679 const
  ok.
> magic-number .
  12345679 ok.
> 3 magic-number 9 * * .
  333333333 ok.
エラー スタックに値が 2 つ以上積まれていなかったり Second が文字列でない場合はエラーとなります。

また、既に定義されている名前で、 再度定義しようとするとエラーとなります。 再定義する場合はワード const! を使用して下さい。

const!

実行レベル 標準実行レベル
スタックの変化 { S | σ } X ---
機能 second に格納されている文字列またはシンボルで指定される定数を、 TOS に格納されている値で再定義します。 second に格納されている値で指定された定数が存在しない場合は、 const と同じ動作となります。 本ワードで再定義される前に、ワード定義で利用された定数は 影響を受けません。 定数の更新以前に、ワード定義で利用されたものまで変化を及ぼしたい場合には、 update を用いて下さい (例えば X という定数(ワード)の定数値を 999 に変更する場合は、 `X { 999 } update として下さい)。
使用例 次の例では、123 として定義された定数 X を 999 という定数値に変更しています。 999 という値に変更する前に、定数 X を利用して定義されたワード printX には 本ワードの効果は伝搬していないことに注意して下さい:

> `X 123 const
  ok.
> `printX : X . ;
  ok.
> printX
  123 ok.
> `X 999 const! // 999 に値を変更
  ok.
> `X .
  999 ok.
> printX // しかし変更以前に定義したワードには変化なし
  123 ok.

参考:update を用いて変更すると、変更以前に定義したワードにも影響を 与えられます:

> `X 123 const
  ok.
> `printX : X . ;
  ok.
> printX
  123 ok.
> `X { 999 } update // update で値を変更
  ok.
> `X .
  999 ok.
> printX // 今度は変更以前に定義したワードも変化する
  999 ok.
エラー スタックに値が 2 つ以上積まれていなかったり Second が文字列でない場合はエラーとなります。

cont

実行レベル 標準実行レベル
スタックの変化 ---
機能 デバッガに対し、現在停止中のワードを実行するように指示します。
使用例 使用例はありません。
エラー デバッガとの対話中でない場合、エラーとなります。

continue

実行レベル 即時実行レベル 1
スタックの変化 SS: α4 α3 α2 α1 I0 κ --- α4 α3 α2 α1 I0 κ

SS 上のデータは変化しませんが、 SS 上にはこれらのデータが格納されている必要があります。 各データの詳細については、ワード for+ の 説明を参照して下さい。

機能 本ワードに対応したループ処理内において、 ループを継続するか否かの確認処理部分へジャンプします。 具体的な処理の内容については、SS 上に存在するアドレス値 α1 への ジャンプを行うコードを生成します。 なお、for{+|-} 〜 next ループ内で使用された場合は、 カウンタ情報の更新を行ったうえで、アドレス値 α1 へのジャンプを 行うコードを生成します。
使用例 次の例では、-5 から +5 までの for+ 〜 next ループにおいて、 それぞれのカウンタ値の逆数を inv(i) として表示しています。 カウンタ値が 0 の時は逆数は存在しませんので、 本ワードを用いて処理をスキップしております。
> -5 5 for+ i 0? if continue then i "inv(%d)=" putf 1.0 i / .cr next
inv(-5)= -0.200000
inv(-4)= -0.250000
inv(-3)= -0.333333
inv(-2)= -0.500000
inv(-1)= -1.000000
inv(1)= 1.000000
inv(2)= 0.500000
inv(3)= 0.333333
inv(4)= 0.250000
inv(5)= 0.200000
 ok.
エラー SS 上に必要な情報が存在しないとエラーとなります (つまり、本ワードに対応しているループ処理内で 使用しないとエラーとなります)。

cos

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 スタックより値を一つ取り出し、その値をラジアンとし余弦( cos )を計算します。 そして計算結果をスタックにプッシュします。
使用例 次の例では、deg-to-rad ワードを用いて cos 60 度を計算しています。
> 60 deg-to-rad cos .
  0.500000 ok.
エラー TOS が数値でない場合はエラーとなります。

cr

実行レベル 標準実行レベル
スタックの変化 ---
スタックからは何も読み取らず、かつ、なにも変化を与えません。
機能 標準出力または擬似標準出力へ改行を出力します。
使用例 次の例では、1 から 10 までの数字を一行ごとに出力します。
> 1 10 for+ i . cr next
1
2
3
4
5
6
7
8
9
10
ok.
エラー エラーは発生しません。

def

実行レベル 標準実行レベル
スタックの変化
{ S | σ } W ---
または
W { S | σ } ---
機能 TOS とセカンドにある、無名ワードと文字列を用いてワードを登録します。 無名ワードのワード名には TOS またはセカンドにある文字列が用いられます。
使用例 次の例では、TOS にある値を 2 倍する無名ワードを Twice という名前の ワードとして登録しています。
> "Twice" { 2 * } def
  ok.
なお、本ワードは文字列と無名ワードがスタックの上部にあれば良いので、 { 2 * } "Twice" def と書くこともできます。
エラー TOS とセカンドに無名ワードと文字列がそれぞれ 1 つづつ存在しない場合は エラーとなります。

default

実行レベル 即時実行レベル 1
スタックの変化 SS: α3 α2 α1 I0 κ --- α3 α2 α1 I0 κ(変化しません)

SS 上の情報については、ワード switch の説明を 参照して下さい。
機能 ワード switchdispatch 内で使用されるワードです。 case true と同値です。
使用例 次のワードは TOS より整数値を取り出し、 それを西暦とみなして、その年が閏年であるか否かを判定します (閏年なら true を積みます)。 なお以下の例はインタプリタへの入力例ではなく、 スクリプトとしてファイルに記述する例です:

// year --- t/f
`leapYear? :
    switch
        case 400 % 0 == -> true
        case 100 % 0 == -> false
        case   4 % 0 == -> true
        default         -> false
    dispatch
;
エラー switchdispatch ブロックにて 使用しない場合はエラーとなります。

default-docol

実行レベル 標準実行レベル
スタックの変化 --- C
機能 スタックにデフォルトの docol 処理を示す標準コードを積みます。
使用例 サンプルコードはありません。
エラー エラーは発生しません。

defined?

実行レベル 標準実行レベル
スタックの変化 { S | σ } --- B
機能 TOS にある文字列のワードが定義されているか否かを調べます。 定義されている場合は真を、そうでない場合は偽をスタックに積みます。
使用例 次の例では、test というワードが定義されているか否かを調べています。
> "test" defined? .
  false ok.
> `test : "HELLO" .cr ;
  ok.
> "test" defined? .
  true ok.
エラー スタックが空であったり、TOS が文字列でない場合はエラーとなります。

deg-to-rad

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 TOS を度として取り出し、ラジアンに変換してスタックに積みます。 180.0 / pi * と同等です。
使用例 次の例では、180 度をラジアンに変換し、その値 π を表示しています。
> 180 deg-to-rad .
  3.141593 ok.
エラー TOS が数値でない場合はエラーとなります。

depth

実行レベル 標準実行レベル
スタックの変化 --- I
機能 本ワード実行直前のスタックの深さをスタックに積みます。 本ワード実行後のスタックの深さは TOS の値に 1 を加えたものとなります。
使用例 次の例では、スタックをクリアし、 その状態でのスタックの深さ(=0)を調べ、表示しています。
> clear depth .
  0 ok.
エラー エラーは発生しません。

dispatch

実行レベル 即時実行レベル 1
スタックの変化 SS: α3 α2 α1 I0 κ --- α3 α2 α1 I0 κ(変化しません)

SS 上の情報については、ワード switch の説明を 参照して下さい。
機能 ワード switch または cond と対を成し、 複数の条件からなる条件判断ブロックを形成します。

本ワードにより switch 〜 dispatch ブロックや cond 〜 dispatch が形成されるため、 α2 が指すアドレスに 当該 switch 〜 dispatch ブロック終了直後の アドレスを格納します。 これにより、ワード break にて switch 〜 dispatch ブロック もしくは cond 〜 dispatch ブロックからの 脱出を実現しています。

また、α3 がアドレス値である場合、つまり、 当該 { switch | cond } 〜 dispatch ブロック (=当該条件分岐ブロック)において ワード case が実行された(記述されている)場合は、 最後の casebreak ブロックに 該当しない場合のジャンブ先の処理、 つまり当該条件分岐ブロックからの脱出処理を行うため、 α3 が示すアドレスについても、 α2 が示すアドレス同様、 当該条件分岐ブロック終了直後のアドレスを格納します。

使用例 ワード switch のサンプルコードを参照して下さい。
エラー SS 上に switch 〜 dispatch ブロック または cond 〜 dispatch ブロックに関する 情報が構築されていない場合はエラーとなります。

do

実行レベル 即時実行レベル 1
スタックの変化
SS: ---
※ SS は変化しませんが、SS にはワード while が 積む値が積まれていることを期待しています。
機能 while と対をなすワードです。 while と本ワード do の間にて 記述されたプログラムを実行します。 これは毎ループ行われます。 本ワードが記述されている位置で、 TOS より値を取り出し、その値が true であるか否かの確認を行います。 true である場合は、 本ワードと対をなすもうひとつのワード repeat との間に記述されている処理を実行します。 そうでない場合は、対をなすワード repeat の直後に 制御を移します。

使用例 サンプルコードはありません。 ワード while のサンプルコードを見て下さい。
エラー SS スタックが、想定されている状況になっていない場合は エラーとなります。

docol

実行レベル 標準実行レベル
スタックの変化 ---
※ 変化しません
機能 worded-docol-caller で呼び出されるユーザー定義ワード中にて使用され、 デフォルトの docol 処理を呼び出します。
使用例 ワード worded-docol-caller の 使用例を参照して下さい。
エラー エラーは発生しません。

docol-target-word

実行レベル 標準実行レベル
スタックの変化 --- W
機能 このワードは、 set-worded-docol-callee で 指定されたワード内で使用されることを想定しています。 本ワードを実行すると、 ワード docol で呼び出されるワードへの ポインタをスタックにプッシュします。
使用例 使用例はありません。
エラー 想定外の使われ方をすると、エラーとなります。

double-type

実行レベル 標準実行レベル
スタックの変化 --- L
機能 double 値を表す型情報の数値をスタックに積みます。
使用例 使用例はありません。
エラー エラーは発生しません。

double?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が double である場合には true を さもなければ false をスタックに積みます。
使用例 次の例では、局所変数 x に格納されている値が double であるか否かを調べています。

> `test : `x local `x , double? . ;
  ok.
> 12.3 test
  true ok.
エラー スタックが空の場合はエラーとなります。

drop

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS にあるデータを捨てます。
使用例 次の例では、TOS にある beta という文字列を捨てています。
> "alpha" "beta" drop show
      +-------+
TOS-->| alpha |
DS:---------------
 ok.
エラー スタックが空の場合、エラーとなります。

drop-rs

実行レベル 標準実行レベル
スタックの変化 RS: X ---
機能 リターンスタックの TOS にあるデータを捨てます。
使用例 次の例では、リターンスタックの TOS にある beta という文字列を捨てています。
> "alpha" >r "beta" >r show-rs
      +-------+
TOS-->| beta  |
      | alpha |
RS:---------------
 ok.
> drop-rs show-rs
      +-------+
TOS-->| alpha |
RS:---------------
 ok.
エラー リターンスタックが空の場合、エラーとなります。

dump

実行レベル 標準実行レベル
スタックの変化 { W | S | σ | Z } ---
機能 TOS に格納されている値がワードもしくは文字列の場合は、 そのワードもしくはその文字列と同名のワードの 内部コードを表示します。

連想配列の場合は、その連想配列に格納されている、 全てのキーおよび値の組を表示します。

いずれの場合も、TOS より値を取り出します。

使用例 次の例では、TOS を 2 乗する sq というワードを定義し、 その内部コードを表示しています。
> `sq : dup * ;
  ok.
> 3 sq .
  9 ok.
> "sq" >word dump
the word 'std:sq' is:
[0] dataType:(WORD-PTR) value:0x7f9dc9e08a10[std:dup]
[1] dataType:(WORD-PTR) value:0x7f9dc9e08550[std:*]
[2] dataType:(WORD-PTR) value:0x7f9dc9e04ed0[std:_semis]
 ok.
value の後に表示される 16 進数は各ワードが格納されているアドレスであり、 実行環境毎に異なる可能性があります。 また、使用している Paraphrase のバージョンにより、 最適化の状況も異なる場合もあるため、 必ずしも上記のような表示になるとは限りません。
エラー TOS がワードでない場合はエラーとなります。

dup

実行レベル 標準実行レベル
スタックの変化 X --- X X
機能 TOS を複製します。 文字列や配列、リストは同じ実体を指すものを生成します。 同じ内容の異なる実態が必要な場合は、 clone または full-clone を使用して下さい。
使用例 次の例では、dup を用いて、5 の 2 乗を計算しています。
> 5 dup * .
  25 ok.
エラー スタックが空の場合はエラーとなります。

else

実行レベル 即時実行レベル 1
スタックの変化 RS: π --- π

実行前にスタックに積まれている π は ワード if によって積まれたものであり、 ワード if によってスレッドにコンパイルされた命令の実行時に、 TOS が fasle の場合にジャンプするアドレスを格納する スレッド中のスロット位置を示しています。

実行後にスタックに積まれる π は、 定義中のワードの実行時に条件不成立時に実行される処理 (if〜else〜then における else〜then の部分)を スキップするためのジャンプに使用されるアドレスを格納する スレッド中のスロット位置を示しています。

機能 if および then と対を成し、 定義中のワードにて、if ワードが置かれている場所において TOS が false である場合、if 〜 else 〜 then ブロックにて、 else と then に囲まれた部分が実行されるようにします。
使用例 使用例はワード if のものを御覧ください。
エラー インタプリタモードで if と共に使用しない場合などはエラーとなります。 また、リターンスタックの TOS が π でない場合にエラーとなります。

empty?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 スタックが空であるかどうかを調べます。 空であれば true を、そうでなければ false をスタックに積みます。
使用例 次の例では、clear で空にしたスタックに対し、 スタックが空であるかどうかを確認しています (空になっているので true が表示されています)。
> clear empty? .
  true ok.
エラー エラーは発生しません。

empty-list?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 TOS のリストに要素が存在しないとき、true をスタックに積みます。 要素が存在する場合(=空のリストでない場合)は false をスタックに積みます。
使用例
> ( 1 2 3 ) empty-list? .
  false ok.
エラー スタックが空だったり、TOS がリストでない場合はエラーとなります。

en-list

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS 消費し、そのデータを要素に持つリストを作成しスタックに積みます。 TOS にあるデータが x ならば、リスト ( x ) をスタックにプッシュします。
使用例 次の例では、"hello" という文字列のみからなるリストを生成し、表示します。
> "hello" en-list
  ok.
> .
  ( hello ) ok.
エラー スタックが空の場合はエラーとなります。

end-with?

実行レベル 標準実行レベル
スタックの変化 S1 S2 --- B
機能 文字列 S1 が文字列 S2 で終わっているか否かを調べます。 S2 で終わっている場合は true を、 そうでない場合は false をスタックに積みます。
使用例 次の例では、スタックにある文字列 "sample.p8e" が ".p8e" で終わっているか否かを調べています。
> "sample.p8e" ".p8e" end-with? .
  true ok.
エラー スタックが空であったり、 スタック上部に 2 つの文字列が存在しない場合は エラーとなります。

enum

実行レベル 標準実行レベル
スタックの変化 ---
機能 TOS に格納されているリストの内容に基づき、定数ワードを定義します。 定数ワードとは、そのワードを実行すると、 割り当てられた定数をスタックに積むワードのことです。
使用例 enum で用いるリストは以下の書式で記述されていなければなりません。 基本形はタプル(要素が 2 個からなるリスト)からなるリストです。 この基本形のリストでは、 定数名と定数値の組にて構成されています。 例えば、FamiCom には 14800 という整数値を、 PlayStation には 39800 を、 Xbox には34800 という整数値を割り当てる場合は 次のようなリストをスタックに積み、本ワードを実行します:
> ( ( FamiCom 14800 ) ( PlayStation 39800 )
>> ( Xbox 34800 ) ) enum
  ok.
> FamiCon .
  14800 ok.

本ワードでは、必ずしも割り当てる定数値を明記する必要はありません。 タプルではなく、シンボルのみを記述してある場合、 そのシンボルと同名の定数ワードには、 直前に用いられた整数値(int もしくは big-int)の値に 1 を加えた 値が用いられます。

例えば、次のようなリストを用いると、 Banana には 101 が、Cherry には 102 が割り当てられます:

> ( ( Apple 100 ) Banana Cherry ) enum
  ok.
> Banana .
  101 ok.

最初のシンボルにおいて、定数値を省略した場合、 その初期値は 0 が用いられます。 よって、次のようなリストに対し本ワードを実行すると、 Apple には 0 が、Banana と Cherry には 1 と 2 が、 それぞれ割り当てられます:

> ( Apple Banana Cherry ) enum
  ok.
> Apple .
  0 ok.
エラー スタックが空であったり、 TOS がリストでない、 またはリストであっても本ワードの書式に合っていない場合はエラーとなります。

eoc

実行レベル 標準実行レベル
スタックの変化 ---
機能 EoC (=End of Communication) をスタックに積みます。 EoC を通使用チャネルに送ると、そのチャネルは閉じられます。
使用例 使用例はありません。
エラー エラーは発生しません。

eoc?

実行レベル 標準実行レベル
スタックの変化 X --- X B
機能 TOS が EoC ならば true を、そうでなければ false を スタックに積みます。 実行に際し、TOS はポップされません。
使用例 次の例では、tos が eoc のときに true をプッシュしている様子を示しています。
> eoc eoc? .
  true ok.
> .
 (EOC) ok
エラー スタックが空の場合はエラーとなります。

eof?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が EOF かどうかを調べます。 EOF であったならば true を、 さもなければ false をスタックに積みます。
使用例 サンプルコードはありません。
エラー スタックが空の場合はエラーとなります。

eval

実行レベル 標準実行レベル
スタックの変化 S --- (TOS による)
機能 TOS にある文字列を取り出し、評価します。
使用例 1 次の例では、文字列 "2 3 + ." を評価し、その結果 5 を印字しています。
> "2 3 + ." eval
  5 ok.
使用例 2

文字列から数値への変換

次の例では、文字列 "-1.23" を評価し、 数値としての -1.23 をスタックに積んでいます。

> "-1.23" eval .
  -1.230000 ok.

>int は文字列からの変換をサポートしていませんので、 整数を表す文字列から整数値への変換には eval を使用して下さい。

エラー TOS が文字列でない場合はエラーとなります。

even?

実行レベル 標準実行レベル
スタックの変化 K --- B
機能 TOS にある整数をとりだし、偶数であるか否かを調べます。 偶数である場合は true を、さもなければ false をスタックに積みます。
使用例 次の例では、数値 123 が偶数であるか否かを調べています:
> 123 even? .
  false ok.
エラー TOS が整数(int,long,big-int)でない場合はエラーとなります。

exec

実行レベル 標準実行レベル
スタックの変化
W --- 未定(=実行されたワードにより異なります)
または
C --- 未定(=実行されたワードにより異なります)
機能 TOS にあるワードもしくは標準コードを取り出し、実行します。
使用例その 1 次の例では、2 3 + . を実行する無名ワードを、 ワード { と ワード } を用いて作成し、 その作成したワードを exec にて実行しています。
> { 2 3 + . } exec
  5 ok.
使用例その 2 extStdCode.so にある stdCodeHello 標準コードを呼び出します。
Linux or MacOS 用:
> "./ext/extStdCode.so" "stdCodeHello" get-std-code exec
 hello by StdCode.
  ok.

Windows 用:
> "./ext/extStdCode.dll" "stdCodeHello" get-std-code exec
 hello by StdCode.
  ok.
エラー スタックが空であったり、 TOS がワードでない場合はエラーとなります。

exit

実行レベル 標準実行レベル
スタックの変化 I ---
機能 TOS にある整数値とともに終了します (C の関数 exit() を呼び出します)。
使用例 使用例はありません。
エラー TOS が int でない場合はエラーとなります。

exp

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 TOS を取り出し、 e (自然対数の底)の TOS 乗を計算し、スタックにプッシュします。
使用例 次の例では、e の pi 乗と pi との差を計算しています。 この値は 19.9990999792... と約 20 という整数に殆ど近い値となります。 実際に Paraphrase でも 19.999100 をいう値が表示されます。
> pi exp pi - .
  19.999100 ok.

  なお、このサンプルコードのアイデアは、 izmktr さんが Qiita に投稿した記事:
「第 20 話 ゲルフォントの定数」
https://qiita.com/izmktr/items/a8d6a04dceda6cae1a77
より拝借しています。
エラー スタックが空であったり、TOS が数値でない場合はエラーとなります。

expand

実行レベル 標準実行レベル
スタックの変化 { | A } --- X1 X2Xn
機能 リストまたは配列を格納されている要素に分解し、 先頭の要素またはインデックス値の小さな順にスタックに積んでいきます。
使用例 次の例では、( 10 20 30 ) というリストを分解し、 10 20 30 という値が順次スタックに積まれていることを確認しています (ドットでスタックから値を取り出しているので、 表示される値は 30 20 10 と、スタックに積まれた順序と逆順、 つまり、リストの後ろの値から表示されることとなります)。
> ( 10 20 30 ) expand
  ok.
> . . .
  30 20 10 ok.
エラー TOS がリストもしくは配列でない場合はエラーとなります。

false

実行レベル 標準実行レベル
スタックの変化 --- B
機能 偽の値 false をスタックに積みます。
使用例
> false .
  false ok.
エラー エラーは発生しません。

fcopy

実行レベル 標準実行レベル
スタックの変化 S1 S2 ---
機能 TOS およびセカンドから文字列を取り出し、 セカンドで示される文字列により指定されるファイルを、 TOS で示される文字列をファイル名に持つファイルにコピーします。 コピー先のファイルが既に存在する場合は上書きされます。
使用例 次の例では、a.txt の内容を b.txt にコピーします。
> "a.txt" "b.txt" fcopy
  ok.
エラー TOS およびセカンドが文字列でない場合、 またはセカンドで示されたファイルが存在しない場合はエラーとなります。

fetch

実行レベル 標準実行レベル
スタックの変化 α --- X
機能 TOS に格納されているアドレスに格納されている値を読み出します。 標準的な使い方としては、TOS のアドレスは ワード var により作られたワードにて プッシュされたものを想定しています。

このワードはスレッドセーフです。 ワード var により定義される、変数へ参照用ワード $変数名> も内部的に本ワードを呼び出していますので、 スレッドセーフとなります。

使用例 サンプルコードはありません。 ワード store の例を参照して下さい。
エラー TOS がアドレスでない場合はエラーとなります。

fexist?

実行レベル 標準実行レベル
スタックの変化 S --- B
機能 TOS から文字列を取り出し、 その文字列により指定されるファイルが 存在するか否かを調べます。 存在する場合は true を、 存在しない場合は false をスタックに積みます。 大文字と小文字の違いは区別しません。
使用例 使用例はありません。
エラー TOS が文字列でない場合はエラーとなります。

fgets

実行レベル 標準実行レベル
スタックの変化 --- S
機能 TOS にあるファイルオブジェクトから、 1 行読み、それを文字列としてスタックに積みます。 ファイルの最後まで到達した場合は、 INVALID 値をスタックに積みます。 行末の改行コードは削除された後、スタックに積まれます。
使用例 本ワードの使用例はありません (本ワードの参照型である @fgets には サンプルコードが存在します)。
エラー スタックが空であったり、 TOS がファイルオブジェクトでない場合はエラーとなります。

filter

実行レベル 標準実行レベル
スタックの変化 W ---
機能 TOS にあるワード(またはラムダ)をセカンドのリストに適用します。 これを filter 用ワードと呼ぶことにします。 filter 用ワードは TOS をひとつ消費し、 true か false をスタックに積むものと期待されているものです。 filter 用ワードは無名ワードでも構いません。

本ワードでは、セカンドのリストの各要素に対し、 filter 用ワードを適用し、その結果が true であれば結果のリストに登録し、 そうでなければその要素は結果用のリストには追加されません。 filter 用ワードがひとつも true を返さない場合は、 空リストがスタックに積まれます。

filter 用ワードが繰り返し実行される前に、 セカンドのリストおよび TOS の filter 用ワードはスタック から取り除かれます。 その後、filter 用ワードが順次実行されていきます。

filter 用ワードは基本的に、

  1. TOS からひとつ値を取り出す、
  2. 取り出した値に対し処理を行い、
  3. true または false をスタックに積む
といった処理が期待されています。 もちろん、このような動作を行わなくても構いませんが、 filter 用ワードの実行におけるスタックの深さの変化がある場合、 本ワード適用前後のスタックの様子は必ずしも 上に示した「スタックの変化」のとうりにはなりません。

filter 用ワード内では、ワード i を用いることにより、 現在処理中のリスト要素のリスト内での位置(インデックス値)を 得ることができます。 詳しくは以下の使用例を参照して下さい。

使用例 次の例では、与えられたリストの要素のうち、 偶数のものだけを残したリストを作成しています。
> ( 1 2 3 4 5 ) {
>>    i "element[%d]=" putf dup . "is" . 2 % 0? dup .cr
>> } filter .
element[0]= 1 is false
element[1]= 2 is true
element[2]= 3 is false
element[3]= 4 is true
element[4]= 5 is false
 ( 2 4 ) ok.
エラー スタックが空であったり、TOS およびセカンドが想定している 値でなければエラーとなります。

find

実行レベル 標準実行レベル
スタックの変化 W --- X
機能 TOS にあるワード(またはラムダ)をセカンドのリストに適用します。 これを find 用ワードと呼ぶことにします。

find 用ワードは TOS をひとつ消費し、 true か false をスタックに積むものと期待されています。 本ワードでは、セカンドのリストの各要素に対し、 ワード(またはラムダ)を適用し、その結果が true であれば その要素をスタックに積み、処理を終了します。 find 用ワードがひとつも true を返さない場合は 無効な値 をスタックに積みます。

find 用ワードの実行により、 スタックの深さが変化する場合は、 上に示している「スタックの変化」の通りにはならない場合があります。

find 用ワード内では、ワード i を用いることにより、 現在処理中のリスト要素のリスト内での位置(インデックス値)を 得ることができます。 詳しくは以下の使用例を参照して下さい。

使用例 次の例では、セカンドに格納されているリストの要素のうち、 20 よりも大きな要素を調べ、その値を表示しています。 なお、find 用ワードの中で、 どのような結果となったのかについても、 併せて表示するようにしています。
> ( 19 23 29 31 37 ) {
>>   i "element[%d]=" putf dup . 20 > dup .cr
>> } find .
element[0]= 19 false
element[1]= 23 true
 23 ok.
エラー スタックが空であったり、TOS およびセカンドが想定している 値でなければエラーとなります。

float-type

実行レベル 標準実行レベル
スタックの変化 --- L
機能 float 値を表す型情報の数値をスタックに積みます。
使用例 使用例はありません。
エラー エラーは発生しません。

float?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が float である場合には true を さもなければ false をスタックに積みます。
使用例 次の例では、局所変数 x に格納されている値が float であるか否かを調べています。

> `test : `x local `x , float? . ;
  ok.
> 123.0f test
  true ok.
エラー スタックが空の場合はエラーとなります。

floor

実行レベル 標準実行レベル
スタックの変化 N --- I
機能 床関数(TOS 以下の最大の整数を返す関数)を実行します。 負の数の場合、絶対値が増える方向の値を返すので注意。
使用例 次の例では、1.2 の floor である 1 を表示しています。
> 1.2 floor .
  1 ok.
エラー TOS が数値でない場合はエラーとなります。

flush-stdout

実行レベル 標準実行レベル
スタックの変化 ---
スタックからは何も読み取らず、かつ、なにも変化を与えません。
機能 標準出力に溜まっている内容をを強制的に出力します。
使用例 サンプルコードはありません。
エラー エラーは発生しません。

flush-file

実行レベル 標準実行レベル
スタックの変化 ---
機能 TOS にあるファイルオブジェクトに対し、flush を実行します (該当ファイルに対し、 バッファに溜まっている内容をを強制的に出力するよう指示します)。
使用例 サンプルコードはありません。
エラー TOS がファイルオブジェクトでなかったり、 対象のファイルオブジェクトに対しフラッシュが実行できなかった場合は エラーが発生します。

for+

実行レベル 即時実行レベル 1
スタックの変化
実行時
DS:I1 I2 ---
RS: --- I1 I2

即時実行時
RS: --- θ
SS: --- α5 α4 α3 α2 α1 I0 κ

SS 上に積まれる情報の補足説明:

κ は、本ワードにおける構文情報用の識別子となります。 構文情報はチャンク形式にて Syntax Stack (SS) 上に格納されます。 κ の実態は整数値で、本ワードの場合は for+ を示す整数値となります。 κ 〜 α5 までが for+ における構文情報チャンクとなります。

I0 には、for+ における構文情報チャンクのサイズ 6 が格納されます。 for+ における構文情報チャンクは κ 〜 α4 までの 6 つです。

I0 には、整数値 7 が格納されます。

α1 は、ループ終了条件の確認処理が格納されているアドレスを指しています (ワード next は、このアドレスへジャンプします)。

α2 は、ループ終了条件の判定処理開始アドレスを指しています。 (このアドレス値は、ワード leave で用いられます。 leave はスタックに false を積み、 このアドレスへジャンプを行うワードです)。

α3 は、α2 に格納されている分岐処理で使用されるアドレス値が 格納されるアドレスです(一般的には α3 は &alph;2+1 となります)。 α3 のアドレス値には、ループ処理の次の命令が格納されるアドレスが 格納されます。α2 に格納される分岐命令と、 α3 に格納されるアドレスにて、ループ終了処理後のジャンプや、 中断後のジャンプが適切に実行されます。

α4 は繰り返しの判定処理終了後の繰り返しブロックの先頭アドレスを 格納しています。ワード redo は、このアドレスに ジャンプするコードを生成します。

α5 は繰り返し処理を継続するか否かの処理へのアドレスを格納しています。 本ワードにおいては α1 と同じアドレスとなります。

機能 ワード next と対を成し、指定子た回数だけ繰り返し処理を行います。 繰り返しの指定は、初期値 終了値(=その値以上になると終了する) for+ という 形で指定子ます。詳しくは次の使用例を見て下さい。

for+ 〜 next では以下のワード leave, redo, continue を用いて、繰り返し処理の流れを制御することが可能です。

使用例 次の例では 1 から 10 まで(10 は含まない)の数値をプリントします。
> 1 10 for+ i . next
  1 2 3 4 5 6 7 8 9 ok.

初期値のほうが終了値よりも大きい場合、ループは 1 度も回りません。
エラー エラーは発生しません。

for-

実行レベル 即時実行レベル 1
スタックの変化
実行時
DS:I1 I2 ---
RS: --- I1 I2

即時実行時
RS: --- θ
SS: --- α5 α4 α3 α2 α1 I0 κ
※ SS における各情報は、ワード for+ と同じです。
機能 next と対を成し、ループを構成するワードです。 使用方法は、初期値、終了値の順序でスタックに値を積み、 順次カウンタ変数を減少させながら終了値まで変化します。

初期値の方が終了値よりも小さな場合は、 for- 〜 next では 1 度もループは回りません。

使用例 次の例では、10 から 0 まで(0 にはなりません)の値を画面に表示させています。
> 10 0 for- i . next
  10 9 8 7 6 5 4 3 2 1 ok.
エラー エラーは発生しません。

foreach

実行レベル 標準実行レベル
スタックの変化 𝓁 W --- 不定(TOS にあるワードによる)
機能 スタックより TOS およびセカンドを取り出し、次の処理を行います: セカンドに格納されていたリストの各要素を先頭より順次取り出し、 TOS に格納されていた(無名)ワードをそれぞれの要素に順次適用します。

なお、TOS に格納された(無名)ワード中では、 ワード i により、 現在処理中の値が対象のリストにおいて先頭から何番目であるかを 知ることができます。

使用例 次の例では、リスト中にある数値の総和を求めて表示しています。
> 0 ( 10 20 30 ) { + } foreach .
  60 ok.
エラー スタックが空であったり、 セカンドがリストでなかったり TOS がワードでない場合は エラーとなります。

forget

実行レベル 標準実行レベル
スタックの変化 { S | σ } ---
機能 TOS にある文字列またはシンボルと同名のワードを指定できなくします。 短縮名および正規名のワードに本ワードを適用した場合の挙動については、 set-delete-by-forget または clear-delete-by-forget を 参照して下さい。
使用例 次の例では、hello というワードを定義し、 短縮名で登録されているものを消去しています。 本ワードで消去されるのは指定した短縮名のみのものですので、 正規名である user:hello は消去されていません (正規名の方も消去したい場合は "user:hello" forget として下さい)。
> `hello : "HELLO!" .cr ;
  ok.
> hello
  HELLO!
  ok.
> "hello" forget
  ok.
> hello
  エラー : 無効なトークン 'hello' です。
> user:hello
  HELLO!
  ok.
エラー スタックが空であったり、TOS が文字列やシンボルでない場合はエラーとなります。

full-clone

実行レベル 標準実行レベル
スタックの変化 X --- X X
機能 TOS にある値を複製します。 ワード clone では 各要素は同じ実体を指す複製をしますが、 このワードは要素も異なる実態を指すよう複製を行います。
使用例 次の例では、要素単位で異なる実体を持つように 複製している様子を示しています。 clone で複製したものは、要素の複製は 同じ実体を指すように複製しているので、 同じ値が表示されています。
> ( () ) full-clone 0 get 123 append drop . .
  ( ( 123 ) ) ( ( ) ) ok.
> ( () ) clone 0 get 123 append drop . .
  ( ( 123 ) ) ( ( 123 ) ) ok.
エラー スタックが空の場合は、エラーとなります。

fwrite

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS にあるファイルに対し、セカンドにある値を文字列化し出力します。
使用例 使用例はありません。
エラー スタックが想定されている状態でない場合はエラーとなります。

get

実行レベル 標準実行レベル
スタックの変化
A I --- X
または
I --- X
または
Z Xk --- Xv
機能

TOS およびセカンドから値を取り出し、 セカンドにある配列またはリストもしくは連想配列に対し、 TOS にある値をインデックス値として値を読み出し、 スタックに積みます。

配列またはリストについては、指定したインデクス(I)に 対応する値(X)をスタックに積みます。 連想配列の場合はインデックスではなく、 キー(Xk) に紐付けられている値(Xv)を読み出し、スタックに積みます。

配列およびリストに対するインデックスは 0 オリジンです。 有効なインデックスの最小値は 0 であり、 最大値は配列もしくはリストの要素数-1 となります(C 言語と同じです)。

なお、配列に対してはスレッドセーフです。

使用例 次の例では、配列の 1 番目に格納されている "hello" という文字列を取り出し、表示します。
> 5 new-array   ← 要素数 5 の配列を作成して、
  ok.
↓ 1 番目の要素に"hello" という 文字列を代入します。
> 1 "hello" set  
  ok.
> 1 get .  
  hello ok.
↑ 1 番目に格納されている値 ("hello")を get で取り出し、 . (ドット)で表示しています。
エラー スタックに積まれているデータの数が 2 未満であったり、 TOS が有効なインデックス値でなかったり、 スタックの上から 2 番目の値が配列・リスト・連想配列でない場合は エラーとなります。

get-attr

実行レベル 標準実行レベル
スタックの変化 W Xk --- Xv
機能 セカンドにあるワードに対し、 TOS の値をキーとして関連する値を取り出します。
使用例 次の例では、hello というワードに対し、 logLevel というキーに割り当てられた値を取り出して表示しています:
> `hello : "HELLO" .cr ;
  ok.
> "hello" >word "logLevel" 5 set-attr
  ok.
> "hello" >word "logLevel" get-attr .
  5 ok.
エラー セカンドにワードが格納されていない場合はエラーとなります。 また、TOS に指定されたキーが存在しない場合もエラーとなります。

get-line

実行レベル 標準実行レベル
スタックの変化
--- S
または
---
機能 標準入力もしくは疑似標準入力から 1 行読み込みます。 読み込んだ情報は文字列としてスタックにプッシュされます。 EOF を読み込んだ場合は文字列ではなく、 EOF 値をスタックに積みます。
使用例 次の例では、
> "input your name: " . get-line "your name is" . . cr
input your name: Koji ← Koji と入力
your name is Koji
  ok.
エラー エラーは発生しません。

get-line-from-mock-stdout

実行レベル 標準実行レベル
スタックの変化 --- S
機能 疑似標準出力より 1 行分の文字列を取得します。
使用例 次の例では、疑似標準出力モードに変更後、 文字列 "abc" をワード .cr にて 擬似標準出力に出力し (ワード .cr は擬似標準出力モードに対応のワード)、 その出力された文字列を本ワードで取得し、 標準出力に出力しています。
> use-mock-stdout "abc" .cr
  ok.
> use-stdout
  ok.
> get-line-from-mock-stdout .
  abc ok.
エラー エラーは発生しません。

get-std-code

実行レベル 標準実行レベル
スタックの変化 S1 S1 --- C
機能 S1 を動的ライブラリファイルへのパスと解釈し、 その動的ライブラリファイルより S2 で示される名前を持つ 標準コード(へのポインタ)を取得し、スタックに積みます。
使用例 ワード exec の例を参照して下さい。
エラー スタックに 2 つの文字列が積まれていないとエラーとなります。 指定された動的ライブラリファイルが存在しなかったり、 もしくは、指定された動的ライブラリファイル中に、 指定された標準コードが存在しなかった場合にもエラーとなります。

get-voc

実行レベル 標準実行レベル
スタックの変化
S --- S
または
W --- S
機能 TOS で指定されているワード名もしくはワードが属する ボキャブラリ名をスタックに積みます。
使用例 サンプルコードはありません。
エラー スタックが空であったり、 指定されたワードが見つからない場合はエラーとなります。

global

実行レベル 標準実行レベル
スタックの変化 X S ---
機能 TOS にあるシンボル(または文字列)と同名の大域変数を定義し、 セカンドにある値で初期化します。 大域変数の詳しい説明については、 ワード global-decl の説明を参照して下さい。
使用例 次の例では、x という大域変数を定義し、 値の取り出しを行っています。
> "zapper" `weapon-name global
  ok.
> $weapon-name> .
> zapper ok.
エラー TOS がシンボルや文字列でない場合はエラーとなります。 また、スタックの深さが 2 以上出ない場合 (セカンドが存在しない場合)もエラーとなります。

global-decl

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS にあるシンボル(または文字列)と同名の変数を定義します。 変数と言っても、その実態は変数名と同名のワードを定義するものです。 変数として定義されるワードでは、 情報の格納場所となるメモリアドレスをスタックに積む動作をします。 実際に変数に値を格納する場合、このアドレスに対しワード store を実行します。 また、値を参照する場合にはワード fetch を実行します。

変数への代入や参照のために、2 ワードも使用するのは煩雑です。 そのため、本ワードでは、>$変数名 や $変数名> というワードをあわせて 定義します。 例えば、x という変数名を "x" global-decl として定義した場合、 x に代入を行う >$x や、変数 x に格納されている値を取り出す $x> というワードも定義します。 もちろん、変数名が count というものであれば、 >$count と $count> というワードを定義します。

本ワードにて定義されるワード群は、 他のワード同様に辞書に格納されます。 そのため、並列実行している(もしくはしていない) 全てのコンテキストから使用可能です。 また、保持している値も、全てのコンテキストにて同じ値となります。 このことは、コンテキスト単位でローカルに変数を宣言する local と大きく異なる部分です。 ワード local で宣言した変数の場合、 同名の変数であっても各コンテキスト毎に保持している値が異なりますし、 また、場合によってはあるコンテキストでは、 指定されたローカル変数が存在しない可能性もあります。

ローカル変数はワード内でしか宣言できませんが、 本ワードはそのような制限はありません。 なので、インタラクティブモードでも変数の定義が可能です。

なお、>$x などのユーティリティワードはスレッドセーフです。

使用例 次の例では、x という大域変数を定義し、 値の代入と取り出しを行っています。
> "x" global-decl ← x という大域変数を宣言します
  ok.
> 123 >$x ← x に 123 を代入します
> $x> . ← x に格納された値を取り出します
  123 ok.
エラー TOS がシンボルや文字列でない場合はエラーとなります。 また、TOS の文字列と同名のワードが存在する場合もエラーとなります。

has-any-attr?

実行レベル 標準実行レベル
スタックの変化 W --- B
機能 TOS にあるワード W を取り出し、 W が属性情報を持つ場合は true を、 そうでない場合は false をスタックに積みます。
使用例 次の例は、 ワード hello に set-attr にて属性を加える前後で、 本ワードがスタックに積む値が変化する様子を示しています:
> `hello : "HELLO" .cr ;
  ok.
> "hello" >word has-any-attr? .
  false ok.
> "hello" >word "debug" true set-attr
  ok.
> "hello" >word has-any-attr? .
  true ok.
エラー TOS がワードへのポインタでない場合は、エラーとなります。

has-attr?

実行レベル 標準実行レベル
スタックの変化 W X --- B
機能 セカンドで指定されたワードに対し、 TOS にある値をキーとして持つ属性要素が存在するか否かを調べます。 存在する場合は true を、そうでない場合は false をスタックに積みます。
使用例 remove-attr の使用例を参照して下さい。
エラー セカンドにワードへのポインタが無い場合はエラーとなります。

has-key?

実行レベル 標準実行レベル
スタックの変化 Z X --- Z B
機能 セカンドにある連想配列に対して、 TOS の値をキーとして有していあるか否かを調べます。 TOS の値は消費しますが、セカンドにある連想配列は消費しません。
使用例 次の例では、XEVIOUS という文字列をキーとして 含むか否かを調べています。
> new-assoc "XEVIOUS" 1983 @set
  ok.
> "XEVIOUS" has-key? .
  true ok.
> "GALAGA" has-key? .
  false ok.
エラー セカンドに連想配列が積まれていないと、エラーとなります。

has?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 スタックより TOS およびセカンドを取り出し、TOS にあるリスト中に、 セカンドの要素が含まれているか否かを調べます。 含まれている場合は true をプッシュします。

swap in? と同値です。

使用例 次の例では、リスト ( 3 4 ) が TOS にあるリスト中に含まれているか どうかを調べています。
> ( 3 4 ) ( 1 2 ( 3 4 ) 5 ) has? .
  true ok.
エラー スタックに 2 つ以上の値が存在しなかったり、 TOS がリストでない場合はエラーとなります。

i

実行レベル 標準実行レベル
スタックの変化 --- K
機能 ループ内のカウンタ値を取得するため、 for+next もしくは for-next 内にて使用されます。 この場合、当該ループにおけるカウンタ値をスタックに積みます。

他の使い方としては、リストに対する map, filter, find において、各ワードにおける処理用のワード内で使用されます。 この場合は、現在処理対象となっている要素の リスト内での位置(インデックス値)を スタックに積みます。

このワードは @r> と同等の処理を行います。

使用例 使用例はワード for+ や、 ワード map 等のものを参照して下さい。
エラー for+ 〜 next 等のループ内もしくは 各種処理用ワード内で適切に使用されないとエラーとなる場合があります (リターンスタックが空、などのエラーが発生する場合があります)。

if

実行レベル 即時実行レベル 1
スタックの変化 RS: --- θ π
機能 ワード then や else と対を成し、条件により処理する内容を変化させます。 詳細は次の使用例を見て下さい。

条件分岐が多段にわたる場合は、 switchdispatch の 使用をおすすめいたします。

使用例 次の例では、TOS の絶対値をスタックに積むワード myAbs を定義します。
> `myAbs : dup 0 < if -1 * then ;
  ok.

このワードを実際に使ってみると、
> -5 myAbs .
  5 ok.
> 3 myAbs .
  3 ok.
となり、TOS の絶対値が得られていることが分かります。

  次の例では、TOS が true であれば ZUN、false であれば DOKO と プリントする PutZunDoko なるワードを定義します。
> `PutZunDoko : if "ZUN" else "DOKO" then . ;
  ok.

このワードを実際に使ってみると、
> true PutZunDoko
  ZUN ok.
> false PutZunDoko
  DOKO ok.
となり、TOS の値に応じて ZUN、DOKO と表示されています。
エラー エラーは発生しません。

immediate

実行レベル 標準実行レベル
スタックの変化 ---
※ 変化しません。
機能 最後に定義したワードに即時実行属性を与えます。
使用例 次の例では、hello というワードを即時実行属性とし、 test というワードの定義中であっても、 hello が実行され、 結果として "HELLO" というメッセージが表示される様子を示しています。
> `hello : "HELLO" . cr ; immediate
  ok.
> `test : hello "this is a test word." . cr ;
  HELLO
  ok.
エラー 定義されたワードが存在しない場合はエラーとなります。

import

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS にある文字列をファイルのパスとして取り出し、 そのファイルを動的ライブラリとして読み込み、 その動的ライブラリ中に定義されている InitDict 関数を呼び出します。

ここでいう動的ライブラリとは OS が提供しているものです。 Paraphrase では、動的ライブラリという仕組みは用意していません。 InitDict 関数は C 言語等で記述されているものを想定しています。 起動される InitDict 関数は、その名前の通り、 C++ で記述された拡張ワードを定義・追加することを期待していますが、 新たなワードが実際に追加されたか否かまでは確認しません。

使用例 次の例では、src/dict/ext サブディレクトリにある extVec3.so をインポートしています。
> "src/dict/ext/extVec3.so" import
  ok.
エラー スタックが空であったり、TOS が文字列でなかった場合はエラーとなります。 TOS で指定されたファイルが見つからなかったり、 オープンできなかった場合についてもエラーとなります。 もちろん、指定した動的ライブラリ中に InitDict という 関数が見つからない場合もエラーとなります。

呼び出される InitDict 中においてもエラーが発生する可能性があります。 InitDict の実行中に発生する可能性のあるエラーについては、 それぞれの動的ライブラリの提供者による仕様を確認するようにして下さい。

in?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 スタックより TOS およびセカンドを取り出し、 TOS にある値がセカンドにあるリスト中に含まれているか否かを調べます。 含まれている場合は true をプッシュします。
使用例 次の例では、
> ( apple banana cherry ) `apple in? .
  true ok.
エラー スタックに 2 つ以上の値が存在しなかったり、 セカンドがリストでない場合はエラーとなります。

inspect

実行レベル 標準実行レベル
スタックの変化 X --- X
※ 変化しません。
機能 TOS にある値の情報を表示します。
使用例 次の例では、2 の平方根を計算し、その値についての情報を表示させています。
> 2 sqrt inspect
  dataType:double value:1.414214
  ok.
エラー スタックが空の場合はエラーとなります。

int-type

実行レベル 標準実行レベル
スタックの変化 --- L
機能 int 値を表す型情報の数値をスタックに積みます。
使用例 使用例はありません。
エラー エラーは発生しません。

int?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が int である場合には true を さもなければ false をスタックに積みます。
使用例 次の例では、局所変数 x に格納されている値が int であるか否かを調べています。

> `test : `x local `x , int? . ;
  ok.
> 123 test
  true ok.
エラー スタックが空の場合はエラーとなります。

interactive?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 対話モードであるか否かを確認します。 対話モードである場合には true をスタックに積み、 そうでない場合は false をスタックに積みます。

対話モードでない場合とは、例えば引数にスクリプトファイルが指定され、 そのスクリプトファイル内でプログラムが実行されている場合などです。

使用例 以下の例は、記述されているスクリプトファイルが 引数に与えられた場合に限り、スクリプトファイルの引数をチェックし、 何も引数が与えられなかったら help メッセージを表示する、という例です。
`help : "usage: ..." .cr ;
interactive? not if
    args size 0? if
      help cr -1 exit
    then
then
エラー エラーは発生しません。

inv-rot

実行レベル 標準実行レベル
スタックの変化 a b c --- c a b
機能 TOS を取り出し、スタックの上から 2 番目へ挿入します。 ワード rot の逆であり、rot を 2 回繰り返すことと同値です。
使用例 次の例では、ワード rot によりスタックの上から 3 つの値が その位置を回転させている様子を示しています。
> 1 2 3 inv-rot show
      +---+
TOS-->| 2 |
      | 1 |
      | 3 |
DS:-----------
 ok.
エラー スタックに値が 3 つ以上存在しない場合はエラーとなります。

invalid

実行レベル 標準実行レベル
スタックの変化 --- η
機能 無効な値(η)をスタックに積みます。
使用例 サンプルコードはありません。
エラー エラーは発生しません。

invalid?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS から値を取り出し、その値がが無効な値であるかどうかを調べます。 無効な値であれば true を、さもなければ false をスタックに積みます。 valid? not と同値です。
使用例 サンプルコードはありません。
エラー スタックが空の場合はエラーとなります。

is?

実行レベル 標準実行レベル
スタックの変化 X1 X2 --- B
機能

TOS とセカンドより値を取り出し、 その 2 つの値が「同一」であるかどうかを調べます。 同一である場合は true を、 さもなければ false をスタックに積みます。

本ワードにおける同一の定義ですが、 メモリへの参照を値として用いているものについては、 同一のメモリを指し示している場合は、 それらは同一であると判定します。 そうでないもの - 例えば整数値など -は、 同じ値である場合に同一と判断します。

そのため、文字列の内容としては同じものであっても、 本ワードでは false を返す場合もあります (指し示すメモリの場所が異なるため)。 もちろん、ワード == では文字列の内容が同じですので、 true をスタックに積みます。 詳しくは次の使用例を見て下さい。

使用例 次の例では、文字列としては同じ内容を持つ文字列をスタックに積み、 それが本ワードによって同一でないと判定される様子を示しています:

> "abc" "abc" is? .
  false ok.

文字列は値として出現するたびにメモリ上に構築されますので、 このような結果となりますが、ワード dup で複製する場合は、 メモリ上の同一の領域を参照する文字列として複製しますので、 このよううに生成された 2 つの文字列は同一であるものとして判断されます:

> "abc" dup is? .
  true ok.
エラー スタック上に 2 つの値が存在しない場合はエラーとなります。

j

実行レベル 標準実行レベル
スタックの変化 --- J
機能 for+next もしくは for-next における二重ループ内にて使用され、 ひとつ外側のループにおけるカウンタ値をスタックに積みます。
使用例 次の例は、九九の表を出力します。
 > 1 9 for+
>>   1 9 for+
>>     j i * "%2d " putf
>>   next
>>   cr
>> next
 1  2  3  4  5  6  7  8  9
 2  4  6  8 10 12 14 16 18
 3  6  9 12 15 18 21 24 27
 4  8 12 16 20 24 28 32 36
 5 10 15 20 25 30 35 40 45
 6 12 18 24 30 36 42 48 54
 7 14 21 28 35 42 49 56 63
 8 16 24 32 40 48 56 64 72
 9 18 27 36 45 54 63 72 81
 ok.
エラー for+ 〜 next 内等で適切に使用されないとエラーとなる場合があります (リターンスタックが空、などのエラー)。

join

実行レベル 標準実行レベル
スタックの変化 { Q | A | | Z } ---
機能 TOS にあるコンテキストまたは コンテナに格納されているコンテキストで実行されている (全ての)スレッドの終了を待ちます。
使用例 使用例はありません。
エラー TOS が想定されている型の値でなかったり、 コンテナにコンテキスト以外の値が格納されている場合はエラーとなります。

last

実行レベル 標準実行レベル
スタックの変化
--- X
または
A --- X
機能 TOS より配列またはリストを取り出し、 その最後もしくは末尾に格納されている要素を スタックに積みます。
使用例
> ( 11 22 33 ) last .
  33 ok.
エラー TOS が配列やリストでなかったり、 配列やリストが空である場合などはエラーとなります。

last-defined-word

実行レベル 標準実行レベル
スタックの変化 --- W
機能 最後に定義したワードへのポインタをスタックにプッシュします。 言語処理系が起動されてから、まだワードを定義していない場合は 無効な値(η)がプッシュされます。 処理系が終了すると、最後に定義されたワードの情報は失われます (再度、処理系を起動し、起動直後に本ワードを実行すると、 無効な値がプッシュされます)。
使用例 使用例はありません。
エラー エラーは発生しません。

leave

実行レベル 即時実行レベル 1
スタックの変化 ---
※ 変化しません。
機能 本ワード leave が所属するループを終了させます。

このワードは、

  • for+ 〜 next
  • for- 〜 next
  • while 〜 repeat
  • wihle-pipe 〜 repeat
の各種ループに対応しています。

whilerepeat ループにて使用する場合は、 ワード dorepeat との間で使用して下さい。 whiledo の間で 使用するとエラーとなります。

使用例 次の例では、1 から 10 まで for+ ループを回していますが、 カウンタ変数の値が 5 以上になったところで leave ワードを用いて中断しています。
> 1 10 for+ i . i 5 >= if leave then next
1 2 3 4 5 ok.
>
エラー イミディエイトモードで使用するとエラーとなります (ただし、一般的な使用においては、 for+ ワードなどをイミディエイトモードで使用すると、 一時的にコンパイルモードに移行します。 そのため、イミディエイトモードにおいても 一見すると本ワードが使用できるように見えますが、 それはコンパイルモードで使用していることに他なりません)。 また、抜け出すループが所属するワードと、 同一のワード定義に所属していない場合はエラーとなります (正しくコンパイルされません)。 ループブロック以外で使用した場合の挙動は不明です。

let

実行レベル 即時実行レベル 1
スタックの変化 ---
機能 変数に値を代入するワード _setValue をコンパイルします。 本ワードでは何もスタックを消費しませんが、 このワードが書かれている処理では、 TOS にある変数(シンボルまたはシンボルリスト)に セカンド以下の値を代入する、という動作となります。 詳細については以下の使用例を見て下さい。
使用例その 1 次の例では、t という変数に値 10 を設定しています。
 > { `t local-decl
>> 10 `t let
>> t , "t=%d\n" putf
>> } exec
  t=10
  ok.
使用例その 2 次の例では、x, y, z という変数にそれぞれ 10, 20, 30 という値を設定しています。
 > { ( x y z ) local-decl
>> 10 20 30 ( x y z ) let
>> ( "(x,y,z)=(%d, %d, %d)\n" x y z ) printf >> } exec
  (x,y,z)=(10, 20, 30)
  ok.
エラー エラーは発生しません。 本ワードにてコンパイルされるワード _setValue では、 TOS がシンボルの場合は、セカンドに値が存在しなければエラーとなります。 また、TOS がシンボルリストである場合、 そのリスト中に存在するシンボルの数以上に セカンド以降にデータが存在しなければエラーとなります。

linux?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 Linux 上で実行されているか否かを示します。 Linux 上で実行されているのであれば true をプッシュし、 そうでなければ false をプッシュします。
使用例 使用例はありません。
エラー エラーは発生しません。

list?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS にある値を取り出しリストか否かを調べます。 リストであれば true を、そうでなければ false をスタックに積みます。
使用例 次の例では、TOS にある値がリストか否かを調べています。
> ( apple banana cherry ) list? .
  true ok.
エラー スタックが空の場合はエラーとなります。

load

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS にある文字列をファイルのパスとして取り出し、 そのファイルを Paraphrase のプログラムとしてを読み込み、実行します。

言語処理系 para の引数としてスクリプトファイルを指定した場合は、 TOS で指定されたファイルの読み込みに失敗しても、 当該スクリプトファイルが存在するディレクトリからの読み込みを試みます。 なお、TOS で指定されたファイルが絶対パスにて記述されている場合、 この機能は有効になりません。

使用例 次の例では、samples サブディレクトリにある PE21mt.p8e を 読み込んで実行しています。

> "samples/PE21mt.p8e" load
  ok.
エラー スタックが空であったり、 TOS が文字列でない場合はエラーとなります。

local

実行レベル 即時実行レベル 1
スタックの変化
コンパイル時: ---
実行時: X ---
機能 現在定義中のワード(無名ワード含む)にローカル変数を宣言し、 その後ワード let と同等の処理をコンパイルするだけであり、 スタックの変化はありません。 定義中のワードの定義が終わり、当該ワードを実行する際には、 TOS を取り出し、その値を宣言したローカル変数に格納します。
使用例 次の例では、シンボルリストを用いて x y z という 3 つのローカル変数を宣言し、それぞれに 10, 20, 30 という 初期値を設定しています。
 > { 10 20 30 ( x y z ) local   // 宣言と初期化
>>   ( "(x,y,z)=(%d, %d, %d)\n" x y z ) printf
>>   } exec
  (x,y,z)=(10, 20, 30) ok.
エラー (無名)ワードの定義中でない場合はエラーとなります。

local-decl

実行レベル 即時実行レベル 1
スタックの変化 ---
機能 現在定義中のワード(無名ワード含む)にローカル変数を宣言します。 コンパイル時においてはスタックの変化はありません。
使用例 次の例では、ローカル変数 count に 100 を代入し、 その値を表示させています。
 > { `count local-decl   // count の宣言
>>   100 `count let // count に 100 を代入
>>   `count ,   // count に格納されている値を取得
>>   .    // 表示
>>   } exec
  100 ok.
エラー (無名)ワードの定義中でない場合はエラーとなります。

log

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 TOS にある数値の自然対数を計算し、 スタックに積みます。
使用例 次の例では、10 の log を計算し、その値を表示しています。
> 10 log .
  2.302585 ok.
エラー スタックが空であったり、TOS が数値でない場合はエラーとなります。

log10

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 TOS にある数値に対し、10 を底とする対数(常用対数)を計算し、 スタックに積みます。
使用例 次の例では、100 の常用対数を計算し、その値を表示しています。
> 100 log10 .
  2.000000 ok.
エラー スタックが空であったり、TOS が数値でない場合はエラーとなります。

long-type

実行レベル 標準実行レベル
スタックの変化 --- L
機能 long 値を表す型情報の数値をスタックに積みます。
使用例 使用例はありません。
エラー エラーは発生しません。

long?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が long である場合には true を さもなければ false をスタックに積みます。
使用例 次の例では、局所変数 x に格納されている値が long であるか否かを調べています。

> `test : `x local `x , long? . ;
  ok.
> 123L test
  true ok.
エラー スタックが空の場合はエラーとなります。

loop

実行レベル 即時実行レベル 1
スタックの変化
実行時
  B ---

即時実行時
RS: --- θ
SS: --- α4 α3 α2 α1 I0 κ
※ SS における各情報は、ワード for+ と同様ですが、 κ は while ループを示す値となり、 α2 は α1 と同じ値が格納されます。 while ループでも for{+|-} ループで使用できる、 ワード continueleaveredo を使用可能とするため、 for{+|-} ループと構文情報チャンクの書式を同じ形式にしています。
機能 loop 〜 repeat 部を最低 1 回は実行する以外は while と同じです。 true while と入力することと同値です。
使用例 次の例では、10 から 1 までの値を loop 〜 repeat を用いて表示しています。
> 10 loop dup . 1 - dup 0 > repeat
  10 9 8 7 6 5 4 3 2 1 ok.
エラー 本ワード実行時にはエラーは発生しません。 しかし、本ワードにより生成されたコードの実行時には、 TOS が真偽値でない場合はエラーとなります。

loop-epilogue

実行レベル 標準実行レベル
スタックの変化 RS: X X ---
機能 繰り返し処理の後処理を行います。 drop-rs drop-rs と同じ処理を行うワードです。
使用例 使用例はありません。
エラー RS に 2 つの値が積まれていない場合はエラーとなります。

mac?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 Mac 上で実行されているか否かを示します。 Mac 上で実行されているのであれば true をプッシュし、 そうでなければ false をプッシュします。
使用例 サンプルコードはありません。
エラー エラーは発生しません。

make-literal-code-list

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS から文字列を取り出し、 その文字列中の文字コードを、 新規作成したリストに順次追加していきます。 文字コードは UTF8 でエンコーディングされているものとして処理されます。
使用例 文字列 "日本語" から、 それぞれの文字コードからなるリストを生成しています。
> "日本語" make-literal-code-list { to-hex-str } map .
  ( E697A5 E69CAC E8AA9E ) ok.
エラー TOS が文字列でない場合はエラーとなります。

map

実行レベル 標準実行レベル
スタックの変化 W ---
機能 セカンドにあるリストに対して、TOS にあるワードを適用します。 本ワードは、TOS にあるワード(以下、map 用ワードと呼ぶことにします) およびセカンド(以下、処理対象リストと呼ぶことにします)の 値を取り出します。 なお、map 用ワードは無名ワード(ラムダ)であってもかまいません。

TOS およびセカンドを取り出した後、 処理対象リストの各要素に対し、 その値をスタックにプッシュし、 map 用ワードを呼び出すことを繰り返します。

map 用ワードは、基本的に、

  1. スタックからひとつ値を取り出し、
  2. 何か処理を行った後、
  3. スタックに値をひとつ返す、
という動作を期待されています。 もちろん、このような処理でなくとも動作します (が、map 用ワードにおけるスタックの深さの変化がある場合は、 本ワード実行前後のスタックの変化は、 必ずしも「スタックの変化」に示しているものに なるとは限りません)。

本ワードでは、 map 用ワードの終了直後の TOS を新たに生成されるリストに 都度追加していきます。 そのため、map 用ワードがスタックから値を取り出さず、かつ、 新たにスタックに値を積まない場合は、 処理対象リストの該当要素がそのまま新しいリストに 追加されることとなります。

map 用ワードでは、現在処理している要素の要素番号 (インデックス値)をワード i を 実行することで取得できます(スタックに積まれます)。

使用例 次の例では、リストの各要素の値を示しつつ、 それぞれの要素の値を 10 倍しています。
> ( 1 2 3 ) { i "element %d is " putf dup .cr 10 * } map .
element 0 is  1
element 1 is  2
element 2 is  3
 ( 10 20 30 ) ok.
エラー TOS がワードでなかったり、セカンドがリストでない場合にはエラーとなります。

map-let

実行レベル 即時実行レベル 1
スタックの変化 実行時: ---
機能 TOS よりリストまたは配列を取り出し、 そのリストの要素を指定された局所変数に代入します。 局所変数の宣言を行わないところが、 map-local と異なるところです。
使用例 次の例では、局所変数 a , b , c にそれぞれ 'apple' , 'banana' , 'cherry' という文字列を代入しています。

> `test :
>>    ( a b c ) local-decl
>>    ( a b c ) map-let
>>    'a=' . `a , .cr
>>    'b=' . `b , .cr
>>    'c=' . `c , .cr
>> ;
  ok.
> ( 'apple' 'banana' 'cherry' ) test
a= apple
b= banana
c= cherry
  ok.
エラー TOS がリストでなかったり、 TOS に積まれているリストと宣言に使用される局所変数のリストのサイズが 異なっている場合はエラーとなります。 指定された局所変数のリストに、未宣言の局所変数名が含まれている場合も エラーとなります。

map-local

実行レベル 即時実行レベル 1
スタックの変化 実行時: ---
機能 本ワードの直前にコンパイルされているリストの各要素を局所変数の名前とし、 局所変数の宣言を行います。 現在定義中のワードを実行した際には、 これら宣言された局所変数に対し、TOS よりリストまたは配列を取り出し、 そこに格納されている要素の値にて局所変数を初期化します。
使用例 次の例では、局所変数 a , b , c にそれぞれ 'apple' , 'banana' , 'cherry' という文字列を代入しています。

> `test :
>>    ( a b c ) map-local
>>    'a=' . `a , .cr
>>    'b=' . `b , .cr
>>    'c=' . `c , .cr
>> ;
  ok.
> ( 'apple' 'banana' 'cherry' ) test
a= apple
b= banana
c= cherry
  ok.
エラー TOS がリストでなかったり、 TOS に積まれているリストと宣言に使用される局所変数のリストのサイズが 異なっている場合はエラーとなります。

局所変数よりも多くの要素を持つリストが与えられたときでも、 エラーを発生させたくない場合は、ワード >param を使用して下さい。

max

実行レベル 標準実行レベル
スタックの変化 N N --- N
機能 TOS とセカンドのうち、大きい方の値を残します。
使用例
> 3 5 max .
  5 ok.
エラー スタック上に 2 つの数値がない場合はエラーとなります。

max-zip

実行レベル 標準実行レベル
スタックの変化 ℒ1 ℒ2 ---
機能 TOS およびセカンドからリスト L1 および L2 を取り出し、 L1 の要素と L2 の要素から成る 2 つ組のリスト(タプル)を生成し、 それらから構成されるリストをスタックに積みます。

生成されるリストは L1 と L2 の要素数の多い方のリストと 同じ要素数となります。 不足している分の値は無効な値(invalid)となります。 詳細は使用例を見て下さい。

使用例 次の例では、リスト ( Toroid Tarkan Bacula ) ( 30 50 ) に対し、 max-zip を適用し、その結果を表示しています:

> ( Toroid Tarkan Bacula ) ( 30 50 ) max-zip .
  ( ( Toroid 30 ) ( Tarkan 50 ) ( Bacula (invali-value) ) ) ok.
エラー TOS およびセカンドがリストでない場合はエラーとなります。

max-zip-with

実行レベル 標準実行レベル
スタックの変化 ℒ1 ℒ2 X ---
機能

ワード max-zip では、 対になる要素が存在しない場合は、 無効な値(invalid)が割り当てられていました。 本ワードを用いると、TOS の値を 対が無い場合のデフォルト値として指定できます。

スタックの上から 3 番目と 2 番目に格納されているリスト L1 および L2 を 取り出し、 L1 の要素と L2 の要素から成る 2 つ組のリスト(タプル)を生成し、 それらから構成されるリストをスタックに積みます。

生成されるリストは L1 と L2 の要素数の多い方のリストと 同じ要素数となります。

使用例 次の例では、リスト ( Toroid Tarkan Bacula ) ( 30 50 ) に対し、 対と成る値が存在しない場合のデフォルト値として "undestructible" を指定しています。

> ( Toroid Tarkan Bacula ) ( 30 50 ) "undestructible" max-zip-with .
  ( ( Toroid 30 ) ( Tarkan 50 ) ( Bacula "undestructible" ) ) ok.
エラー TOS およびセカンドがリストでない場合はエラーとなります。

min

実行レベル 標準実行レベル
スタックの変化 N N --- N
機能 TOS とセカンドのうち、小さい方の値を残します。
使用例
> 3 5 min .
  3 ok.
エラー スタック上に 2 つの数値がない場合はエラーとなります。

min-zip

実行レベル 標準実行レベル
スタックの変化 ℒ1 ℒ2 ---
機能 TOS およびセカンドからリスト L1 および L2 を取り出し、 L1 の要素と L2 の要素から成る 2 つ組のリスト(タプル)を生成し、 それらから構成されるリストをスタックに積みます。

生成されるリストは L1 と L2 の要素数の少ない方のリストと 同じ要素数となります。 詳細は使用例を見て下さい。

使用例 次の例では、リスト ( ZOP AH SHEO ) ( 0 1 2 3 4 ) に対し、 min-zip を適用し、その結果を表示しています:

> ( ZOP AH SHEO ) ( 0 1 2 3 4 ) min-zip .
  ( ( ZOP 0 ) ( AH 1 ) ( SHEO 2 ) ) ok.
エラー TOS およびセカンドがリストでない場合はエラーとなります。

mkdir

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS より文字列を取り出し、 その文字列をパスとするディレクトリを作成します。
使用例 使用例はありません。
エラー スタックが空であったり、 TOS が文字列でなかった場合はエラーとなります。 また、文字列で指定されたパスに既に 同名のディレクトリが存在する場合など、 当該ディレクトリを作成できない場合もエラーとなります。

new-array

実行レベル 標準実行レベル
スタックの変化 I --- A
機能 このワードはスタックより正の整数をひとつ取り出し、 その値の要素数を持つ配列を生成し、 その配列をスタックに積みます。
使用例 次の例では、5 個の要素からなる配列を生成しています。
> 5 new-array
  ok.
  配列の初期値は無効な値(invalid-value)です。 TOS を取り出し・表示するワード . (ドット)が、 配列にも対応しているため、 次のようにして配列の初期値を確認できます。
> 5 new-array .
  array (size=5 data=0x7fafc6e005e8) [0]= (invalid-value) [1]= (invalid-value) [2]= (invalid-value) [3]= (invalid-value) [4]= (invalid-value) ok.
エラー スタックが空であったり、 スタックにデータが存在しても TOS が整数でなかったり、 整数であってもその値が正でない場合はエラーとなります。

new-array-with

実行レベル 標準実行レベル
スタックの変化 I X --- A
機能 このワードはスタックより配列の初期値と、 正の整数をそれぞれひとつ取り出し、 その値の要素数を持つ配列を生成し、 指定された初期値で初期化された配列をスタックに積みます。
使用例 次の例では、3 個の要素からなり、 0.0 という値で初期化された配列を生成しています。
> 3 0.0 new-array-with .
  array (size=3 data=0x7fafc6e005e8) [0]= 0.000000 [1]= 0.000000 [2]= 0.000000 ok.
エラー 想定されている状況のデータがスタック上に存在しない場合はエラーとなります。

new-assoc

実行レベル 標準実行レベル
スタックの変化 --- Z
機能 空の連想配列を生成し、スタックに積まれます。
使用例 次の例では、連想配列を作成し、 作成した連想配列に "Xevious" というキーに対し、 "NAMCO" という値を紐付けています。
> new-assoc
  ok.
> "Xevious" "NAMCO" @set
  ok.
> show
      +---------------------------+
TOS-->| assoc ( >Xevious,NAMCO< ) |
DS:-----------------------------------
 ok.
エラー エラーは発生しません。

new-file

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS にある文字列をファイルパスとして取り出し、 そのファイルを新規作成しオープンします。 その後、オープンされたファイルのファイルオブジェクトをスタックに積みます。 指定されたファイルパスに既にファイルが存在する場合、 そのファイルの内容は失われます。
使用例 次の例では、hello.txt というファイルを新規にオープンし、 そのファイルに hello world と改行コード付きで主力します。
> "hello.txt" new-file "hello world\n\n" >file close
  ok.
エラー TOS が文字列でなかったり、 指定されたファイルパスのファイルがオープンできなかった場合は エラーとなります。

next

実行レベル 即時実行レベル 1
スタックの変化 θ π1 π2 ---
機能 for と対を成し、ループを形成します。 π1, π2 に関してはワードfor の説明を 参照して下さい。
使用例 使用例もワード for の説明を参照して下さい。
エラー リターンスタック上にしかるべきデータが存在しない場合はエラーとなります。

not

実行レベル 標準実行レベル
スタックの変化 B --- B
機能 TOS の否定を計算し、スタックにプッシュします。
使用例 次の例では、true の否定を計算しています。
> true not .
  false ok.
エラー スタックが空であったり、 TOS が bool 値でなかったりした場合にはエラーとなります。

not-empty-list?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 TOS のリストに要素が存在する場合、true をスタックに積みます。 空のリストの場合は false をスタックに積みます。
使用例
> ( 1 2 3 ) not-empty-list? .
  true ok.
エラー スタックが空であったり、TOS がリストでない場合はエラーとなります。

not-true?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS にあるデータが true であるか否かを調べます。 例えば TOS にあるデータが invalid であった場合は、 true がスタックに積まれます。

ワード != と異なるのは、 本ワードは TOS が真偽値でなくともエラーとならないところです。 これは、あるワードが true または false を返す場合でも、 そのワードを適用する前提条件が満たされない場合は invalid を返すーといった場合に利用できます。

使用例 使用例はありません。
エラー スタックが空である場合はエラーとなります。

num-of-threads

実行レベル 標準実行レベル
スタックの変化 ---I
機能 現在設定されている子スレッドの並列実行数をスタックに積みます。 デフォルトの値は、搭載されているコア数が設定されています (4 コアの場合は 4 となります)。
使用例 次の例では、現在の並列実行数を表示しています。
> num-of-threads .
  4 ok.
エラー エラーは発生しません。

open

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS にある文字列をファイルパスとして取り出し、 そのファイルをオープンし、 そのファイルオブジェクトをスタックに積みます。
使用例 次の例では、hello.txt というファイルをオープンし、 そのファイルに hello world と改行コード付きで主力します。
> "hello.txt" open "hello world\n\n" >file close
  ok.
エラー TOS が文字列でなかったり、 指定されたファイルパスのファイルがオープンできなかった場合は エラーとなります。

or

実行レベル 標準実行レベル
スタックの変化 --- B
機能

TOS にあるラムダリスト(全ての要素が無名ワード もしくはワードから構成されているリスト)を 取り出し、格納されている(無名)ワードを順次実行していきます。 全ての(無名)ワードの実行結果がひとつでも true であった場合に true をプッシュします。 それ以外の場合、 つまり全て false であった場合に限り、false をプッシュします。

リストに格納されている(無名)ワードを実行し、 その一つでも true であった場合は、 それ以降の(無名)ワードの実行は行いません (本ワードの実行結果として true をプッシュするのは確定しているので)。

リストに格納されている無名ワードは、 TOS からひとつの値を取り出し、 何らかの処理の結果、 true または false をスタックにプッシュすることを期待されています。 しかし、これらの無名ワードの挙動まではシステムとして確認してはいません。 あくまでも各無名ワードを実行し、 実行直後のスタックからひとつ値を取り出して、 その値が true であるか否かを確認するだけです。

使用例 次の例では、TOS の値(この例では 5)が 0 未満か、 もしくは 10 より大きいか、を確認しています。 そしてもちろん、TOS に存在する 5 という値はそのどちらでも無いため この例では false を表示しています。
> 5 ( { dup 0 < } { 10 > } ) or .
  false ok.
エラー スタックに 2 つの値が存在しなかったり、 TOS がラムダリストでない場合はエラーとなります。

otherwise-2drop

実行レベル 即時実行レベル 1
スタックの変化 ---
機能 このワードは if と対で用いられ、 else 2drop then と同じ働きをします。 ある条件を満たすならば何か処理を行い、 そうでないならば 2drop をする場合などに利用できます。
使用例 使用例はありません。
エラー if と対にならない場合はエラーとなります。

otherwise-drop

実行レベル 即時実行レベル 1
スタックの変化 ---
機能 このワードは if と対で用いられ、 else drop then と同じ働きをします。 ある条件を満たすならば何か処理を行い、 そうでないならば drop をする場合などに利用できます。
使用例 使用例はありません。
エラー if と対にならない場合はエラーとなります。

over

実行レベル 標準実行レベル
スタックの変化 a b --- a b a
機能 スタックの上から 2 番目の値をプッシュします。
使用例 次の例では、show ワードを用いて over 実施後の スタックの様子を示しています。
> clear "alpha" "beta" over show
   +-------+
TOS| alpha |
   | beta  |
   | alpha |
---------------
 ok.
エラー スタックに 2 つ以上の値が格納されていない場合はエラーとなります。

panic

実行レベル 標準実行レベル
スタックの変化 ---
機能 トップレベルに制御を戻します。
使用例 次の例では、0 で除算しようとした場合に、 "DIVISION BY ZERO!" と表示し、 トップレベルに戻るエラー付き除算ワード div を定義し、 正しくエラー表示されることをテストしています。

> `div :
>>    dup 0 == if
>>     "DIVISION BY ZERO!" .cr panic
>>    else
>>      /
>>    then
>> ;
  ok.
> `div-test :
>>    "div-test IN:" .cr
>>    div .cr
>>    "div-test OUT." .cr
>> ;
  ok.
> 10 0 div-test .
  div-test IN:
  DIVISION BY ZERO!
> clear
  ok.
> 10 2 div-test .
  div-test IN:
  5 ok.
  div-test OUT:
  ok.
エラー エラーは発生しません。

pi

実行レベル 標準実行レベル
スタックの変化 --- D
機能 円周率をスタックに積みます。
使用例 次の例では、円周率を表示しています。
> pi .
  3.141593 ok.
エラー エラーは発生しません。

pick

実行レベル 標準実行レベル
スタックの変化 Xn ... X2 X1 X0 I --- Xn ... X2 X1 X0 Xk
機能 TOS の int 値を k とすると、 TOS の int 値を含まず、スタックの上から k 番目の値をスタックに積みます。 0 pick は dup と、 1 pick は over と同じ動作となります。
使用例 次の例では、2 pick を実行する直前のスタックにて、 上から 3 番目に積まれている "MOGREF" をスタックに積んでいます。
> "HALITO" "MOGREF" "KATINO" "DUMAPIC" 2 pick
  ok.
> show
      +----------------+
TOS-->| string MOGREF  |
      | string DUMAPIC |
      | string KATINO  |
      | string MOGREF  |
      | string HALITO  |
DS:------------------------
 ok.
エラー TOS が int 値でなかったり、 int 値であっても 1 以上の値でなかった場合はエラーとなります。 また、指定された数値よりもスタックが浅かった場合も エラーとなります。

pipe>

実行レベル 標準実行レベル
スタックの変化 --- X
機能 パイプ(通信用チャネル)から 値をひとつ受け取り、それをスタックに積みます。
使用例 ありません。
エラー 読取用パイプが存在しない場合はエラーとなります。

pop-front

実行レベル 標準実行レベル
スタックの変化 --- X
機能 TOS にあるリストを取り出し、 そのリストの先頭要素を取り出してスタックに積みます。 リストの先頭要素はリストから取り除かれます。 そのため、dup した場合や局所変数に格納されている場合は、 それらのリストに影響を与えますので注意して下さい (このような影響を避ける場合は、 clone などを活用して下さい)。
使用例 次の例では、リスト ( toroid torkan zoshi ) を dup し、 そのリストから先頭の要素 toroid を取り出します。
> ( toroid torkan zoshi ) dup pop-front .
  toroid ok.
> .
  ( torkan zoshi ) ok. ← dup されたリストの先頭の要素が取り出されていることが分かる
エラー スタックが空の場合はエラーとなります。 また、リストが空のリストの場合もエラーとなります。

@push-back

実行レベル 標準実行レベル
スタックの変化 X ---
機能 セカンドにある値を TOS にあるリストの末尾に追加します。 本ワードは swap @append と同等です。
使用例 次の例では、セカンドにある 123 という値をリスト ( "x=%d\n" ) の 最後に追加しています。
> 123 ( "x=%d" ) @push-back .
  ( x=%d 123 ) ok.
エラー スタックに 2 つ値が格納されていない場合や、 TOS がリストでない場合はエラーとなります。

pow

実行レベル 標準実行レベル
スタックの変化 N M --- N
機能 べき乗を計算します。 2 0.5 pow で、2 の 0.5 乗を計算します。 現バージョンでは、big-int の big-int 乗はサポートしていません。
使用例 ワード >big-int の使用例を見て下さい。
エラー TOS とセカンドが想定している型でない場合はエラーとなります。

printf

実行レベル 標準実行レベル
スタックの変化 ---
機能 次に示す、本ワード用に構築されたリストに対し、 本ワードを実行することにより、 C 言語の printf のような標準出力への出力を実現します。

本ワード用に用意されたリストとは、 以下の形式で構成されたリストのことを指します。 リストの最初の要素は C 言語で使用する printf の 第 1 引数として指定される、書式を示す文字列である必要があります。 リストの 2 番目以降の要素は、この書式で必要とされる 各種の値とします。 書式に使用される文字列は、C 言語の printf の説明を 適宜参照して下さい。

2 番目以降の要素としてシンボルが存在する場合、 そのシンボルと同名のローカル変数に保持されている値が このワードの評価対象となります。 例えば、ローカル変数 x に 10 が代入されている場合、 ( "score is %d\n" x ) は ( "score is %d\n" 10 ) として評価されます。

本ワードは boost::format を用いて実装されているため、 2 番目以降の要素の型が分からない場合は、 書式指定部分に %1% などを用いる事ができます。 パーセント記号の間の数値は書式指定される値の順序を表します。 ( "a=%1% b=%2% c=%3%" "one" 222 ( third-is-a-list ) ) printf は、 a=one b=22 c=( third-is-a-list ) と出力します。 引数の順序を指定する本形式では、任意の位置で利用できるため、 ( "%1% %2%,%1% %3%" 'NO' 'PAIN' 'GAIN' ) printf は NO PAIN, NO GAIN と出力します。 なお、この方法は上で示した C 言語の printf の書式指定と 同時に使用することはできません。

使用例 次の例では、リスト内に含まれている身長・体重を 表示するものです。
> ( "身長:%6.1f 体重:%6.2f\n" 180.5 76.4 ) printf
身長: 180.5 体重: 76.40
  ok.
エラー スタックが空であったり、TOS がリストでなかったり、 TOS に格納されているリストの 1 番目の要素が文字列でなかったり、 した場合はエラーとなります。 また、指定した書式が 2 番目以降の値を必要としている場合に、 対応する値が無かったり、書式中の書式指定子と合わない場合も エラーとなります。

product

実行レベル 標準実行レベル
スタックの変化 ---
機能 スタック上にある 2 つのリストの直積を計算します。
使用例 次の例では、リスト ( A B ) と ( 1 2 3 ) の直積を計算しています。
> ( A B ) ( 1 2 3 ) product .
  ( ( A 1 ) ( A 2 ) ( A 3 ) ( B 1 ) ( B 2 ) ( B 3 ) ) ok.

どちらか一方が空のリストの場合は、得られる直積は空となります。
> () ( 1 2 3 ) product .
  ( ) ok.
> ( A B ) () product .
  ( ) ok.
エラー リストの上から 2 つがリストでない場合はエラーとなります。

push-back

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS とセカンドより値を取り出し、 セカンドにある値を TOS に格納されていたリストの末尾に追加します。 本ワードは swap append と同等です。
使用例 使用例はありません。
エラー スタックに 2 つ値が格納されていない場合や、 TOS がリストでない場合はエラーとなります。

putc

実行レベル 標準実行レベル
スタックの変化 K ---
機能 TOS に格納されている値を文字コードとみなし、 該当する文字を標準出力へ出力します。
使用例 次の例では、TOS にある 65 という値を文字に変換し (ASCII コードで 65 は A という文字)、標準出力へ出力します。

> 65 putc
  A ok.
エラー TOS に格納されている値が int の範囲に収まらない場合は、 エラーとなります。

putf

実行レベル 標準実行レベル
スタックの変化 X S ---
機能 セカンドに格納されている値を、 TOS に格納されている書式を用いて標準出力または擬似標準出力へ出力します。 このワードは、() @push-back @push-back printf と同等です。
使用例 次の例では、TOS にある 123 という値を書式付きで出力するために、 書式を表す文字列とスタックに積み、その後 putf を呼び出しています。
> 123
  ok.
> "TOS=%5d\n" putf
TOS= 123
  ok.
エラー スタックに 2 つの値が積まれていない場合はエラーとなります。 また、TOS が文字列でない場合もエラーとなります。

quit

実行レベル 標準実行レベル
スタックの変化 ---
機能 Paraphrase システムから抜けます (C 言語の exit(0) を実行します)。
使用例 使用例はありません。
エラー エラーは発生しません。

quit-debugger

実行レベル 標準実行レベル
スタックの変化 ---
機能 デバッガを抜けます。
使用例 使用例はありません。
エラー デバッガを実行していない状況で、 本ワードを実行するとエラーとなります。

r>

実行レベル 標準実行レベル
スタックの変化
RS: X ---
DS: --- X
機能 リターンスタックの TOS を取り出し、 データスタックにプッシュします。
使用例 サンプルコードはありません。
エラー リターンスタックが空の場合はエラーとなります。

rad-to-deg

実行レベル 標準実行レベル
スタックの変化 N --- N
機能 TOS をラジアンとして取り出し、度に変換してスタックに積みます。 pi / 180 * と同等です。
使用例 次の例では、π/2 ラジアンを度に変換し、その値 90 を表示しています。
> pi 2 / rad-to-deg .
  90.000000 ok.
エラー TOS が数値でない場合はエラーとなります。

rand

実行レベル 標準実行レベル
スタックの変化 --- I
機能 0 から rand-max までの乱数(整数)をスタックに積みます。
使用例 次の例では、乱数をひとつ発生させ、それを表示しています。
> rand .
  16807 ok.
エラー エラーは発生しません。

rand-to

実行レベル 標準実行レベル
スタックの変化 I --- I
機能 0 以上、TOS にある数未満の乱数を生成し、スタックに積みます。
使用例 次の例では、[0,10) の乱数を 10 個生成し表示しています。
> 1 10 for+ 10 rand-to . next
  0 1 7 4 5 2 0 6 6 9 ok.
エラー TOS が整数でない場合はエラーとなります。

rand-max

実行レベル 標準実行レベル
スタックの変化 --- I
機能 乱数発生ワード rand が返し得る最大値をスタックに積みます。 この値は Paraphrase インタプリタの実装状況により異なります。

備考:Paraphrase インタプリタは C++ で実装されており、 rand ワードが返し得る最大の値は (C++ における) RAND_MAX という定数で 定義されています。 rand-max は、この RAND_MAX の値をスタックにプッシュするワードです。

使用例 次の例では、rand-max の値を表示しています。 なお、値は環境により変化します。 ここに掲載している値は Paraphrase の開発に使用している 環境下での値であり、この値が必ず表示されるとは限りません。
> rand-max .
  2147483647 ok.
エラー エラーは発生しません。

random

実行レベル 標準実行レベル
スタックの変化 --- F
機能 0.0 以上 1.0 以下の乱数をスタックに積みます。
使用例 次の例では、[0,1] の乱数を発生させ、表示します。
> random .
  0.131538 ok.
エラー エラーは発生しません。

randomize

実行レベル 標準実行レベル
スタックの変化 ---
※ 変化しません。
機能 乱数の種を現在の時刻を用いて初期化します (これにより、予測が困難な乱数系列を得ることができます)。
使用例 次の例では、randomize を用いることにより、 起動直後の乱数系列を変化させ、予測が困難な乱数を得ています。
> randomize rand .
  2027964200 ok.
エラー エラーは発生しません。

raw<<<

実行レベル 即時実行レベル 2
スタックの変化
DS: --- θ ν
RS: --- μ
機能 ワード >>>raw と連携し、 ヒアドキュメントブロックを構成します。

このワードの直後(ただし同じ行)に置かれた文字列は、 空白文字を取り除かれて文字列として処理されます。 このワードの後の次の行からは、 記述された文字列全てがヒアドキュメントの文字列として使用されます。

行頭の空白文字を無視する(dedent モード)で ヒアドキュメントを使用したい場合は、 ワード <<< と >>> を使用して下さい。

使用例 次の例では、"  Zapper\n  Blaster\n" という文字列を スタックに積んでいます。
> raw<<<
>>   Zapper
>>   Blaster
>> >>>raw
  ok.
エラー エラーは発生しません。

remove-attr

実行レベル 標準実行レベル
スタックの変化 W Xk ---
機能 セカンドにあるワード W に対し、 TOS にある値 Xk をキーとする属性要素を削除します。
使用例 次の例では、ワード hello の属性要素 "logLevel" を削除しています:
> `hello : "HELLO" .cr ;
  ok.
> "hello" >word "logLevel" 5 set-attr
  ok.
> "hello" >word "logLevel" has-attr? .
  true ok.
> "hello" >word "logLevel" remove-attr
  ok.
> "hello" >word "logLevel" has-attr? .
  false ok.
エラー セカンドにワードへのポインタが積まれていないとエラーとなります。 また、TOS に積まれた値をキーとする属性要素が存在しない場合もエラーとなります。

redo

実行レベル 即時実行レベル 1
スタックの変化 SS: α4 α3 α2 α1 I0 κ --- α4 α3 α2 α1 I0 κ

SS 上のデータは変化しませんが、 SS 上にはこれらのデータが格納されている必要があります。 各データの詳細については、ワード for+ の 説明を参照して下さい。

機能

本ワードに対応したループ処理内において、 ループ本体(ループを継続すると判断された後に実行される処理)の 先頭部分へジャンプします。 ワード continue との違いは、 continue ではループを継続するか否かを 判断する部分にジャンプしますが、 本ワードではループ本体の先頭部分にジャンプします。 よって本ワードの処理により、 ループが終了することはありません (ループ本体は必ず 1 回は実行されます)。

具体的な処理の内容については、SS 上に存在するアドレス値 α4 への ジャンプを行うコードを生成します。

使用例 サンプルコードはありません。
エラー SS 上に必要な情報が存在しないとエラーとなります (つまり、本ワードに対応しているループ処理内で 使用しないとエラーとなります)。

repeat

実行レベル 即時実行レベル 1
スタックの変化
コンパイル時:
SS: Ω ---
RS: θ π1 π2 ---
機能 while, loop および while-pipe と対を成し、 繰り返し処理を実現します。 π2 は while ワード等を実行したときに、 作成された TOS が false の時に分岐するためのアドレスを保存する場所を 示しており、そこに repeat ワードが書かれている場所のアドレスを書き込みます。 π1 は while が書かれている場所を示すアドレスであり、 その場所へジャンプすることにより、ループを形成します。 θ は while が実行されたときの実行レベルを保存したものであり、 repeat ワードの実行では、その実行レベルを復元します。 復元した実行レベルが即時実行レベルであった場合、 while と repeat で無名ワードブロックを形成し、 その無名ワードブロックをすぐさま実行します。
使用例 使用例はワード while の例を参照して下さい。
エラー 構文スタック上に、ループ構造のための情報が構築されていない場合は エラーとなります。

replace

実行レベル 標準実行レベル
スタックの変化 an ... a1 a0 X I --- an ... ak+1 X ak-1 ... a1a0
機能 TOS にある整数値およびセカンドにある任意の値を取り出した後のスタックに対し 操作を行います。 TOS にあった整数値の値を k とし、セカンドにあった値を X とするとき、 スタックの上から k 番目の値を X に置き換えます。
使用例 次の例では、既にスタックに積まれている値の、 上から 2 番目の値を 999 に置き換えています。
> 3 2 1 0
  ok.
> 999 2 replace show
      +---------+
TOS-->|  int 0  |
      |  int 1  |
      | int 999 |
      |  int 3  |
DS:-----------------
 ok.
エラー スタックに 3 つ以上データが積まれていない場合や、 スタックの深さが、書き換え対象として指定した深さよりも浅い場合は、 エラーとなります。

replace-str

実行レベル 標準実行レベル
スタックの変化 S1 S2 S3 --- S
機能 文字列 S1 中に含まれる正規表現で示された部分文字列 S2 を、 文字列 S3 で置換します。 S2 は正規表現で指定する必要があるため、 例えば括弧一つを指定する場合などは、"\\(" 等としなければなりません。 本ワードは C++ の std::regex を用いて実装されているため、 S2 および S3 に指定する文字列の詳細は std::regex および std::regex_replace に関する文書を参照して下さい。
使用例 次の例では、C++ の std::regex_replace のサンプルコード https://en.cppreference.com/w/cpp/regex/regex_replace にある、 母音に括弧を付けるものを本ワードで実施したものです:

> "Quick brown fox" "a|e|i|o|u" "[$&]" replace-str .
  Q[u][i]ck br[o]wn f[o]x ok.
エラー スタック上に 3 つの文字列が存在しなかった場合や、 セカンドの文字列が正規表現として正しくない場合にはエラーが発生します。

reset-pipes

実行レベル 標準実行レベル
スタックの変化 ---
※ 変化しません。
機能 パイプなど通信用チャネルを初期化します。
使用例 ワード [[ の例を参照して下さい。
エラー エラーは発生しません。

return

実行レベル 標準実行レベル
スタックの変化 ---
機能 現在実行中のワードの実行を中止し、 呼び出したワードに戻る、もしくは、 外部インタプリタのトップレベルに戻ります。
使用例 次の例では、TOS が負の数であったら、 ERROR と表示して、そこでワードの実行を中止するワード mySqrt を定義しています。
> `mySqrt : dup 0 < if drop "ERROR" .cr return then sqrt ;
  ok.
> -1 mySqrt
  ERROR
  ok.
> show
DS:-----------------------
    (DS is empty)
 ok.
エラー エラーは発生しません。

reverse-foreach

実行レベル 標準実行レベル
スタックの変化 𝓁 W --- 不定(TOS にあるワードによる)
機能 スタックより TOS およびセカンドを取り出し、次の処理を行います: セカンドに格納されていたリストの各要素を末尾より順次取り出し、 TOS に格納されていたワードをそれぞれの要素に順次適用します。

なお、TOS に格納された(無名)ワード中では、 ワード i により、 現在処理中の値が対象のリストにおいて先頭から何番目であるかを 知ることができます。

使用例 次の例では、対象のリストに格納されている値を 末尾より順次、その位置情報とともに表示しています:
> ( 11 22 33 ) { i "i=%d " putf .cr } reverse-foreach
i=2  33
i=1  22
i=0  11
 ok.
エラー スタックが空であったり、 セカンドがリストでなかったり TOS がワードでない場合は エラーとなります。

rot

実行レベル 標準実行レベル
スタックの変化 a b c --- b c a
機能 スタックの上から 3 番目の値を取り出し、プッシュします。
使用例 次の例では、ワード rot によりスタックの上から 3 つの値が その位置を回転させている様子を示しています。
> 1 2 3 rot show
      +---+
TOS-->| 1 |
      | 3 |
      | 2 |
DS:-----------
 ok.
エラー スタックに値が 3 つ以上存在しない場合はエラーとなります。

round

実行レベル 標準実行レベル
スタックの変化 N --- N
機能 TOS より数値を取り出し、 小数点第一位を四捨五入した値をスタックに積みます。
使用例 次の例では、負の数に対して本ワードを実行した例です:

> -1.4 round .
  -1.000000ok.
> -1.5 round .
  -2.000000ok.
エラー TOS に数値が格納されていない場合はエラーとなります。
実行レベル 標準実行レベル
スタックの変化
S1 S2 --- A
または
S1 S2 --- η
機能

文字列 S1 に対して正規表現 S2 を適用し、 適合する文字列からなる配列をスタックに積みます。 対応する文字列が存在しない場合は無効な値(η)を スタックに積みます。

適合する文字列が存在した場合、 配列の 0 番目にはパターンに適合する文字列の全体が 格納されます。 パターン中に少括弧 ( ... ) が存在する場合、 配列の 1 番目以降に順次それら部分的に適合する文字列が格納されます。 なお、配列の最後の要素は、 S1 における適合しなかった残りの文字列が格納されます。

使用例 次の例では、郵便番号であるか否かの確認をしています。
> "441-3124" '^\d{3}-\d{4}$' search .
  (size=1 data=0x7f8770600288)
  [0]=441-3124
ok.
エラー スタック上部に 2 つの文字列が存在しない場合はエラーとなります。

self

実行レベル 標準実行レベル
スタックの変化 --- { W | η }
機能 本ワードを呼び出したワードをスタックに積みます。 ワード中ではなく、 トップレベルから呼び出された場合は無効な値をスタックに積みます。

本ワードの説明としては以上の説明のとうりなのですが、 プログラマの感覚からすると、self と記述されている ユーザー定義ワード自身をスタックに積むと理解してもらって構いません。 というのも、self を呼び出しているワードは、 ユーザーが定義したワード自身となるからです。

使用例 次の例では、self を呼び出している test というワード名を 表示します。

> `test : "this word is" . self word-name .cr ;
  ok.
> test
  this word is user:test
  ok.

次の例では、呼び出された回数を属性 count に記録するワード test を定義しています。

> `test : self "count" has-attr? not if
>>     self "count" 0 set-attr
>>   then
>>   self "count" get-attr 1 +
>>   self swap "count" swap set-attr
>> ;
  ok.
> test
  ok.
> `test >word "count" get-attr .
  1 ok.
> test
  ok.
> `test >word "count" get-attr .
  2 ok.
> test
  ok.
> `test >word "count" get-attr .
  3 ok.
エラー エラーは発生しません。

set

実行レベル 標準実行レベル
スタックの変化
A I X ---
または
I X ---
または
Z X1 X2 ---
機能

配列またはリストもしくは連想配列に値を書き込みます。

配列およびリストについては、指定したインデクス(I)に TOS の値(X)を書き込みます。 連想配列の場合はインデックスではなく、 キー(X1) に対し値(X2)を紐付けます。

配列およびリストに対するインデックスは 0 オリジンです。 有効なインデックスの最小値は 0 であり、 最大値は配列もしくはリストの要素数-1 となります (C 言語と同じです)。

なお、配列に対してはスレッドセーフです。

使用例 使用例はありません。 ワード @set の使用例を参考にして下さい。
エラー

スタックにデータが 3 つ以上存在しない場合や、 スタックの上から 3 番目に存在する値が配列・リスト・連想配列の いずれでもない場合はエラーとなります。

配列やリストに対する操作の場合、 スタックの上から 2 番目のデータが整数でない場合もエラーとなります。 2 番目のデータが整数であっても、 3 番目に格納されている配列やリストに対し、 その値が有効なインデックス値にならない場合もエラーとなります。

set-attr

実行レベル 標準実行レベル
スタックの変化 W Xk Xv ---
機能 ワード W に対し、キー Xk の値として Xv を登録します。
使用例 次の例では、hello というワードの属性として、 "logLevel" という文字列に対応する値として 5 を設定しています:
> "hello" ; "HELLO" .cr ;
  ok.
> "hello" >word "logLevel" 5 set-attr
  ok.
> "hello" >word show-attr
(logLevel,5)
  ok.
エラー W, Xk, Xv がスタック上に適切に積まれていないと、エラーとなります。

set-breakpoint

実行レベル 標準実行レベル
スタックの変化 { S | σ | W } ---
機能 TOS に積まれているワード名のワード、 もしくはワードに対し、ブレークポイントを設定します。 ブレークポイントを設定されたワードが実行されると、 デバッガが起動します。
使用例 次の例では、hello というワードにブレークポイントを設定しています。
> `hello : "HELLO" .cr ;
  ok.
> `hello set-breakpoint
  ok.
エラー TOS にワードもしくはワード名が設定されていないとエラーとなります。 また、指定されたワード名を持つワードが存在しない場合もエラーとなります。 本ワードをデバッガ上で実行しない場合もエラーとなります。

set-code

実行レベル 標準実行レベル
スタックの変化 W C ---
機能 セカンドに指定されたワード W に TOS で指定された標準コード C を、 ワードのコードフィールドに設定します。
使用例 次の例では、extAOP で提供されている docolWrapperExample を ワード hello に設定しています。 docolWrapperExample は、通常のユーザー定義ワードのコードフィールドで 設定される Docol と同様の機能を提供しますが、 ユーザー定義されたワードの実行の前後に文字列を表示するものです。
> `hello : "HELLO!" .cr ;
  ok.
> "hello" >word
  ok.
> "./ext/extAOP.so" "docolWrapperExample" get-std-code
  ok.
> set-code
  ok.
> hello
IN:docolWrapperExample
word name: user:hello
 HELLO!
OUT:docolWrapperExample
 ok.
エラー スタックにしかるべき情報が存在しないはエラーとなります。

set-delete-by-forget

実行レベル 標準実行レベル
スタックの変化 ---
機能 ワード forget の動作を指定します。 このワードの実行後は、短縮名および正規名に対して forget を実行した場合、 当該ワードの処理内容は this-word-is-removed に差し替えられます。 結果として、それらのワードを利用するワードを実行すると、 当該ワードは削除されている旨を表示し、 トップレベルにに戻るようになります。 このような事態を避けるためには、ワード clear-delete-by-forget を 実行するようにして下さい (para の実行直後は clear-delete-by-forget を実行した時と 同じ状態になっています)。
使用例 次の例では、 本ワードの実行により this-word-is-deleted が呼び出される様子を示しています。

> set-delete-by-forget
  ok.
> `twice : 2 * ;
  ok.
> `quadruple : twice twice ;
  ok.
> `twice forget
  ok.
> `user:twice forget
  ok.
> 5 quadruple .
  this word ('twice' / 'user:twice') is already removed. >
エラー エラーは発生しません。

set-num-of-threads

実行レベル 標準実行レベル
スタックの変化 I ---
機能 TOS にある整数値を、並列実行するスレッドの数として設定します。 1 未満の数値を設定すると、 搭載されている CPU のコア数をスレッド数として設定します。
使用例 次の例では、搭載しているコア数をスレッド数として設定しています。
> -1 set-num-of-threads
  ok.
> num-of-threads . ← 確認
  4 ok. ← 搭載コア数の 4 が設定されている
エラー TOS が整数でない場合はエラーとなります。

set-random-seed

実行レベル 標準実行レベル
スタックの変化 I ---
機能 TOS にある値を乱数の種として設定します。 この値はワード rand, random および rand-to に影響を及ぼします。 に
使用例 次の例では、本ワードを用いて同じ値の乱数が発生することを確認しています。
> 1 set-random-seed rand .
  16807 ok.
> 1 set-random-seed rand .
  16807 ok.
なお、ここで示した乱数の値は例であり、 実行する環境によっては異なる値となります (が、生成される乱数は同じ値となるはずです)。
エラー TOS に int の値が格納されていない場合はエラーとなります。

set-vocabulary

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS にある文字列をデフォルトのボキャブラリ名に設定します。
使用例 次の例では、デフォルトのボキャブラリ名として "test" を設定しています。
> "test" set-vocabylary vocabulary .
  "test" ok.
エラー スタックが空であったり、 TOS が文字列でなかったりした場合はエラーとなります。

set-worded-docol-callee

実行レベル 標準実行レベル
スタックの変化 W ---
機能 TOS にあるワードへのポインタを worded-docol-caller で呼び出される ワードとして登録します。
使用例 ワード worded-docol-caller の 使用例を参照して下さい。
エラー TOS がワードへのポインタでない場合はエラーとなります。

show

実行レベル 標準実行レベル
スタックの変化 ---
※ スタックは変化しません。
機能 現在の(データ)スタックの状況を表示します。
使用例 次の例では、いくつか値をプッシュした後のスタックの様子を表示しています。
> clear "XEVIOUS" 1983 3 show
      +---------+
TOS-->|    3    |
      |  1983   |
      | XEVIOUS |
DS:-----------------
 ok.
エラー エラーは発生しません。

show-attr

実行レベル 標準実行レベル
スタックの変化 W ---
機能 TOS にあるワードへのポインタをとりだし、 そのワードの属性情報を表示します。
使用例 set-attr の使用例を参照して下さい。
エラー TOS にワードへのポインタが格納されていない場合はエラーとなります。

show-local-vars

実行レベル 標準実行レベル
スタックの変化 ---
機能 現在実行中のワードのローカル変数に関する情報を表示します。
使用例 次の例では、test というワードで定義されている ローカル変数の情報(変数 x には 123 が、y には "ABC" が格納されている様子)を 表示しています。
> `test : ( x y ) local
>>    123 `x let
>>    "ABC" `y let
>>    show-local-vars
>> ;
  ok.
> test
num of local vars: 2
  slot #00: local var name: x dataType:int value:123
  slot #01: local var name: y dataType:string value:ABC
 ok.
エラー エラーは発生しません。

show-rs

実行レベル 標準実行レベル
スタックの変化 RS: ---
※ リターンスタックは変化しません。
機能 現在のリターンスタックの状況を表示します。
使用例 次の例では、いくつか値をプッシュした後の リターンスタックの様子を表示しています。
> clear "gust" >r "notch" >r swap-rs show-rs
      +-------+
TOS-->| gust  |
      | notch |
RS:---------------
 ok.
エラー エラーは発生しません。

show-trace

実行レベル 標準実行レベル
スタックの変化 変化しません。
機能 現在のコールスタックの状況を表示します。
使用例 WordB から WordA を呼び出し、 WordA 内で show-trace を呼び出すことにより、 WordB -> WordA と呼び出されていることを示します:
> `WordA : "This is Word-A." .cr show-trace ;
  ok.
> `WordB : WordA ;
  ok.
> WordB
 This is Word-A.
--- trace info ---
user:WordB
user:WordA
------------------
 ok.
エラー エラーは発生しません。

sin

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 スタックより値を一つ取り出し、その値をラジアンとし正弦( sin )を計算します。 計算結果をスタックにプッシュします。
使用例 次の例では、deg-to-rad ワードを用いて sin 60 度を計算しています。
> 60 deg-to-rad sin .
  0.866025 ok.
エラー TOS が数値でない場合はエラーとなります。

size

実行レベル 標準実行レベル
スタックの変化 TOS の値を参照し、その値のサイズをスタックに積みます。 各値のサイズは以下のとおりです:

配列要素数
リスト 含まれる要素数がサイズとなります。 ただし、リストが要素の場合は、 そのリスト中の要素は考慮されず、 単に 1 つの要素として数えられます。
文字列
および
シンボル
文字列が消費するメモリ量(バイト数)がサイズとなります。 この仕様は将来変更される可能性があります。 それは、 いわゆる半角英数字の場合は文字数と一致しますが、 日本語の場合は文字数とサイズが一致しないためです。

{ A | | S | σ } --- I
機能 TOS にある配列・リスト・文字列・シンボルのサイズ(または要素数)を スタックに積みます。
使用例 次の例では、要素数 5 の配列を作成し、 その配列のサイズを表示しています。
> 5 new-array   ← 要素数 5 の配列を作成
  ok.
> size . ← TOS にある配列のサイズを取得し、 それを表示
  5 ok.   ← 要素数 5 と表示された。

次はリストの要素数を取得して表示します。 リストの要素は apple、banana というシンボル 2 つと、 シンボルと数値からなる ( cherry 100 ) というリスト 1 つなので、 計 3 つとなります。
> ( apple banana ( cherry 100 ) ) size .
  3 ok.
エラー TOS が本ワードに対応している値でない場合はエラーとなります。

sjis>utf8

実行レベル 標準実行レベル
スタックの変化 ---
機能 文字コード変換モードを、SJIS から UTF8 に変換するモードにします。
使用例 使用例は特にありません。
エラー エラーは発生しません。

sleep

実行レベル 標準実行レベル
スタックの変化 I ---
機能 TOS より整数を取り出し、その値の秒数だけスリープします。 負の値が与えられた場合は、0 秒のスリープとなります。 なおスリープするのは本ワードを実行しているスレッドのみです。
使用例 使用例はありません。
エラー スタックが空であったり、TOS の値が整数でない場合はエラーとなります。

slice

実行レベル 標準実行レベル
スタックの変化 I1 I2 --- ℒ1 ℒ2
機能 対象のリスト、取り出し位置、取り出す長さ、という順序でスタック上に データがあるとき、スタックの 3 番目にあるリストより、 部分リストを取り出します。
使用例 次の例では、リスト ( 1 2 3 4 5 6 7 ) から、 2 番目の位置(0 オリジン)から、 3 つの要素を取り出し、部分リスト ( 3 4 5 ) を取り出し、 スタックにプッシュします。 もともとのリストは ( 1 2 6 7 ) となります。
> ( 1 2 3 4 5 6 7 ) 2 3 split . .
  ( 3 4 5 ) ( 1 2 6 7 ) ok.
エラー 想定している順序でスタックにデータが積まれていない場合はエラーとなります。

sort

実行レベル 標準実行レベル
スタックの変化 W ---
機能 セカンドにあるリストに対し、TOS にあるワードを用いて並べ替えを行います。 並べ替えに際しては、TOS のワードが適宜呼び出されますが、 このとき、スタックには比較の対象となっている値がセカンドと TOS に 存在しています。 セカンドの方が小さい(整列済みのリストではより先頭にある)ならば、 true をスタックに積んで下さい。 さもなければ、false を積んで下さい。 bool 値以外の値をプッシュした場合の挙動は未定です。
使用例 次の例では、リスト中に存在する数値を昇順でソートしています。
> ( 2 0 1 8 ) { < } sort
  ( 0 1 2 8 ) ok.
エラー セカンドがリスト、TOS がワード(へのポインタ)でなければ エラーとなります。

sort+

実行レベル 標準実行レベル
スタックの変化 ---
機能 TOS にあるリストを昇順で並べ替え(ソート)します。 { < } sort と同値です。
使用例 次の例では、TOS にあるリストを昇順でソートし、表示しています。
> ( 10 1 4 ) sort+ .
  ( 1 4 10 ) ok.
エラー TOS がリストでない場合はエラーとなります。

sort-

実行レベル 標準実行レベル
スタックの変化 ---
機能 TOS にあるリストを降順で並べ替え(ソート)します。 { > } sort と同値です。
使用例 次の例では、TOS にあるリストを降順でソートし、表示しています。
> ( 10 1 4 ) sort- .
  ( 10 4 1 ) ok.
エラー TOS がリストでない場合はエラーとなります。

split

実行レベル 標準実行レベル
スタックの変化 I --- ℒ1 ℒ2
機能 TOS で指定された数を持つ、リストの前半部分をリスト 1 とし、 残りをリスト 2 とするようにリストを分割します。
使用例 次の例ではリスト ( 1 2 3 4 5 ) を、 リスト ( 1 2 ) と ( 3 4 5 ) に分割します。
> ( 1 2 3 4 5 ) 2 split . .
  ( 3 4 5 ) ( 1 2 ) ok.
エラー TOS が整数でなかったり、2 番目のデータが リストでない場合にはエラーとなります。

split-str-by

実行レベル 標準実行レベル
スタックの変化 S1 S2 --- A
機能

セカンドにある文字列 S1 を、 TOS にある文字列 S2 を区切り文字として分割し、 それら分割された文字列からなる配列をスタックに積みます。 区切り文字として指定する文字列 S2 は 1 文字からなる 文字列でなければなりません。

分割対象となる文字列 S1 中に区切り文字が連続する場合、 その部分では空の文字列が生成されます。 詳しくは使用例を見て下さい。

使用例 次の例では、"apple,banana,,daikon" という文字列を、 カンマで分割する様子を示しています:

> "apple,banana,,daikon" "," split-str-by .
 array:(size=4 data=0x10ee042c0)
[0]=apple
[1]=banana
[2]=
[3]=daikon
 ok.

生成された配列の 2 番目の文字列が空の文字列になっています。 これは、banana,,daikon という部分について、 banana,(長さ 0 の空文字列),daikon と認識するため、 このような動作になります。 空文字列を生成することを避けるためには、 ワード replace-str 等を用いて、 連続する区切り文字を単一の区切り文字に置き換えるなどの 前処理を行って下さい。

もしくは単に空白文字列で切り出したい場合は、 >array を使うと便利です。

なお、分割結果として表示されている配列情報の 16 進数部分(data=...の部分)は、 実行環境により異なるため、必ずしも上記の値になるとは限りません。

エラー スタック上に 2 つの文字列が存在しない、 または、TOS に格納されている文字列が 1 文字以外の文字列である場合は エラーとなります。

sputf

実行レベル 標準実行レベル
スタックの変化 X S --- S
機能 セカンドにある値を TOS にある文字列で指定された書式にて整え、 その結果を文字列としてスタックに積みます。 putf の出力先が文字列になったワードです。

使用できる書式についてはワード printf の 説明を参照して下さい (C 言語の printf で使用される書式指定と同じです)。

使用例 次の例では、TOS にある 123 という値を 全 8 桁でかつ、0 詰めの文字列として変換し、 スタックに積まれる様子を示しています。

> 123 "SCORE:%08d" sputf show
      +-------------------------+
TOS-->| string 'SCORE:00000123' |
DS:---------------------------------
 ok.
エラー スタックに 2 つの値が格納されていなかったり、 書式が異常であったり、もしくは、 指定された書式とセカンドの値が合わない場合はエラーとなります。

sqrt

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 TOS の平方根を求めます。
使用例 次の例では、2 の平方根を計算し、表示しています。
> 2 sqrt .
  1.414214 ok.
エラー TOS が数値でない場合はエラーとなります。

start-with?

実行レベル 標準実行レベル
スタックの変化 S1 S2 --- B
機能 文字列 S1 が文字列 S2 で始まっているか否かを調べます。 S2 で始まっている場合は true を、 そうでない場合は false をスタックに積みます。
使用例 次の例では、スタックにある文字列 "Medieval Madness" が "Med" で始まっているか否かを調べています。
> "Medieval Madness" "Med" start-with? .
  true ok.
エラー スタックが空であったり、 スタック上部に 2 つの文字列が存在しない場合は エラーとなります。

step

実行レベル 標準実行レベル
スタックの変化 I ---
機能 次回のループでは step 実行時の TOS の分だけループカウンタが増加します。 実際には、スタックより整数をひとつ取り出し、その値を n とすると、
カウントアップ(for+ 〜 next)の場合
ワード next で、ループカウンタは 1 だけ増えるので、 n-1 だけループカウンタを増加させます。
カウントダウン(for- 〜 next)の場合
ワード next で、ループカウンタは -1 だけ増えるので、 n+1 だけループカウンタを増加させます。
使用例 次の例では、1 から 9 までの奇数を表示します。
> 1 10 for+ i . 2 step next
  1 3 4 5 9 ok.
エラー スタックが空であったり、TOS が整数でない場合はエラーとなります。

step-in

実行レベル 標準実行レベル
スタックの変化 ---
機能 デバッガにて現在停止している部分から、 ひとつだけ命令を実行します。 ただし、実行する命令がコロン定義されたユーザー定義ワードの場合、 そのワードをデバッグ対象ワードとし、 呼び出されるワードの内部にある命令(スレッディッドコード)を ステップ実行できるよう、環境を整えます。
使用例 使用例はありません。
エラー デバッガ上で実行しない場合はエラーとなります。

step-over

実行レベル 標準実行レベル
スタックの変化 ---
機能 デバッガにて現在停止している部分から、 ひとつだけ命令を実行します。
使用例 使用例はありません。
エラー デバッガ上で実行しない場合はエラーとなります。

store

実行レベル 標準実行レベル
スタックの変化 X α ---
機能 TOS にあるアドレスに Second の値を格納します。 標準的な使い方としては、TOS のアドレスは ワード global または global-decl で作成されたワードにて プッシュされるものを想定しています。

このワードはスレッドセーフです。 ワード globl により定義される、変数への代入用ワード >$変数名も内部的に本ワードを呼び出していますので、 スレッドセーフとなります。

使用例 次の例では、変数 x を宣言し、x に 123 という値を格納しています。
> "x" global
  ok.
> 123 x store
  ok.
> x fetch .
  123 ok.
エラー スタックに 2 つのデータが存在しなかったり、 TOS がアドレスでなかったりした場合にはエラーとなります。

str-to-list-byte

実行レベル 標準実行レベル
スタックの変化 S ---
機能 TOS から文字列を取り出し、 その文字列をバイト列とみなし、 新規作成したリストに順次追加していきます。
使用例 文字列 "ABC" から、 それぞれの文字コードである 65, 66, 67 という数値からなるリストを 生成しています。
> "ABC" str-to-list-byte .
  ( 65 66 67 ) ok.
エラー TOS が文字列でない場合はエラーとなります。

string?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値が文字列であるか否かを調べます。 文字列である場合は true を、そうでない場合は false をスタックに積みます。
使用例 次の例では、文字列 "LOMILWA" が文字列であることを確認しています。

> "LOMILWA" string? .
  true ok.
エラー スタックが空の場合はエラーとなります。

square

実行レベル 標準実行レベル
スタックの変化 N --- N
機能 TOS にある数値を取り出して 2 乗し、 スタックに積みます。
使用例 次の例では、5 の 2 乗を計算し表示しています。
> 5 square .
  25 ok.
エラー TOS が数値でなければエラーとなります。

swap

実行レベル 標準実行レベル
スタックの変化 a b --- b a
機能 スタックの TOS と 2 番目の値を入れ替えます。
使用例 次の例では、スタックの 2 番目にある "second" という値と、 TOS にある "top" という値を入れ替えています。
> "second" "top"
  ok.
> . .
top second ok. ← スタックの上から順に表示されるので、 top second という順序になります。
> "second" "top"
  ok.
> swap . .
second top ok. ← swap により、逆順で出力されています。
エラー スタック上にデータが 2 つ存在しないとエラーとなります。

swap-rs

実行レベル 標準実行レベル
スタックの変化 RS: a b --- b a
機能 リターンスタックの TOS と 2 番目の値を入れ替えます。
使用例 サンプルコードはありません。
エラー リターンスタック上にデータが 2 つ存在しないとエラーとなります。

switch

実行レベル 即時実行レベル 1
スタックの変化 SS: --- α3 α2 α1 I0 κ

SS 上に積まれる情報の補足説明:

κ は、本ワードにおける構文情報用の識別子となります。 構文情報はチャンク形式にて Syntax Stack (SS) 上に格納されます。 κ の実態は整数値で、本ワードの場合は switch を示す整数値となります。 κ 〜 α3 までが for+ における構文情報チャンクとなります。

I0 には、switch における構文情報チャンクのサイズ 5 が格納されます。 switch における構文情報チャンクは κ 〜 α3 までの 5 つです。

I0 には、整数値 5 が格納されます。

α1 は、ワード break で switch 〜 dispatch ブロックを抜ける時に 使用します。 具体的には、ワード break は、 α1 の値が示すアドレスにジャンプするコードを生成します。 α1 が示すアドレスには、dispatch 直後の アドレスへジャンプするコードが格納されています。 これにより、ワード break により、 switch 〜 dispatch ブロックから 抜け出せるようになります。

α2 には、α1+1 の値が格納されており、 このアドレスが指し示す番地に dispatch 直後の アドレスが格納されます。 α1 が示すアドレスにはジャンプ命令が格納されているため、 結果として、ワード break により、 α1 が示すアドレスにジャンプするコードが生成されると、 switch 〜 dispatch ブロックから 抜け出すこととなります。

α3 は、次の case ブロックへの ジャンプのために使用されます。 条件が満たされなかった場合、次の case ブロックへ ジャンプしていかなければなりませんが、 α3 には case または default が実行されると、 そのアドレスが書き込まれるアドレス値が格納されています。


詳細は以下の図を参考にして下さい:

 address                 code-thread
                        | ..................... |
                        +-----------------------+ 
 ADDR+0                 | JUMP                  |
                        +-----------------------+
 ADDR+1              +--+ (ADDR+1)+3            |
                     |  +-----------------------+
 ADDR+2 (==alpha1)   |  | JUMP                  | ※1
                     |  +-----------------------+ 
 ADDR+3 (==alpha2)   |  | (end-to-switch-block) | ※2
                     |  +-----------------------+
 ADDR+4              +->| ..................... |
                        +-----------------------+
                                   :
                        +-----------------------+
 ADDR+n-1               | _branck-if-false      | ※3
                        +-----------------------+
 ADDR+n (==alpha3)      | (next-case-block)     | ※4
                        +-----------------------+
                                   :
※1 ....... break はここにジャンプしてきます。
※2,※4 ... 最初は空のスロットです。
※3 ....... ワード '->' にて生成されます。
機能 dispatch と対を成し、複数の条件に応じた分岐処理を実現します。
使用例 以下のコードは、いわゆる FizzBuzz 処理を行う例です。 まず、ファイル FizzBuzz.p8e にワード FizzBuzz を記述しておきます。

ワード FizzBuzz は、スタックよりある値(整数)を取り出し、 3 の倍数なら Fizz を、5 の倍数なら Buzz をスタックにプッシュし、 3 の倍数でもあり 5 の倍数でもあるならば FizzBuzz をプッシュします。 それ以外の数値の場合はその値をそのままプッシュします。

`FizzBuzz :
    switch
        case 15 % 0? -> "FizzBuzz" break
        case 5 % 0? -> "Buzz"
        case 3 % 0? -> "Fizz"
    dispatch
;

上記スクリプトの実行例
> "FizzBuzz.p8e" load
  ok.
> 1 20 for+ i FizzBuzz . next
  1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz ok.
エラー エラーは発生しません。

tan

実行レベル 標準実行レベル
スタックの変化 N --- E
機能 スタックより値を一つ取り出し、その値をラジアンとし正接( tan )を計算します。 そして、計算結果をスタックにプッシュします。
使用例 次の例では、deg-to-rad ワードを用いて tan 60 度を計算しています。
> 60 deg-to-rad tan .
  1.732051 ok.
エラー TOS が数値でない場合はエラーとなります。

then

実行レベル 即時実行レベル 1
スタックの変化 RS: θ π ---
機能 実行前にスタックに積まれている π はワード if もしくは else によって 積まれたものであり、θ は if により積まれたものとします。

π を用いて、条件が成立しなかった場合のジャンプ(ワード if の場合)や、 条件成立後 else ワードが書かれている場所(実際にはその直前)からの ジャンプのために、then ワードの位置へのアドレスをコンパイルします。

使用例 ワード if の例を参照して下さい。
エラー インタプリタモードであったり、リターンスタック上に π や θ が存在しない場合などはエラーとなります。

this-word-is-removed

実行レベル 標準実行レベル
スタックの変化 ---
機能 ワード名と共に、当該のワードは削除済みである旨を表示し、 トップレベルに戻ります。 set-delete-by-forget が実行されている場合、 短縮名および正規名の療法が忘却された時、 当該ワードの実体はこのワードを実行するように変更されます。
使用例 次の例では、定義したワード twice を削除されたものとして、 本ワードを用いて、その処理の実体を差し替えています。

> `twice : 2 * ;
  ok.
> `quadruple : twice twice ;
  ok.
> 5 quadruple "5*4=%d\n" putf
  5*4=20
  ok.
> `twice `this-word-is-removed >word update
  ok.
> 5 quadruple "5*4=%d\n" putf
  this word ('twice' / 'user:twice') is already removed.   ok.
エラー エラーは発生しません。

thru

実行レベル 標準実行レベル
スタックの変化 ---
機能 文字コード変換モードを、無変換モードにします。 なお、デフォルトではこのモードになっています。
使用例 使用例は特にありません。
エラー エラーは発生しません。

to-read

実行レベル 標準実行レベル
スタックの変化 ---
機能 TOS にあるファイルオブジェクトに対し、 読み取り位置をファイルの先頭にするよう指示します。
使用例 サンプルコードはありません。
エラー スタックが空であったり、 ファイルがすでに閉じられていたりした場合はエラーとなります。

trim

実行レベル 標準実行レベル
スタックの変化 S --- S
機能 TOS にある文字列の文頭および文末の空白を削除します。 "^\\s*|\\s*$" "" replace-str と同じ意味です。
使用例 次の例では、" Pilot Officer Dragon Fly  " という文字列から、 文頭および文末の空白文字列を削除しています。

> " Pilot Officer Dragon Fly " trim "'%s'\n" putf
'Pilot Officer Dragon Fly'
  ok.
エラー TOS が文字列でない場合はエラーとなります。

troff

実行レベル 標準実行レベル
スタックの変化 ---
機能 エラーメッセージの表示の際に、 ワードの呼び出し履歴情報(トレース情報)を表示しないように設定します。 troff とはトレース・オフの意味です。 トレース情報表示をオンにする場合は tron を使用します。

Paraphrase の起動直後は、この troff の状態です (トレースオフがデフォルトの状態です)。

使用例 使用例はありません。
エラー エラーは発生しません。

tron

実行レベル 標準実行レベル
スタックの変化 ---
機能 エラーメッセージの表示の際に、 ワードの呼び出し履歴情報(トレース情報)を表示するように設定します。 tron とはトレース・オンの意味です。 トレース情報表示をオフにする場合は troff を使用します。
使用例 使用例はありません。
エラー エラーは発生しません。

実行レベル 標準実行レベル
スタックの変化 --- B
機能 tron が実行されていれば true を、 troff が実行されていれば flase を返します。
使用例 使用例はありません。
エラー エラーは発生しません。

true

実行レベル 標準実行レベル
スタックの変化 --- B
機能 真の値 true をスタックに積みます。
使用例
> true .
  true ok.
エラー エラーは発生しません。

tuple

実行レベル 標準実行レベル
スタックの変化 X X ---
機能 スタック上のデータ 2 つを 1 つのリストにまとめます。
使用例 次の例では、スタック上にある 10 と 20 という値を 1 つのリストにまとめ、 その結果であるリスト ( 10 20 ) という値を表示しています。
> 10 20 tuple .
  ( 10 20 ) ok.
エラー スタック上にデータが 2 つ以上ない場合はエラーとなります。

type-name

実行レベル 標準実行レベル
スタックの変化 X --- X S
機能 TOS より値とひとつ取り出し、その型を文字列としてスタックに積みます。
使用例 次の例では、数値 1.23 の型を表示しています。
> 1.23 type-name .
  double ok.
エラー スタックが空の場合、エラーとなります。

update

実行レベル 標準実行レベル
スタックの変化
{ S | σ } W ---
または
W { S | σ } ---
機能 TOS とセカンドにある、無名ワードと文字列を用いて ワードの処理内容を入れ替えます。

書き換え可能なワードは、後から自由に再定義できますが、 すでにそれらのワードを用いている他のワードの挙動は変化しません。 しかし、本ワードを用いると、ワードの入れ物は変化せず、 その入れ物の中に入っている処理内容を置き換える(更新する)ため、 既に定義されているワードの挙動を変化させることが可能となります。

このワードを用いることでワードの前方参照や、 相互参照も実現できます(以下の使用例をみて下さい)。

使用例 次の例では、ワードの前方参照を行います。
> `hello : "NOT IMPLEMENTED" .cr ;
  ok.
> `test ; hello ;
  ok.
> "hello" { "HELLO" .cr } update
  ok.
> test
  HELLO ok.
エラー TOS とセカンドに無名ワードと文字列がそれぞれ 1 つづつ存在しない場合は エラーとなります。

use-mock-stdin

実行レベル 標準実行レベル
スタックの変化 ---
機能 標準入力ではなく擬似標準入力を使用する、 擬似標準入力モードに切り替えます。 擬似標準入力モードでは、擬似標準入力に対応しているワードは 標準入力ではなく擬似標準入力とよばれるキューより 文字および文字列を取得するように動作が変わります。
使用例 サンプルコードはありません。
エラー エラーは発生しません。

use-mock-stdout

実行レベル 標準実行レベル
スタックの変化 ---
機能 標準出力ではなく擬似標準出力を使用する、擬似標準出力モードに切り替えます。 擬似標準出力モードでは、擬似標準出力に対応しているワードは 標準出力ではなく擬似標準出力とよばれるキューに 文字および文字列を追加するように動作が変わります。
使用例 次の例では、ワード >lower の 変換結果を擬似標準出力に出力し、 それを get-line-from-mock-stdout に より取得し、正しく変換できているかを確認しています。

注意:正しく変換できているか否かを表示する場合は、 表示のためのワードを実行する前に use-stdout ワードを実行し、 標準出力に文字列が表示できるように出力モードを 切り替えることを忘れないで下さい。

> use-mock-stdout "ABC" >lower .
  ok.
> get-line-from-mock-stdout " abc" ==
  ok.
> use-stdout .
  true ok.
エラー エラーは発生しません。

use-stdin

実行レベル 標準実行レベル
スタックの変化 ---
機能 標準入力を使用するよう出力先を変更します。 use-mock-stdin ワードや >mock-stdin ワードを使用して 擬似標準入力を使用するよう変更している場合は、 本ワードで標準入力を使用するようにしないと ワード get-line などを使用しても ユーザーからの入力が実施されませんので 注意して下さい。

なお、Paraphrase インタプリタの起動直後は、 標準入力を使用するモードになっていますので、 本ワードをあえて実行する必要はありません。

使用例 使用例はありません。
エラー エラーは発生しません。

use-stdout

実行レベル 標準実行レベル
スタックの変化 ---
機能 標準出力を使用するよう出力先を変更します。 use-mock-stdout ワードで 出力先を擬似標準出力に変更している場合は、 本ワードで標準出力に出力先を変更しないと、 ワード . (ドット) などで TOS の値を表示させようとしても何も画面に表示されませんので 注意して下さい。

なお、Paraphrase インタプリタの起動直後は、 標準出力を使用するモードになっていますので、 本ワードをあえて実行する必要はありません。

使用例 使用例はありません。
エラー エラーは発生しません。

utf8>sjis

実行レベル 標準実行レベル
スタックの変化 ---
機能 文字コード変換モードを、UTF8 から SJIS に変換するモードにします。
使用例 使用例は特にありません。
エラー エラーは発生しません。

unfgets

実行レベル 標準実行レベル
スタックの変化 S ---
または
S ---
機能 TOS とセカンドにあるファイル情報と文字列を用いて、 当該ファイルの現在の読み出し位置に論理的に文字列を挿入します。 当ワードで挿入された文字列はファイルに保存されている情報の前に ワード fgets 等により取り出されます。 なお、本ワードは何度も実行することができ、 その場合は、最後に挿入されたものから fgets 等により 読み出されます。
使用例 使用例はありません。
エラー スタック上に想定されている情報が存在しない場合はエラーとなります。

valid?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS から値を取り出し、その値がが有効な値であるかどうかを調べます。 有効な値であれば true を、さもなければ false をスタックに積みます。
使用例 サンプルコードはありません。
エラー スタックが空の場合はエラーとなります。

vmap

実行レベル 標準実行レベル
スタックの変化 ℒ1 ℒ2 ---
機能

セカンドにあるリスト ℒ2 の各要素に対し、 TOS にあるリスト ℒ1 の要素として、 それぞれ格納されているラムダ(無名ワード)を適用します。

例えば、ℒ1=( e1 e2 ... eN ) とし、 ℒ2=( λ1 λ2 ... λN ) とすると、 ℒ1 ℒ2 vmap の結果は、 ( e1・λ1   e2・λ2   ...   eN・λN ) となります。 ただし、ek・λk は ek に λk を適用した結果を表すものとします。

本ワードにおいては、 λk はスタックから 1 つ値を取り出し、かつ、 処理の結果何らかの値を 1 つスタックに積むような無名ワードであると 想定されています。

使用例 次の例では、リスト ( 1 2 ) の要素 1 および 2 に、 それぞれ { 2 * } と { 3 * } を適用しています。 1 { 2 * } exec の結果は 2 となり、 2 { 3 * } exec の結果は 6 となりますので、 vmap の結果として ( 2 6 ) というリストが表示されています。
> ( 1 2 ) ( { 2 * } { 3 * } ) vmap .
  ( 2 6 ) ok.
エラー スタックが空であったり、セカンドおよび TOS がリストでない、 もしくは TOS がλで構成されるリスト(ラムダリスト)でない場合は エラーとなります。

vocabulary

実行レベル 標準実行レベル
スタックの変化 --- S
機能 現在のデフォルトのボキャブラリをスタックに積みます。
使用例 次の例では、現在のデフォルトのボキャブラリを表示しています。
> vocabulary .
  user ok.
エラー エラーは発生しません。

when

実行レベル 即時実行レベル 1
スタックの変化
実行時
  ---
※ 変化しません。

即時実行時(コンパイル時)
RS: --- θ
SS: α4 α3 α2 α1 I0 --- α4 α3 α2 α2 I0
※ α1 を α2 の値で上書きします。
機能 ワード looprepeat により 構成されるブロック内で使用されることを想定したワードです。 looprepeat 内ブロックで 本ワードを用い、
loop 〜 when ループ継続条件の確認 repeat
とすると、「ループ処理の確認」部を実行した直後の TOS が false の時にループを抜け、 そうでない時にはループを継続するようになります。

while - dorepeat ループと異なるのは、 ループから抜けるか否かの処理を、ループブロック本体の実行後に 行うところです (なので、最低でも 1 回はループブロック本体を実行します)。

使用例 次の例では、ループを継続するかを判定する部分では TOS が 10 以下であるかどうかを確認していますが、 その判定処理が行われる前に、 TOS の値を表示する処理が行われるため、 100 という 10 以上の TOS の値が表示されています:
> 100 loop @. 1 + when dup 10 < repeat drop
  100 ok.

もちろん、最初に与える値を 1 等にすれば、
> 1 loop @. 1 + when dup 10 < repeat drop
  1 2 3 4 5 6 7 8 9 ok.
となります。
エラー 構文スタック上に、ループ構造のための情報が構築されていない場合は エラーとなります。

while

実行レベル 即時実行レベル 1
スタックの変化
実行時
  ---
※ 変化しません。

即時実行時(コンパイル時)
RS: --- θ
SS: --- α4 α3 α2 α1 I0 κ
※ SS における各情報は、ワード for+ と同様ですが、 κ は while ループを示す値となり、 α1 は現在コンパイル中のアドレスを指し、 それ以外の α2 〜 α4 の値については、 未定(実査は invalid )となります。

while ループでも for{+|-} ループで使用できる、 ワード continueleaveredo を使用可能とするため、 for{+|-} ループと構文情報チャンクの書式を同じ形式にしています。

機能 repeat と対を成しループを形成します。 ワード repeat は 本ワード while が書かれている位置に制御を移します。 その後、while と do の間に書かれている 処理を実行し、 ワード do が書かれている場所いて、 TOS が true であるか否かを調べます。

このとき TOS が true であれば、 do から repeat までの処理が実行されます。 TOS が false でない場合は、 repeat の直後に制御が移ります。

使用例 次の例では、10 から 0 までの値を表示します。
> 10 while dup 0 >= do dup . 1 - repeat drop
  10 9 8 7 6 5 4 3 2 1 0 ok.
エラー 本ワード実行時にはエラーは発生しません。

while-pipe

実行レベル 即時実行レベル 1
スタックの変化 実行時
  X ---

即時実行時
RS: --- θ
SS: --- α4 α3 α2 α1 I0 κ
※ SS における各情報は、ワード for+ と同様です。 while-pipe ループでも for{+|-} ループで使用できる、 ワード continueleaveredo を使用可能とするため、 for{+|-} ループと構文情報チャンクの書式を同じ形式にしています。
機能 ワード repeat と対を成し、 パイプからデータを受け取り、 パイプが閉じられるまで繰り返すループを形成します。
使用例 ワード [[ の例を参照して下さい。
エラー エラーは発生しません。

windows?

実行レベル 標準実行レベル
スタックの変化 --- B
機能 Windows 上で実行されているか否かを示します。 Windows 上で実行されているのであれば true をプッシュし、 そうでなければ false をプッシュします。
使用例 次の例では、Windows 上で実行されている場合に限り、 SJIS で出力するように文字コード変換モードを変更します。
> windows? if utf8>sjis then
  ok.
エラー エラーは発生しません。

word-name

実行レベル 標準実行レベル
スタックの変化 W --- S
機能 TOS にあるワードへのポインタを取り出し、 そのポインタが示すワードのワード名をスタックに積みます。
使用例 次の例では、test というワードへのポインタから "user:test" という文字列を取得しています。
> `test : /* empty */ ;
  ok.
> "test" >word word-name .
  'user:test' ok.
エラー TOS にワードポインタが無い場合はエラーとなります。

word-short-name

実行レベル 標準実行レベル
スタックの変化 W --- S
機能 TOS にあるワードへのポインタを取り出し、 そのポインタが示すワードの短縮ワード名をスタックに積みます。
使用例 次の例では、test というワードへのポインタから "test" という文字列を取得しています。
> `test : /* empty */ ;
  ok.
> "test" >word word-short-name .
  'test' ok.
エラー TOS にワードポインタが無い場合はエラーとなります。

word-type

実行レベル 標準実行レベル
スタックの変化 --- L
機能 ワードの値を表す型情報の数値をスタックに積みます。
使用例 次の例では、無名関数のダンプを本ワードを活用して行っています:
> `test : { "HELLO" .cr } exec ;
  ok.
> "test" dump
num of local vars: 0
the word 'user:test' is:
[0] dataType:(WORD-PTR) value:0x7f80a5407a30[std:_lit]
[1] dataType:word value:0x7f80a5712510[]
[2] dataType:(WORD-PTR) value:0x7f80a55070f0[std:exec]
[3] dataType:(WORD-PTR) value:0x7f80a540a090[std:_semis]
 ok.
> 0x7f80a5712510 word-type >type dump
num of local vars: 0
the word '' is:
[0] dataType:(WORD-PTR) value:0x7f80a5407a30[std:_lit]
[1] dataType:string value:HELLO
[2] dataType:(WORD-PTR) value:0x7f80a55085f0[std:.cr]
[3] dataType:(WORD-PTR) value:0x7f80a540a090[std:_semis]
 ok.

上記で表示した 16 進数の値は、あくまでも この説明文を作成するときに用いている環境での値であり、 皆さんの実行環境では異なる値となる場合があります (偶然にも同じ値になる場合もあります)。

word-type の直前に記した 16 進数は、ワード test をダンプした時に 表示されているものです。 ワード exec の直前に _lit というワードと共に 配置されているので、これがワード test 内に記述された無名ワード { "HELLO" .cr } へのポインタ値であることが分かります。 この値をワード型へと変換することにより、 dump で当該の無名ワードのダンプが実施できています。

エラー エラーは発生しません。

word?

実行レベル 標準実行レベル
スタックの変化 X --- B
機能 TOS より値を取り出し、その値がワードであるか否かを調べます。 ワードであった場合は true を、 そうでない場合は false をスタックに積みます。
使用例 次の例では、"Solvalou" という文字列がワードであるか否かを調べています。 文字列はワードではないので、false という値が出力されます:
> "Solvalou" word? .
  false ok.
エラー スタックが空の場合はエラーとなります。

worded-docol-caller

実行レベル 標準実行レベル
スタックの変化 --- C
機能 スタックにワード定義された docol 処理を呼び出す標準コードを積みます。 なお、実際に呼び出せるユーザー定義ワードは、 ワード set-worded-docol-callee を用いて設定します。
使用例 このサンプルコードは、ワード呼び出しの前後に、 文字列を表示する myDocol を定義し、 それが機能している様子を確認します。

以下のサンプルコードで定義されるワード hello は、 文字列 HELLO を出力するのみのワードです。

このワード hello の docol として、myDocol を呼び出す worded-docol-caller を設定することにより、 ワード hello を実行すると、hello には定義されていない 処理が hello の実行前後に実行される様子が確認できます。

`myDocol :
    "IN:myDocol" .cr
    "targetWord=" . word-name .cr

    docol

    "OUT:myDocol" .cr
;

"myDocol" >word set-worded-docol-callee

`hello : "HELLO" .cr ;

"hello" >word worded-docol-caller set-code

hello 

 'IN:myDocol'
 'targetWord=' 'user:hello'
 'HELLO'
 'OUT:myDocol'
エラー エラーは発生しません。

write

実行レベル 標準実行レベル
スタックの変化 X ---
機能 TOS のデータを標準出力または擬似標準出力へ出力します。 . (ドット)とは異なり、スペースの出力を伴いません。
使用例 write と . (ドット)による出力の違いに注意して下さい。
> "A" 1 write write cr
1A
  ok.
>

> "A" 1 . . cr
1 A
  ok.
>
エラー スタックが空のときはエラーとなります。

xor

実行レベル 標準実行レベル
スタックの変化 B B --- B
機能 Second と TOS の排他的論理和を計算し、スタックにプッシュします。
使用例 次の例では、true と false の排他的論理和を計算しています。
> true false xor .
  true ok.
エラー スタックに 2 つ以上の値が格納されていなかったり、 TOS および Second が bool 値でなかったりした場合にはエラーとなります。

zip

実行レベル 標準実行レベル
スタックの変化 ℒ1 ℒ2 ---
機能 TOS およびセカンドからリスト L1 および L2 を取り出し、 L1 の要素と L2 の要素から成る 2 つ組のリスト(タプル)を生成し、 それらから構成されるリストをスタックに積みます。

リスト L1 と L2 の要素数は同一でないとエラーとなります。 2 つの空リストに対し、本ワードを使用すると空リストをスタックに積みます。

使用例 次の例では、リスト ( ZOP AH SHEO ) ( 0 1 2 ) に対し、 zip を適用し、その結果を表示しています:

> ( ZOP AH SHEO ) ( 0 1 2 ) zip .
  ( ( ZOP 0 ) ( AH 1 ) ( SHEO 2 ) ) ok.
エラー TOS およびセカンドがリストでない場合や、 リストであっても要素数が異なる場合はエラーとなります。