fbpx
Skip to main content
  1. VanillaSky
  2. Ingegneria Informatica - Triennale
  3. Giovedì, 22 Febbraio 2007
  4.  Subscribe via email
in virtù degli orari usciti apro il 3d del corso.
Benvengano consigli da chi ha già sostenuto l'esame.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Oggi mi è sembrato più abbordabile....
a voi come è andata?

esercizio 2)
[code type="markup"]merge(L, [], L).
merge([], L, L).

merge([H1|T1],[H2|T2],[H1|T3]) :-
H1 =< H2,
merge(T1, [H2|T2], T3).

merge([H1|T1],[H2|T2],[H1|T3]) :-
H1 > H2,
merge([H1|T1], T2, T3).
[/code]

esercizio 3)

Inconsistenza c'era stavolta: duska era dichiarato cane, e inferito oggetto,
ma all'inizio oggetto e animale (quindi anche cane in quanto subClass) erano dichiarati disjoint.

esercizio4 )

1a. ESISTE team ( giocato >= 3) {giocatore attivo)
1b. ESISTE team ( incorre_in = 0) {premio fair play }

2a. credo che andava fatto così
[code type="markup"]comp(A) :-
getIdividualsBelongingToClass('Team', [], List),
forall (
member (M, List),
(
writeln(M),
M \= A
)
).


*non ricordo come si chiama la classe...che era TeamCouple...? cmq ho messo solo Team[/code]
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Oggi mi è sembrato più abbordabile....
a voi come è andata?

esercizio 2)
[code type="markup"]merge(L, [], L).
merge([], L, L).

merge([H1|T1],[H2|T2],[H1|T3]) :-
H1 =< H2,
merge(T1, [H2|T2], T3).

merge([H1|T1],[H2|T2],[H1|T3]) :-
H1 > H2,
merge([H1|T1], T2, T3).
[/code]

esercizio 3)

Inconsistenza c'era stavolta: duska era dichiarato cane, e inferito oggetto,
ma all'inizio oggetto e animale (quindi anche cane in quanto subClass) erano dichiarati disjoint.

esercizio4 )

1a. ESISTE team ( giocato >= 3) {giocatore attivo)
1b. ESISTE team ( incorre_in = 0) {premio fair play }

2a. credo che andava fatto così
[code type="markup"]comp(A) :-
getIdividualsBelongingToClass('Team', [], List),
forall (
member (M, List),
(
writeln(M),
M \= A
)
).


*non ricordo come si chiama la classe...che era TeamCouple...? cmq ho messo solo Team[/code]


Fra, non te preoccupa, che ti ha promosso! :lol:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
esercizio 3)

Inconsistenza c'era stavolta: duska era dichiarato cane, e inferito oggetto,
ma all'inizio oggetto e animale (quindi anche cane in quanto subClass) erano dichiarati disjoint.



Dov'è che inferivi che duska è un oggetto?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
esercizio 3)

Inconsistenza c'era stavolta: duska era dichiarato cane, e inferito oggetto,
ma all'inizio oggetto e animale (quindi anche cane in quanto subClass) erano dichiarati disjoint.



Dov'è che inferivi che duska è un oggetto?


io sono per quella minornza che dice che l'inconsistenza non c'era.
speriamo bene. :roll:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Anche per me Duska era inferito Oggetto perche' il proprietario era di tipo Myst, ed appunto siccome Oggetto e Animale erano disgiunti si aveva un inconsistenza.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Anche per me Duska era inferito Oggetto perche' il proprietario era di tipo Myst, ed appunto siccome Oggetto e Animale erano disgiunti si aveva un inconsistenza.


boh sinceramente questa cosa non la capisco...per me non c erano
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Anche per me Duska era inferito Oggetto perche' il proprietario era di tipo Myst, ed appunto siccome Oggetto e Animale erano disgiunti si aveva un inconsistenza.


io ho ragionato cosi':
siccome Myst se possedeva qualcosa, quella era un ogetto, e ha_animale è sottoproprieta' di possiede, poteva esserci l'inconsistenza.
pero' poi ho pensato pure che possiede non ha dominio ne range specificato, e questo mi ha messo in crisi, alla fine ho deciso che l'inconsistenza non c'e', ma non sono sicuro. Diciamo che OWL è un po' un terno al lotto.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Stellato dice che c'erano ed il motivo secondo me è questo:
duska è una cane (diverso da oggetto). ha_padrone è inversa di ha_animale (sottoproprietà di possiede, riferito solo ad oggetti), che è inversa funzionale, quind in definitiva si ha una "biezione" (ah, pettored) 1-1. Poi si sa che i Myst possono possedere solo oggetti e mario è un Myst. Dunque una inconsistenza evidente sarebbe stata: mario ha_animale duska. Noi invece avevamo duska ha_padrone mario, ma poiché ha_padrone è l'inversa di una inversa funzionale, vuol dire che è funzionale, quindi la corrispondenza 1-1 ci porta a dire che avere duska ha_padrone mario oppure mario ha_animale duska è indifferente, perché entrambe producono una inconsistenza.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation

