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

Il predicato per il massimo lavora come tutti i predicati sulle liste...
Conoscendo il massimo di una lista...
Aggiungendo a questa un elemento (la testa), il nuovo massimo sarà aggiornato, solo se la testa è maggiore del "vecchio massimo"...

Il problema è che non capisco perché non basti questa condizione... :?

Anche io l'avevo scritto come te, poi mi sono reso conte che così specifichi quando la testa è il massimo della coda, ma se nelle chiamate ricorsive capita di trovare un elemento <= alla testa non viene considerato come soluzione.
Questa è la mia proposta, una con le condizioini esplicite, l'altra col una cut:
[code type="markup"]maxlist([X],X).
maxlist([X|Xs],X) :- maxlist(Xs,M), X>M.
maxlist([X|Xs],M) :- maxlist(Xs,M), X=<M.[/code]
[code type="markup"]
maxlist([X],X).
maxlist([X|Xs],X) :- maxlist(Xs,M), X>M, !.
maxlist([_|Xs],M) :- maxlist(Xs,M).[/code][/code]
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Come quel maledetto Pete che non si sa che cos'è e quella Duffy che non è una papera ma un uomo...

Attento: l'ultima riga di quella ontologia dice:

<Duck rdf:IF="Duffy> quindi duffy è SICURAMENTE una papera. In questa ontologia c'è invece la stranezza che Duck è sottoclasse di Person, quindi un Duck è ANCHE una Person.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
secondo me confondi il fatto che commesso reato è una relazione si che sta dentro senza patente ma non è detto che si trovi soli li,quindi non puoi stabilire che tutte le istanze che abbiano commessoreato facciano parte di senzapatente.potrebbero far parte come no.non c'è un legame diretto come diceva acela
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Il bello è che anche secondo me tutta l'ontologia è fatta apposta per farti cascare nel tranello...
Ma non riesco a non cascarci...

Come quel maledetto Pete che non si sa che cos'è e quella Duffy che non è una papera ma un uomo...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Partiamo dal fatto che non mi convince la prima dichiarazione...
Diciamo che appartiene alla classe "senzapatente" qualsiasi istanza che abbia una relazione di tipo "commessoreato".
Partiamo poi dalla fine.
E' inizializzata l'istanza "guidainstatodiebrezza" della classe "reatoautomobilistico", e viene asserito che una istanza della classe "persona" ha una relazione di tipo "commessoreato" con l'istanza "guidainstatodiebrezza".
Poi sappiamo che "reatoautomobilistico" è sottoclasse di "reato".
Dunque la "perona" di prima ha una relazione di tipo "commessoreato" con un'istanza di tipo "reato" ("reatoautomobilistico" è sottoclasse di reato).
Secondo la prima dichiarazione dunque, la persona in questione è "senzapatente".
Il tutto insomma si focalizza sul fatto che se un'istanza ha una relazione di tipo "commessoreato" con un'istanza della classe "reatoautomobilistico" si può secondo me inferire che abbia una relazione con un'istanza della classe reato.
Voi che ne dite belli miei???

PS: ditemi voi se dopo una partita di calcetto uno si può piazzare al volo sul PC per vedere se qualcuno aveva risposto...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation

ok fin qui siamo d'accordo, ma invece cosa mi sai dire sulle istanze inferibili di senza patente?

Dico che non ce ne sono! L'ontologia mi pare (volutamente) fatta male, sappiamo che "senza patente" è un sottoinsieme di commessoreato, ma non c'è scritto da nessuna parte che "senza patente" è legato al "reatoautomobilistico"
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
esempio di marco79:

possiedemacchina è InversaFunzionale ==> dominio diventa identificatore ===> quindi se ho il nome di una Persona so esattamente quale macchina ha (in questo esempio quindi una Persona non può avere più di due macchine ==> le due macchine sono la stessa cosa ===> Pino e Mario SONO le stesse persone.


ok fin qui siamo d'accordo, ma invece cosa mi sai dire sulle istanze inferibili di senza patente?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Effettivamente non è troppo diversa da quella che avevo in mente...

La riga
maxlist([H|[J|T]],MAX)
funziona, mentre la mia
maxlist([H,J|T]],MAX)
evidentemente no...

