この例を説明するために、次のように仮定します。
- システムのルールは 1 つだけです
- ルール エンジンに提供された最初のファクト セットがそのルールの when の基準を満たすこと
- そのシーケンスは正の整数値です
まず、挿入がコメントアウトされている場合を考えます。
ワーキング メモリには、値 == 0 を持つオブジェクトが少なくとも 1 つ含まれており、シーケンス == 0 を持つオブジェクトは存在しないことがわかっています。 .) ( 存在するフィボナッチ (...))) ではありません。両方の基準を満たす単一のオブジェクトが存在する場合、ルールは有効であることに注意してください。
その結果、オブジェクトの値がゼロに設定され、このオブジェクトが変更されたことをエンジンに通知します。システム内に sequence == 0 のオブジェクトがなく、このオブジェクトがルールの実行をトリガーするように値を設定したため、無限ループが発生します。
ここで、挿入がコメント解除されている場合を考えてみましょう。
最初のファクト セットがルールを少なくとも 1 回実行することは既にわかっています。その結果、デクリメントされたシーケンスを持つオブジェクトが作業メモリに配置され、 f によって参照されるオブジェクトの値がゼロに設定され (ゼロから変更されない)、更新されます。ある時点でゼロシーケンスを持つオブジェクトが挿入されるため、終了条件が満たされるメカニズムが整っています。これで終了条件を満たします。
つまり、シーケンス 0 を持つフィボナッチ オブジェクトがある場合、エンジンは終了します。
私は、エラー..、フィボナッチ数列を出力する前に、このシステムを少し変更する必要があると思います。設定されているフィボナッチ数を評価するには、前の 2 つのフィボナッチ数を参照する方法が必要です。再帰的な方法ははるかにエレガントです ;)