Forum Informatica Unict

LAUREA MAGISTRALE => Linguaggi di Programmazione, 9 CFU => Topic started by: alex180788 on 29-11-2014, 12:16:51



Title: Esercizio 22 Prolog
Post by: alex180788 on 29-11-2014, 12:16:51
Vorrei proporre la mia soluzione (testata) e confrontarla con quella proposta sul sito del corso. Soprattutto per vedere se la mia soluzione è corretta o potrebbe fallire in qualche caso particolare: si tratta di implementare il predicato usable per gli Yunz

usable(frunz(N,M,Y1,Y2)):-N=:=276,!;
                                    M=:=276,!;
                                    usable(Y1);
                                    usable(Y2).

mentre quella sul sito è
usable(frunz(N,M,Y1,Y2)) :- !, N is 276;
                            !, M is 276.
                            !, usable(Y1).
                            !, usable(Y2).

nella mia soluzione: il primo cut evita che ci siano due "true" quando sia M sia N sono istanziati a 276, mentre il secondo cut evita che ci siano due "true" quando la query è vera sia a causa di una condizione che si verifica nel corpo della clausola sia a causa di una condizione che si verifica per una delle due query ricorsive. Ho testato con le seguenti query e dovrebbe funzionare:

?- usable(frunz(276,4,yor,yor)).
true.

?- usable(frunz(2,4,yor,yor)).
false.

?- usable(frunz(276,276,yor,yor)).
true.

?- usable(frunz(6,276,yor,yor)).
true.

?- usable(frunz(26,276,yor,frunz(276,276,yor,yor))).
true.

?- usable(frunz(26,276,yor,frunz(276,276,frunz(276,276,yor,yor),yor))).
true.

?- usable(frunz(276,276,yor,frunz(276,276,frunz(276,276,yor,yor),yor))).
true.

?- usable(frunz(26,4,yor,frunz(276,276,yor,yor))).
true.

mi domando quindi, a cosa servono gli altri due cut nella soluzione proposta?


Title: Re:Esercizio 22 Prolog
Post by: Franco Barbanera on 30-11-2014, 09:22:29
Sul sito c'e' scritto che e' una soluzione...mica che sia la migliore.... .wink

Inseriro' anche la tua soluzione con i tuo giusti commenti.

FB