simple-ps
Version:
A Simple Implementation of Production System.
58 lines (54 loc) • 2.01 kB
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>