ルールファイル形式(`.clp` など)

このページは、生成規則モデルでよく誤解される「ルールはどんなファイルにどう保存されていたか」を短く整理するノートです。
結論から言うと、当時の中心は JSON ではなく、推論エンジン向けの専用テキスト形式でした。

先に要点

  • ルール本体は自然文の長文ではなく、条件判定しやすい記号構文で書く
  • 形式は実装依存(CLIPS, Prolog, Lisp 系など)だが、核は if-then
  • ファイルは「データ倉庫」だけでなく、推論の規則も同居することが多い

.clp(CLIPS)に入るもの

代表的には次の3種類です。

  • deftemplate: 事実データの型定義
  • deffacts: 初期事実(ワーキングメモリに積む初期データ)
  • defrule: 条件部(LHS)と動作部(RHS)を持つ規則

例(簡略):

(deftemplate patient
  (slot name)
  (slot temp)
  (slot cough))

(deffacts initial-data
  (patient (name "A") (temp 38.5) (cough yes)))

(defrule suspect-flu
  (patient (name ?n) (temp ?t&:(> ?t 38.0)) (cough yes))
=>
  (assert (diagnosis (name ?n) (result flu))))

「yes/no の目的変数だけ」ではない

THEN 側は二値ラベルだけでなく、次のように多様です。

  • 新しい結論ファクトを追加(例: suspect_flu
  • スコアや属性を付けて更新(例: risk=high
  • 次ルールの条件を満たす中間事実を追加

つまり、機械学習の単一目的変数のように1回で終わるより、結論を連鎖生成する設計が多く見られます。

「知識をコードに直書きしていたのか」

直書きされる場合もありましたが、設計思想としては次の分離が重視されました。

  • 推論エンジン(マッチング・競合解決・実行)
  • 知識ベース(ルール群と事実定義)

現実には完全分離できないケースもありましたが、知識を差し替え可能にする方向は当時から重要でした。

JSON との違い(短く)

  • JSON: 汎用のデータ交換形式(データの入れ物)
  • ルールファイル(.clp 等): データ定義 + 規則 + 推論連鎖のトリガ

比喩としては、JSON が「倉庫」に近いのに対し、ルールファイルは「倉庫 + 判断ロジック」です。

関連