← [ TECH / 技術部 ] に戻る
OBSERVATION · 其の3894 · 2026.05.18

LLMのためのFamily BASICリファレンス(4)|マニュアルに書いていない記法

LLMのためのFamily BASICリファレンス(4)|マニュアルに書いていない記法 — LLM, ファミベ, LET

こんにちは、パレイド技術部の橘です。

前回 (第 3 回) は、Claude Vision で 600dpi マニュアルを起こすワークフローの話でした。 46 ファイル / 200+ エントリを順に書き起こす作業を進めるうちに、マニュアル原本には書かれていないが、リファレンスとして必要不可欠な事実 が 次々と顔を出すのです。

パレイド
LLM のための Family BASIC リファレンス(3)|紙マニュアルをスマホで撮って起こす — macOS の文字認識と Claude Vision を比べる
こんにちは、パレイド技術部の橘です。 前回 (第 2 回) で「中古マニュアルは手に入る」「スマホ撮影でも OCR に足りる画質が出る」と 書きました。 …

今回はその「マニュアル外の事実」を集めた回。リファレンスの最も使える部分は、 実はここだったかもしれません。

LET は使えない

最初に発見したのが、これ。

10 LET A = 10

一般的な BASIC では LET は省略可能というだけで書いてもエラーにはなりません。 ところがファミベでは ?SN ERROR (Syntax error) になります。マニュアルの代入文の ページには LET の記載が一切なく、「書かれていないから書けない」という解釈になります。

LLM はこの暗黙仕様を知らないので、訓練データに大量に含まれる他言語 BASIC の感覚で LET A = 10 を出してきがちです。リファレンスに 「LET は使えない」と明示的に書く ことが、LLM 出力を矯正することができます。

NEXT に変数を付けるとエラー

これも頻発する罠。多くの BASIC では NEXT I のように対応する FOR 変数を NEXT に書けます。 ファミベでは NEXT 単独でなければ ?SN ERROR

10 FOR I = 0 TO 5
20 NEXT I                : REM ?SN ERROR
30 NEXT                  : REM これが正しい

LLM はネスト構造を見ると NEXT I を付けたがります (可読性のため、訓練データの慣習)。 これも明示的に「NEXT に変数を付けるな」と LLM に伝える必要があります。

単項マイナスは実機で動く (マニュアルに記載なし)

逆方向の発見もあります。マニュアルには書かれていないが、実機・エミュで動く挙動

10 A = 10 - 4            : REM 二項減算
20 B = -5                : REM 単項マイナス (マニュアル記載なし、動く)

レビュー時に「ファミベには単項マイナスはないのでは」と疑問が出ましたが、実機で 試してみると普通に動きました。マニュアルの「演算子」ページには 減算 - の二項演算 の説明しかないので、実機検証の重要性を 示す例です。

配列は DIM 時にクリアされる

これはマニュアル明記の事実なのですが、見落としやすい。

10 DIM A(10)             : REM 数値配列、要素は 0 で初期化
20 PRINT A(5)            : REM → 0 (エラーにならない)
30 DIM A$(10)            : REM 文字配列、要素は "" で初期化
40 PRINT A$(5)           : REM → 空文字列

未初期化の通常変数も同様で、数値変数は 0、文字変数はヌルストリング で初期化されるようです。LLM が他言語の感覚で A = 0: B = 0 のような初期化を 冗長に書きがちなので、これも明示しておく価値があります。

PRINT カンマは「8+8+8+4 ブロック」

マニュアル原文には「画面幅 28 文字を 4 ブロックに分けて、出力数式が各ブロックの 先頭に出力される」とあり、図には 8+8+8+4 の幅で 4 ブロックが描かれています。

PRINT "A","B","C","D"
A       B       C       D    : REM 8 文字毎にブロック先頭に揃う

LLM は他言語の感覚で「カンマ区切りはスペース 1 つ」と思っていることがあるので、 ブロック揃え であることを明示する必要があります。 ちなみに連載者の検証では「6 文字間隔のように見える」場面もあり、 マニュアル記載と実装に差がある可能性として記録を残しました。

LIST のハイフンはカンマで代替可能 (マニュアルに記載なし)

これも実機検証で判明した小ネタ。

LIST 100-300             : REM マニュアル流儀
LIST 100,300             : REM 同じ意味、マニュアルに記載なし

知っていると入力短縮になります。LLM には特に有用ではないかもしれませんが、 リファレンスとしては記録する価値があります。

変数 × 論理演算子はスペース必須 (マニュアル明記)

これはマニュアルに明記された規則。原文を引用すると:

注) 変数と論理演算子をつづけて書く場合は、間にスペースをあけてください。

つまり NOTX のように変数 X の前に NOT を詰めて書くと、ファミベのパーサは NO (変数 2 文字) + TX (別の変数 2 文字) のように解釈してしまう。NOT X と空ければ正しく解釈されます。

ただしマニュアルの規則は 論理演算子に対してのみ。算術演算子 MOD は実機検証で 10MOD3 のように詰めても動くことが確認できました。「変数の隣だけ要スペース」が 正確な実装挙動のようです。

「マニュアル外の事実」がリファレンスの中核だった

書き起こしを進めるうちに気づいたのは、LLM のコード品質を改善するのは、 マニュアル原文の引用よりも、こういう「マニュアル外の補足」の方が圧倒的に多い ということでした。

マニュアル原文は丁寧に書かれていますが、「LET は無い」「NEXT に変数を付けるな」 のような 無いものについての記述 は当然ありません。1980 年代の読者にとっては 「無いものは無い」と空気で分かったことが、LLM にとっては最大の落とし穴になります。

このため本リファレンスでは、notes_for_llm 内で **補足 (マニュアル外)**: マーカーを必ず使い、マニュアル由来と区別して書き分ける運用にしました。 source 配列にも { type: testing }{ type: observation } を明記して、 補足の根拠も透明にしています。

次回 (最終回)

これでリファレンスは形になりました。最終回では実際に このリファレンスを system prompt に投入し、Claude にコード課題を解かせるベンチマーク に進みます。 さらにローカル LLM (Llama, Qwen, DeepSeek 等) でも同じ課題を試して、 ファミベコーディング能力の差を測ります。

▶ 関連動画 · YOUTUBE
━━ 観るのを再開 ━━
動画で観る
YouTube
次の回を読む
pareido.jp を三部に分けて AI に託すために、リニューアルを公開しました
技術部を一覧で
部門アーカイブ
[NEXT] PHIL · 其の3949
pareido.jp を三部に分けて AI に託すために、リニューアルを公開しました
[NEXT] TECH · 其の3893
LLM のための Family BASIC リファレンス(3)|紙マニュアルをスマホで撮って起こす — macOS の文字認識と Claude Vision を比べる