Grazie comunque...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
se ti può essere di aiuto ti posto la mia procedura:

maxlist([],N).
maxlist([H|[]],H).
maxlist([H|[J|T]],MAX) :- H < J , maxlist([J|T],MAX).
maxlist([H|[J|T]],MAX) :- H >= J, maxlist([H|T],MAX).
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Quindi, richiamando la procedura, è come se stabilissi due massimi.
Continua finchè il primo max è maggiore del secondo.
In caso contrario, passa ad esaminare l'altro max.
E' così?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Adesso provo un'altra versione di max_of_a_list...

max_of_a_list(List,X):-
sort(List,SortedList),
last_elem(SortedList,M),
X is M.

sort e last_elem prima ordinano la lista e poi prendono l'ultimo elemento...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Si scusate, mi sono sbagliato invertendo le variabili.
Ma che mi dite del predicato max???


Il predicato per il massimo lavora come tutti i predicati sulle liste...
Conoscendo il massimo di una lista...
Aggiungendo a questa un elemento (la testa), il nuovo massimo sarà aggiornato, solo se la testa è maggiore del "vecchio massimo"...

Il problema è che non capisco perché non basti questa condizione... :?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Si scusate, mi sono sbagliato invertendo le variabili.
Ma che mi dite del predicato max???
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
THIS IS CONFUSION!!! :D

La "lenght" come l'hai scritta, ragno nero docet, non funziona, nemmeno nella versione "corretta"... ;)

[size=2]Almeno io ho visto questo, con i miei occhi...[/size]
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
esempio di marco79:

possiedemacchina è InversaFunzionale ==> dominio diventa identificatore ===> quindi se ho il nome di una Persona so esattamente quale macchina ha (in questo esempio quindi una Persona non può avere più di due macchine ==> le due macchine sono la stessa cosa ===> Pino e Mario SONO le stesse persone.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Ok, ok, ho detto una baggianata.
Lenght funziona ugualmente.
Non capisco comunque la max_of_a_list:

max_of_a_list( [Head|Rest], Head) :-
max_of_a_list( Rest, Max ),
Head > Max.

Che diamine di procedimento fa?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Questo discorso dell'ordine l'avevamo notato...
Io penso che dipenda dal fatto che valuti quelle condizioni in AND dalla prima all'ultima...
E NON riesca quindi ad assegnare un valore ad N, non sapendo quanto vale M, fino a che non chiude l'ultima chiamata ricorsiva...

Comunque non mi sembra giusta quella length scritta così...
M ed N mi sembrano proprio scambiati, in entrambi i casi... :?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Infatti non capisco neanche io.
A dire il vero, mi vergogno un po' a dirlo, un errore simile l'avevo fatto quando ho provato a scrivere il predicato "lenght".

Io l'ho scritto così:

lenght([],0).
lenght([Y|U],N):-
M is N + 1,
lenght([U],M).

Mentre la versione corretta è:

lenght([],0).
lenght([Y|U],N):-
lenght([U],M),
M is N + 1.

Qualcuno sa dirmi il perchè???

Lo stesso vale per max_list.
Perchè la condizione di > o < è posta DOPO aver richiamato ricorsivamente la procedura???
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
E questa come vi pare???

[code type="markup"]max_list([X],X).

max_list([H,L|Rest],H):-
H>=L,
max_list([H|Rest],H).

max_list([H,L|Rest],H):-
H<L,
max_list([L|Rest],L).[/code]


Ti dico la verità... Non ho il tempo per ragionarci su...
Ma dandolo in pasto all'SWI-Prolog NON restituisce il massimo della lista...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Non vedo dove...
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!