Ho battuto la testa contro il muro su questo problema di compiti a casa per alcune ore. Dobbiamo analizzare un'espressione regolare con Prolog. Per la maggior parte, i predicati funzionano, ma ci sono alcune espressioni regolari e combinazioni di stringhe che fanno sì che finiscano lo spazio di stack in SWI-Prolog. Ecco un esempio con due delle combinazioni di stringhe Regex, quello che funziona e uno che non lo fa:RegEx Parser scritto in Prolog
star(star(char(a))), []
star(star(char(a))), [a]
Il primo funziona e il secondo esaurisce la pila.
Ecco i predicati che sto usando:
re_match(epsilon, []).
re_match(char(Letter), [Letter]).
re_match(star(_), []).
re_match(seq(Rx1, Rx2), List) :- append(List1, List2, List), re_match(Rx2, List2), re_match(Rx1, List1).
re_match(alt(Rx1, Rx2), List) :- re_match(Rx1, List); re_match(Rx2, List).
re_match(star(Rx), List) :- append(List1, List2, List), re_match(Rx, List1), re_match(star(Rx), List2).
Non sono sicuro di quale cambiamento ho bisogno di fare per farlo funzionare bene, ma non sono sicuro che altro fare.
Inoltre, la modifica dell'elenco: - append (Elenco1, Elenco2, Elenco) su [H | T] non viene valutata come vera per uno degli esempi.
Posso segnalare che funziona correttamente in GNU Prolog ... – aioobe