Fra, non te preoccupa, che ti ha promosso! :lol:

E chi sei Stellato in incognito!? :shock:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Oggi mi è sembrato più abbordabile....
a voi come è andata?

Anche a me, sicuramente meglio dell'altra volta! ;)
(anche perche' peggio non poteva andare!! :D
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Comment
There are no comments made yet.
Accepted Answer Pending Moderation

Fra, non te preoccupa, che ti ha promosso! :lol:

E chi sei Stellato in incognito!? :shock:


Non sono Stellato, ma avevo ragione :D
Comment
There are no comments made yet.
Accepted Answer Pending Moderation

Fra, non te preoccupa, che ti ha promosso! :lol:

E chi sei Stellato in incognito!? :shock:


Non sono Stellato, ma avevo ragione :D

...sei la Pazienza! :D :D
Comment
There are no comments made yet.
Accepted Answer Pending Moderation

Non sono Stellato, ma avevo ragione :D


Chiunque tu sia...(ma tanto lo so) ti odio!

...tu e il tuo 30&L :)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
bah..passato..male, ma passato...bene così..grazie a tutti ;)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Ciao! Mi sto preparando per l'esame di SBC del 4...ho un problema con Prolog...

Nel test di autovalutazione alla domanda 5, si deve scrivere il predicato di :permutation(A,B).

Guardando la soluzione, il prof usa la member/3 e poi dice che fa il delete dell'elemento trovato...

Come fa?!?!? Non trovo corrispondenze di member a 3 argomenti, ma può essere che l'ha modificato il prog...se così è dove si vede che cancella l'elemento trovato??

Metto il codice


permutazione([],[]).

permutazione(A,[C|B]):-

member(C,A,AK),permutazione(AK,B).


member(C,[C|A],A).

member(K,[J|A],[J|R]) :-

member(K,A,R).


Grazie a chiunque sappia rispondere!! :lol:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Innanzitutto, se non ho capito male... lavori con i primi due parametri, l'altro è in output.

Da qui:
[code type="markup"]member(C,[C|A],A).
^ ^
[/code]
Tu stai cercando C. Se, nella lista centrale, scorrendola (e lo fai usando la notazione [H|T], dove H è la testa della lista e T la coda, anch'essa una lista), trovi un elemento uguale (dichiari la testa C per far capire a Prolog proprio questo), dici a Prolog non fare nulla con C e di copiare la coda A nella lista di output.
Poi continua:
[code type="markup"]member(K,[J|A],[J|R]) :-
^ ^
member(K,A,R).[/code]
Se invece è diverso (K != J), allora copia J nell'altra lista e ripeti anche per gli elementi mancanti, passando la coda A e la coda R (al quale, però, è già stato aggiunto J), cercando di eliminare sempre lo stesso elemento (quindi K).


Sarebbe stata anche la stessa cosa scrivendolo così, senza mettere quel K che crea confusione:
[code type="markup"]member(C, [C|A], A).
member(C, [J|A], [J|R]) :- member(C, A, R).[/code]

Oddio, non so se è proprio chiaro :?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Grazie della spiegazione! Sei stato molto dettagliato...ora inizia ad avere un senso :lol:

Il problema principale è che non riesco a capire la logica di prolog e ragiono come se fosse un linguaggio di programmazione "normale" :cry:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Allora vediamo se ho capito...


permutazione(A,[C|B]):-

member(C,A,AK),permutazione(AK,B).


Con questo gli do in input le liste da controllare.
Parte la member(C,A,AK) e va in :


member(C,[C|A],A).

member(C,[J|A],[J|R]) :-
member(C,A,R).


Se la testa è = copia la coda e passa all'elemento successivo altrimenti copia tutto e parte di nuovo la ricorsione.

Giusto?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Allora vediamo se ho capito...


permutazione(A,[C|B]):-

member(C,A,AK),permutazione(AK,B).


Con questo gli do in input le liste da controllare.
Parte la member(C,A,AK) e va in :


member(C,[C|A],A).

member(C,[J|A],[J|R]) :-
member(C,A,R).


Se la testa è = copia la coda e passa all'elemento successivo altrimenti copia tutto e parte di nuovo la ricorsione.

Giusto?


Se la testa è uguale all'elemento cercato, appunto, copia la coda della lista centrale nella lista di output [condizione di uscita]...e il "controllo" torna a permutazione/2
Se invece l'elemento di testa della lista centrale, è diverso da quello cercato...lo copia nella lista di output, continua a controllare che non ci siano elementi uguali, con la ricorsione... se ne trova uno, come sopra, altrimenti quando conclude lo scorrimento della lista centrale (senza aver trovato elementi uguali) il "controllo" ritorna a permutazione/2

Eh, il Prolog è un po' strano, rispetto ai soliti linguaggi che siamo abituati ad usare...
Fa conto che la regola di "uscita" di una chiamata ricorsiva va dichiarata per prima, come puoi vedere dall'esempio precedente...
Comment
There are no comments made yet.


There are no replies made for this post yet.
Be one of the first to reply to this post!