28 votes

Opérateur "ou" en Prologue, interrogation

Je travaille sur un prologue pour lequel je suis novice.

Je cherche un opérateur "ou".

registered(X, Y), Y=ct101, Y=ct102, Y=ct103.

Voici ma requête. Ce que je veux écrire est un code qui va :

"retourner X, étant donné que Y est égal à la valeur Z OU à la valeur Q OU à la valeur P".

Je lui demande de retourner X si Y est égal à tous les 3. Quel est l'opérateur ou ici ? Y en a-t-il un ?

38voto

Robert Oschler Points 4098

Juste un autre point de vue. L'exécution d'un "ou" en Prologue peut également se faire avec l'opérateur "disjonctif" ou le point-virgule :

registered(X, Y) :-
    X = ct101; X = ct102; X = ct103.

Pour une explication plus complète :

Contrôle des prédicats en Prologue

20voto

CapelliC Points 30055

Vous pouvez "invoquer" des liaisons alternatives sur Y de cette façon :

...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103).

Notez que les parenthèses sont nécessaires pour conserver le flux de contrôle d'exécution correct. Le site ; /2 c'est le général or opérateur. Pour votre usage restreint, vous pourriez aussi bien choisir l'opérateur plus idiomatique

...registered(X, Y), member(Y, [ct101,ct102,ct103]).

qui, en revenant sur ses pas, lie Y à chaque membre de la liste.

modifier J'ai compris avec retard votre dernière exigence. Si vous voulez que la correspondance Y todos 3 valeurs le ou n'est pas approprié, utilisez à la place

...registered(X, ct101), registered(X, ct102), registered(X, ct103).

ou le plus compact

...findall(Y, registered(X, Y), L), sort(L, [ct101,ct102,ct103]).

findall/3 construit la liste dans l'ordre même où registered/2 réussit. Ensuite, j'utilise le tri pour assurer la correspondance.

...setof(Y, registered(X, Y), [ct101,ct102,ct103]).

setof/3 trie également la liste des résultats

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X