Come hai detto, OP, questo è banale.
Prova
course(ai).
course(pl).
course(os).
have(X,Y) :- course(X), course(Y), X \== Y).
Questo dovrebbe risolvere il predicato.
Guardando un passo avanti, però, matematicamente fraseggio, si sono probabilmente cercando la soluzione a (n C 2) al contrario di (n P 2) che il vostro predicato attualmente fornisce-combinazione, invece di permutazione, scelta di selezione rispetto a disposizioni di scelte di selezione. Questo è quello che penso.
Se questo è ciò che si vuole, vorrei suggerire di provare
course(ai).
course(pl).
course(os).
have(X,Y) :- course(X), course(Y), X @< Y).
che impedirebbe duplicato invertito risultati.
@<
significa atomicamente inferiore a. <
è per interi, @<
è per gli atomi.
qual è il risultato che desideri? –
qual è il risultato che hai ottenuto sarebbe anche bello per la leggibilità delle domande btw – m09
Voglio che stampi per me le combinazioni dei nomi dei corsi, dove i due non sono uguali, voglio dire: ai-pl ai-os pl-ai pl -os os-ai os-pl –