2011-10-01 7 views
4

J'ai un opérateur stocké dans une variable Op et deux entiers sont stockés dans X et Y. Maintenant, je veux faire quelque chose comme (Z est X Op Y), mais cette syntaxe ne semble pas être correct.Prolog - Variable comme opérateur

Est-ce que quelqu'un sait s'il existe un moyen de le faire dans Prolog?

Merci pour vos réponses

Répondre

8

vous pouvez n le faire en construisant le prédicat en utilisant l'opérateur = ..

l'essayer comme:

compute(X,Y,Op,Z) :- 
    Eq=..[Op, X, Y], 
    Z is Eq. 

Un opérateur est vraiment comme tout autre foncteur.

+0

http://www.swi-prolog.org/pldoc/doc_for?object=%28%3D..%29/2 – DaveEdelstein

0

Vous pouvez mimer l'effet:

operator(Z,X,plus,Y):-Z is X + Y. 
operator(Z,X,times,Y):-Z is X * Y. 

J'ai essayé sur ideone.com pour SWI-Prolog avec:

OP=times, operator(Z,3,OP,8). 

Et je suis arrivé:

OP = times, 
Z = 24.