Existe-t-il un moyen de redéfinir récursivement (ne pas connaître le terme technique) les prédicats prolog?Prolog: redéfinition de la fonction récursive
Tenir compte de ces prédicats:
f(X,Y,A):-A is Y xor X.
arity(f,2).
maintenant je veux créer automatiquement 2 nouveaux prédicats f1/2 et f2/1 avec la définition suivante:
f1(Y,A):-f(1,Y,A).
f2(A):-f1(1,A).
Ainsi, le prédicat devrait obtenir un (binaire) fonctionnent en entrée et créent de nouveaux prédicats en remplissant les paramètres de la fonction (# définis par l'arité) de gauche à droite avec 1.
Est-ce possible? J'ai essayé différentes combinaisons de l'opérateur univ et appel() mais rien n'a réussi.
Est-ce que quelqu'un sait comment faire cela? Toute aide serait vraiment appréciée.
Edit: Un exemple pour un arité supérieur:
f(W,X,Y,Z,A):-A is Y xor X xor W xor Z.
arity(f,4).
->
f1(X,Y,Z,A):-f(1,X,Y,Z,A).
f2(Y,Z,A):-f1(1,Y,Z,A).
f3(Z,A):-f2(1,Z,A).
f4(A):-f3(1,A).
Depuis que je suis seulement interressés la valeur de retour de f (A) avec tous les paramètres mettre à 1 il pourrait y avoir un moyen plus facile de le faire ... En tout cas, merci pour votre aide!
Je suis un peu confus par ce que vous recherchez. Pouvez-vous donner un exemple d'une plus grande arité? En outre, voulez-vous que les nouveaux prédicats soient ajoutés à la base de données prolog pour une utilisation immédiate, ou voulez-vous simplement les écrire dans un fichier texte? – nedned