UNPKG

simple-ps

Version:

A Simple Implementation of Production System.

58 lines (54 loc) 2.01 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>test</title> </head> <body> <h1>test</h1> <!-- <script src="https://cdn.jsdelivr.net/npm/simple-ps@latest/dist/simple-ps.js"></script> --> <script src="../dist/simple-ps.js"></script> <script> const ruleStr = `/* 数当てゲームのルール */ 10: s(スタート) > rand(秘密の答) mul(秘密の答 10 秘密の答) floor(秘密の答 秘密の答) st(秘密の答) wm() alert("0から9の数字を入力して!") ; 5: s(スタート) no(入力) > prompt(入力) ; 1: s(入力) s(秘密の答) gt(入力 秘密の答) > alert("もっと小さな値だよ") prompt(入力) ; 1: s(入力) s(秘密の答) lt(入力 秘密の答) > alert("もっと大きな値だよ") prompt(入力) ; 1: s(入力) s(秘密の答) eq(入力 秘密の答) > alert("大正解!") stop() ; `; // 自作ビルトイン例。プロップトから入力。 class PromptBI extends SimplePS.BuiltIn { constructor() {super("prompt");} eval() { this.checkArgsNum(1); const name = this.getArgAsName(0); const n = prompt(name); this.setVar(name,Number(n)); this.addOneInfoToWM(name,Number(n)); } } // 自作ビルトイン例。アラートで出力。 class AlertBI extends SimplePS.BuiltIn { constructor() {super("alert");} eval() { this.checkArgsNum(1); const msg = this.getArgIfNotEmpty(0); alert(msg); } } const engine = new SimplePS.Engine(ruleStr); engine.addBuiltIn(new PromptBI()); // ビルトイン登録 engine.addBuiltIn(new AlertBI()); // ビルトイン登録 // 推論スタート。でも実行できるルールが // ないのですぐに待機状態になる。 engine.start(); // WMに情報を追加すると待機状態が解除される。 engine.addOneInfoToWM("スタート"); </script> </body> </html>