付録E Forthスタイル規則の要約

この付録の内容はパブリックドメインです。 あなたが出典をクレジットするならば、私たちは制限なしに出版を奨励します。

字下げと空白のガイドライン

1つだけ空白空けるのはコロンと名前の間。

2つだけ空白空けるのは名前とコメントの間。 [1]

2つの空白か改行入れるのは、 コメントの後と、定義の前。 [1]

3つの空白空けるのは、コメントが無い時の名前とその定義の間。

3つの空白で字下げするのは後続の各行(入れ子になった場合は更に3の倍数)。

1つの空白空けるのは、フレーズの中の、ワードや数値の間。

2か3の空白空けるのはフレーズとフレーズの間。

1つの空白空けるのは最後のワードとセミコロンの間。

1つの空白空けるのは、(必要な場合、)セミコロンと IMMEDIATE の間。

グループの異なる定義を区切る場合を除き、定義の間に空白行は挟みません。

スタックコメントの略語

表 5 スタックコメントの略語
n 1倍長 符号付整数
d 2倍長 符号付整数
u 1倍長 符号無整数
ud 2倍長 符号無整数
t 3倍長(triple)
q 4倍長(quadruple)
c 7ビット キャラクタ値(訳注:ASCII表示文字の範囲)
b 8ビット バイト値
? ブーリアンフラグ。左記または以下、
t= true
f= false
a or adr アドレス
acf コードフィールドのアドレス
apf パラメータフィールドのアドレス
` ((英語では)プレフィックスとして) …のアドレス
s d (ペアで使って)元(source)、先(destination)
lo hi 下限(lower-limit)、上限(upper-limit) (内包)
# カウント。
o オフセット
i インデックス
m マスク
x 詳細を気にしない何か(データ構造記法)

「オフセット」とは、バイトなどの絶対単位で表される差です。

「インデックス」とは、要素やレコードなどの論理単位で表される違いです。

入力ストリームのコメント凡例

表 6 入力ストリームのコメント凡例
c 空白で区切られた単一文字
name 空白で区切られた文字の連なり
text 空白以外で区切られた文字の連なり

実際の区切り文字をtextの後に続けます。 例: text" または text)

良いコメントスタイルの例

以下は、優れたコメントスタイルを説明するための2つのスクリーン例です。

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
\ Formatter         Data Structures -- p.2             06/06/83
 6 CONSTANT TMARGIN \ line# where body of text begins
55 CONSTANT BMARGIN \ line# where body of text ends

CREATE HEADER 82 ALLOT
\  { 1left-ent | 1right-cnt | 80header }
CREATE FOOTER 82 ALLOT
\  { 1left-cnt | 1right-ent | 80footer }

VARIABLE ACROSS   \ formatter's current horizontal position
VARIABLE DOWNWARD \ formatter's current vertical position
VARIABLE LEFT     \ current primary left margin
VARIABLE WALL     \ current primary right margin
VARIABLE WALL-WAS \ WALL when curr. line started being formt'd
0
1
2
3
4
5
6
7
8
\ Formatter          positioning -- p.1               06/06/83
: SKIP  ( n)  ACROSS +! ;
: NEWLEFT  \ reset left margin
   LEFT @  PERMANENT @ +  TEMPORARY @ +  ACROSS ! ;
: \LINE  \ begin new line
   DOOR  CR'  1 DOWNWARD +!  NEWLEFT  WALL @  WALL-WAS ! ;
: AT-TOP?  ( -- t=at-top)  TMARGIN  DOWNWARD @ = ;
: >TMARGIN  \ move from crease to TMARGIN
   O DOWNWARD !  BEGIN  \LINE  AT-TOP? UNTIL ;

命名規則

表 7 命名規則
意味 形式
算術関係    
整数の1 1name 1+
整数の2 2name 2*
増分入力パラメータを取る +name +DRAW
乗算入力パラメータを取る *name *DRAW
コンパイル時    
高レベル定義コードの開始 name: CASE:
高レベル定義コードの終了 ;name ;CODE
何かを辞書(dictionary)に書き込む name, C,
コンパイル時に実行される(訳注: IMMEDIATE) [name] [COMPILE]
ほんの少し違う name' (prime) CR'
何かの内部処理またはプリミティブ
(name)
または <name>
(TYPE)
<TYPE>
コンパイルワードの実行時部分:    
括弧で囲んでない時 小文字 if
括弧で囲んだ時 (NAME) (IF)
定義ワード :name :COLOR
オーバーレイが始まる場所のブロック番号 namING DISKING
データ構造    
表または配列 names EMPLOYEES
要素の総数 #name #EMPLOYEES
現在の項目番号(添字番号)(変数) name# EMPLOYEE#
現在の項目をセットする ( n) name 13 EMPLOYEE
次の要素へ進める +name +EMPLOYEE
構造体の先頭から
アイテムまでのオフセット
name+ DATE+
サイズ(バイト単位)
(BYTES÷nameの1倍長数)
/name /EMPLOYEE
インデックスポインタ >name >IN
構造体のアドレスから
アイテムのアドレスに変換
>name >BODY
ファイルインデックス (name) (PEOPLE)
ファイルポインタ -name -JOB
構造体初期化 0name 0RECORD
方向、変換    
後方へ name< SLIDE<
前方へ name> CMOVE>
何々から(from) <name <TAPE
何々へ(to) >name >TAPE
何々へ変換 name>name FEET>METERS
下方へ(downward) \name \LINE
上方向へ(upward) /name /LINE
開く(open) {name {FILE
クローズ(close) }name }FILE
ロジック、制御    
ブール値を返す name? SHORT?
負論理のブール値を返す -name? -SHORT?
ブール値を格納したアドレスを指す 'name? 'SHORT?
条件によっては当該の動作 ?name
?DUP
(maybe DUP)
許可(enable) +name +CLOCK
または記号無し版 name BLINKING
禁止(disable) -name
-CLOCK
-BLINKING
メモリ    
値を保存(save value of) @name @CURSOR
値を復元(restore value of) !name !CURSOR
nameに格納 name! SECONDS!
nameから取得 name@ INDEX@
バッファーの名前 :name :INSERT
名前のアドレス 'name 'S
名前を指し示すアドレス 'name 'TYPE
交換、特別なバイト達 >name< >MOVE<
数値型    
バイト長 Cname C@
2セルサイズ、2コンポーネント
の符号付き整数
Dname D+
16bit(1cell)と32bit(2cell)混在演算 Mname M*
3セルサイズ Tname T*
4 cell size Qname Q*
符号なし整数 Uname U.
出力、印刷    
項目を出力 .name .S
数値を出力(名前は型を表す) name. D. , U.
右詰めで出力 name.R U.R
数量    
割った(割合) /name /SIDE
シーケンス(連なり)    
開始 <name <#
終了 name> #>
テキスト    
(ワード区切の空白に続いて)文字列が続き " で終端する name" ABORT" text"
テキストまたは文字列演算子
(BASICの$プレフィックスに似ています)
"name "COMPARE
超文字列(superstring)配列 "name" "COLORS"

記号の発音

表 8 記号の発音
! ストア(store;格納)
@ フェッチ(fetch;取得)
# シャープ(sharp)、または #RECORDS 等における ナンバー(number)
$ ドル(dollar)
% パーセント(percent)
^ カレット(caret)
& アンバサンド(ampersand)
* スター(star)(訳注:日本ではアスタリスク)
( 左パーレン(left paren; paren)(訳注:丸括弧)
) 右パーレン(right paren; paren)(訳注:丸括弧)
- ダッシュ(dash)、(マイナス記号から類推して)ノット(not)
+ プラス(plus)
= イコール(equals)
{ } ブレース(braces)(訳注:波括弧)
[ ] スクエアブラケット(square brackets)(訳注:角括弧)
` クォート(quote)
' プレフィックスとしてティック(tick)、サフィックスとしてプライム(prime)
~ チルダ(tilde)
| バー(bar)
\ バックスラッシュ(アンダー(under)、ダウン(down)、スキップ(skip)とも言う)
/ スラッシュ(slash)、またはアップ(up)
< 未満
  左矢印
> よりおおきい(等号含まず)
  右矢印
? クエスチョン(question) (しばしば クエリー(query) の方が好ましい)
, コンマ(comma)
. ドット(dot)

脚注

[1](1, 2) よく見られる代替手段では、名前とコメントの間に1空白、コメントと定義の間に3空白が必要です。 より自由な手法では、コメントの前後に3つの空白を使用します。 あなたは何を選んでも構いませんが、一貫性を保ってください。