PDA

Visualizza la versione completa : [PROLOG] Ottenere la "distanza" delle preferenze fra due utenti


ska85p
29-06-2007, 17:13
Ciao a tutti!
Ho un problema con un programmino prolog...(prime esperienze)...
Ho dichiarati come fatti:

boughtSongs(mario,[bella,ciaoMamma]).
boughtSongs(anna,[ciaoMamma,happy]).
boughtSongs(marco,[happy,ciaoMamma]).

In pratica l'utente mario ha acquistato 2 canzoni (bella e ciaoMamma)..stesso vale per gli altri utenti...
Data la funzione:

distance(X,N) dove X è il nome dell'utente, devo trovare l'utente che ha meno acquisti differenti da X e restituire questo numero in N, come se fosse una distanza delle preferenze dei due utenti.

per farmi capire:
distance(marco,N) restituirà 0 in quanto anna ha acquistato le sue stesse canzoni;
distance(mario,N) resituirà 1 in quanto l'utente con meno canzoni diverse dalle sue ne ha 1 diversa.

se un utente non ha acquistato alcuna canzone sarà restituito 0.
distance(X,0) :- boughtSongs(X,[]).

Spero qualcuno ne capisca più di me..:)..nn ci vuole poi molto..
Grazie anticipatamente.

LeleFT
29-06-2007, 17:18
Hai del codice da postare di quello che hai svolto?
Dove è che riscontri problemi?

Ciao. :ciauz:

ska85p
29-06-2007, 17:22
Guarda per ora ho fatto la dichiarazione dei fatti e avevo abbozzato una funzione ma nn mi porta a nulla..
ho provato così..ma so che è sbagliato..se hai qualche idea te ne sarei grato...

/************************************************** ******/
lunghezza([],0).
lunghezza([_|Coda],N):- lunghezza(Coda,Ncoda), N is Ncoda + 1.

intersection([],S2,[]).
intersection([H|T],S2,[H|T3]):- member(H,S2), intersection(T,S2,T3).
intersection([H|T],S2,S3):- intersection(T,S2,S3).

distance(X,0) :- boughtSongs(X,[]).

distance(X,N) :- boughtSongs(X,L), lunghezza(L,N1), boughtSongs(Y,L1), not(X=Y), intersection(L,L1,L2), lunghezza(L2,N2), N is (N1-N2).
/************************************************** ******/

lunghezza ed intersection funzionano le ho provate...distance invece fa un po quello che vuole lei..:)!
Grazie dell'aiuto cmq..

ska85p
03-07-2007, 10:20
Forse ho trovato il modo di implementare questa funzione..solo vorrei sapere come si fa per inserire i valori restituiti da prolog (quelli che si scorrono con il ";" per capirci) all'interno di una lista!
Qualcuno lo sa?

Loading