Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi G - M > Logica matematica
 
Esame Di Oggi
Clicca QUI per vedere il messaggio nel forum
Torre
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...

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

Torre
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...

pragers
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.

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!?!

pragers
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.

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

pragers
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.

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...

pragers
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.

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate