On me demande de représenter un FSA dans prolog.construction FSA dans prolog
- Une fsa est une liste d'états.
- Un état est une structure avec l'état de foncteur et 3 arguments: un nom, une liste de transitions , et oui ou non pour indiquer si l'état est en cours d'acceptation ou pas.
- Une transition est une structure avec la transition de foncteur et 2 arguments: de, un caractère et un nom d'état.
Nos FSA n'ont pas de mouvements epsilon.
nondfsa(FSA)
est vrai si FSA est non déterministe. Terminer nondfsa. Conseil: utilisez un prédicat auxiliaire , nondstate(State)
, ce qui est vrai si State a des transitions non déterministes . Vous pouvez ajouter des clauses pour la predicates.`
Je me donne la réponse comme suit:
nondfsa([Hstate | _ ])
:- nondstate(Hstate).
nondfsa([ _ | Tailstates]) :-
nondfsa(Tailstates).
nondstate(state(_ , Transitions, _)):-
member(transition(Char, To1), Transitions),
member(transition(Char, To2), Transitions),
not(To1 = To2).
quelqu'un peut-il expliquer à moi ce que chaque prédicat est en train de faire? Je suis très confus sur ce que ces lignes traduisent exactement. Je comprends Une fsa sans mouvements epsilon est non-déterministe si au moins un état a plus d'une transition avec le même caractère. Je ne comprends tout simplement pas ce qui se passe dans ce code.
Que signifie * On me donne la réponse *? Était-ce votre tâche de trouver cette réponse, ou l'a-t-elle fournie en classe et vous êtes censé l'analyser? – lurker
@lurker c'est pour un examen final pratique et la tâche est de trouver le code et de vérifier votre travail, ils vous fournissent la bonne réponse. Je ne comprends tout simplement pas comment ils l'ont inventé et ce qu'il fait exactement – bkennedy