まず最初に、たまたまここで質問するのはこれが初めてなので、適切な場所でない場合はご容赦ください。
FSM を実装する Prolog コアを持つかなり複雑なソフトウェアを開発しています。私はそれを (決して) 止めたくないので、Prolog の再帰を使用して機能する適切なループのような述語を作成しようとしています。何度か失敗した後 (主にスタックの問題が原因で)、最終的に次のような結果になりました。
/* Finite State Transition Network */
transition(st0,evnt0,st1).
transition(st1,evnt1,st2).
transition(st2,evnt2,st0).
fsm_state(state(st0),system(Energy,ActivePayloads),[]) :-
/* ... */
transition(st0,evnt0,NextState),
!,
fsm_state(state(NextState),system(Energy,ActivePayloads),[]).
fsm_state(state(st1),system(Energy,ActivePayloads),[]) :-
/* ... */
transition(st1,evnt1,NextState),
!,
fsm_state(state(NextState),system(Energy,ActivePayloads),[0,1,2]).
fsm_state(state(st2),system(Energy,ActivePayloads),[P|Params]) :-
/* ... */
transition(st2,evnt2,NextState),
!,
fsm_state(state(NextState),system(Energy,ActivePayloads),[]).
start :-
Sys = system(10,[]),
fsm_state(state(s0),Sys,[]).
これは良いアプローチですか?