首先,我告诉你,这恰好是我第一次在这里问东西,所以如果不是正确的地方,请原谅我。
我正在开发一个相当复杂的软件,它有一个实现 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,[]).
这是一个好方法吗?