.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Logica matematica (http://www.dsy.it/forum/forumdisplay.php?forumid=246)
-- Esame Di Oggi (http://www.dsy.it/forum/showthread.php?threadid=38579)


Posted by Torre on 15-06-2009 19:07:

Esame Di Oggi

Raga ma come si faceva il secondo esercizio di oggi?
Molti han detto che si congelava tutto ma i cut si attraversavano solo alla fine e quando trovo un fallimento non vado avanti, mi fermo e esco con fail...


Posted by garfa84 on 15-06-2009 20:05:

lasciamo stare, sono stato 1 ora un quarto per vedere come farlo e alla fine l'ho sbagliato, alla fine la prof ha fatto la correzione e si faceva che partiva il primo ramo si istanzia X/dario Y/competitivo nel nodo dopo _ va sostituito con A e nell'altro con B per far intendere che _ vuol dire qualsiasi variabile e così via...alla fine si trovano 2 soluzioni, invece io avevo trovato che tutti e 3 i rami fallivano perchè avevo inteso _ istanziandola allo stesso valore!!!
Si però non si può su due esercizi che se ne sbaglio 1 sei quasi fregato...allora fammene fare 4 o 5 o 6 in un' ora e mezza


Posted by Torre on 16-06-2009 09:25:

Si ma lei non le ha mai spiegate in classe queste cose cmq...
Va beh sarà x la prox volta, sperando di non trovare altre novità dell'ultimo secondo quando leggo il testo...


Posted by pragers on 16-06-2009 13:07:

Originally posted by garfa84
lasciamo stare, sono stato 1 ora un quarto per vedere come farlo e alla fine l'ho sbagliato, alla fine la prof ha fatto la correzione e si faceva che partiva il primo ramo si istanzia X/dario Y/competitivo nel nodo dopo _ va sostituito con A e nell'altro con B per far intendere che _ vuol dire qualsiasi variabile e così via...alla fine si trovano 2 soluzioni, invece io avevo trovato che tutti e 3 i rami fallivano perchè avevo inteso _ istanziandola allo stesso valore!!!
Si però non si può su due esercizi che se ne sbaglio 1 sei quasi fregato...allora fammene fare 4 o 5 o 6 in un' ora e mezza



ma sei sicuro che vengono due soluzioni?
A me ne è venuta una sola.Ho scritto il programma su prolog e con il quesito dell'esercizio la soluzione data dall'interprete è una sola e precisamente:

X = competitivo
Z = campione

L'interprete non dovrebbe sbagliare.


Posted by garfa84 on 16-06-2009 14:07:

se non ricordo male erano 2 soluzioni , non ne sono sicuro perchè non l'ho scritto!!!
ma il programma è questo:

batte(dario,luigi).
batte(franca,dario).
batte(paolo,luigi).
classe(X,competitivo) :- batte(X ,_),batte(_,X),!.
classe(X,campione) :- batte(X ,_),not batte(_,X),!.
classe(X,sportivo) :- batte(_,X ),not batte(X,_).

e il quesito
?-classe(dario,Y),classe(franca,Z).
perchè a me l'interprete mi dice che fallisce....strano!!
ma _ si rappresenta con un underscore normale!?!


Posted by pragers on 16-06-2009 14:18:

Originally posted by garfa84
se non ricordo male erano 2 soluzioni , non ne sono sicuro perchè non l'ho scritto!!!
ma il programma è questo:

batte(dario,luigi).
batte(franca,dario).
batte(paolo,luigi).
classe(X,competitivo) :- batte(X ,_),batte(_,X),!.
classe(X,campione) :- batte(X ,_),not batte(_,X),!.
classe(X,sportivo) :- batte(_,X ),not batte(X,_).

e il quesito
?-classe(dario,Y),classe(franca,Z).
perchè a me l'interprete mi dice che fallisce....strano!!
ma _ si rappresenta con un underscore normale!?!


si il testo è corretto.L'unica cosa è che il not deve avere le parentesi se no da errore in compilazione cioè not(batte(_,X))

guarda io l ho appena rifatto e l'output dell'interprete è:

?- classe(dario,Y),classe(franca,Z).
Y = competitivo,
Z = campione.

Fatto proprio copia/incolla.


Posted by Johnny88 on 16-06-2009 14:44:

L'interpreta ha pienamente ragione!

ecco cosa fa con il trace :

[debug] ?- trace,classe(dario,Y),classe(franca,Z).
Call: (8) [user] classe(dario, _G313) ? creep
Call: (9) [user] batte(dario, _L230) ? creep
Exit: (9) [user] batte(dario, luigi) ? creep
Call: (9) [user] batte(_L229, dario) ? creep
Exit: (9) [user] batte(franca, dario) ? creep
Exit: (8) [user] classe(dario, competitivo) ? creep
Call: (8) [user] classe(franca, _G316) ? creep
Call: (9) [user] batte(franca, _L230) ? creep
Exit: (9) [user] batte(franca, dario) ? creep
Call: (9) [user] batte(_L229, franca) ? creep
Fail: (9) [user] batte(_L229, franca) ? creep
Redo: (8) [user] classe(franca, _G316) ? creep
Call: (9) [user] batte(franca, _L230) ? creep
Exit: (9) [user] batte(franca, dario) ? creep
^ Call: (9) [user] not(batte(_G422, franca)) ? creep
Call: (10) [user] batte(_G422, franca) ? creep
Fail: (10) [user] batte(_G422, franca) ? creep
^ Exit: (9) [user] not(batte(_G422, franca)) ? creep
Exit: (8) [user] classe(franca, campione) ? creep
Y = competitivo,
Z = campione.

la variabile _ la si può unificare ogni volta con qualcosa di diverso... insomma bisogna provarle tutte...

Meno male che mi sono ritirato :D


Posted by pragers on 16-06-2009 15:11:

Originally posted by Johnny88
L'interpreta ha pienamente ragione!

ecco cosa fa con il trace :

[debug] ?- trace,classe(dario,Y),classe(franca,Z).
Call: (8) [user] classe(dario, _G313) ? creep
Call: (9) [user] batte(dario, _L230) ? creep
Exit: (9) [user] batte(dario, luigi) ? creep
Call: (9) [user] batte(_L229, dario) ? creep
Exit: (9) [user] batte(franca, dario) ? creep
Exit: (8) [user] classe(dario, competitivo) ? creep
Call: (8) [user] classe(franca, _G316) ? creep
Call: (9) [user] batte(franca, _L230) ? creep
Exit: (9) [user] batte(franca, dario) ? creep
Call: (9) [user] batte(_L229, franca) ? creep
Fail: (9) [user] batte(_L229, franca) ? creep
Redo: (8) [user] classe(franca, _G316) ? creep
Call: (9) [user] batte(franca, _L230) ? creep
Exit: (9) [user] batte(franca, dario) ? creep
^ Call: (9) [user] not(batte(_G422, franca)) ? creep
Call: (10) [user] batte(_G422, franca) ? creep
Fail: (10) [user] batte(_G422, franca) ? creep
^ Exit: (9) [user] not(batte(_G422, franca)) ? creep
Exit: (8) [user] classe(franca, campione) ? creep
Y = competitivo,
Z = campione.

la variabile _ la si può unificare ogni volta con qualcosa di diverso... insomma bisogna provarle tutte...

Meno male che mi sono ritirato :D



Bhe in realtà non bisogna provarle proprio tutte.Es: batte(dario,_) è vera non appena _ è istanziato con qualcosa che rende vera la clausola.Basta che ne trovi uno poi non devi continuare con gli altri,difatti nel tuo output quando _ è istanziato con luigi, divante batte(dario,luigi) e la clausola viene eliminata senza provare gli altri casi,quindi in realtà l'istanziazione da fare è solo una.


Posted by Johnny88 on 16-06-2009 15:47:

Si si in questo caso... invece il primo? perchè a me l'interpete mi da come output solo N=1 e non anche N=3.... sembra che fa solo un ramo...


Posted by pragers on 16-06-2009 16:35:

Originally posted by Johnny88
Si si in questo caso... invece il primo? perchè a me l'interpete mi da come output solo N=1 e non anche N=3.... sembra che fa solo un ramo...


A me da anche N=3.Attento che prolog ti da una soluzione,se vuoi sapere anche le successive devi premere ";" quando ti da la prima soluzione,se schiacci invio altrimenti fa vedere solo la prima.


All times are GMT. The time now is 17:24.
Show all 10 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.