Qu'est-ce que vous essayez de faire et pourquoi voulez-vous juste une clause pour le prédicat?
personnellement je crois qu'avoir la possibilité d'écrire de nombreuses clauses est l'une des grandes choses de prolog et le code est plus élégant et lisible de cette façon
Quoi qu'il en soit, vous voudrez probablement utiliser ou. en supposant que vous avez les clauses suivantes: (! bye bye ltrage il)
foo(Arg11,Arg12,Arg13):-
(Body1).
foo(Arg21,Arg22,Arg23):-
(Body2).
foo(Arg31,Arg32,Arg33):-
(Body3).
vous devez d'abord vous assurer que chaque article a les mêmes arguments:
foo(Arg1,Arg2,Arg3):-
(Body1b).
foo(Arg1,Arg2,Arg3):-
(Body2b).
foo(Arg1,Arg2,Arg3):-
(Body3b).
et vous utiliserez ou (;):
foo(Arg1,Arg2,Arg3):-
(Body1b)
; (Body2b)
; (Body3b).
par exemple,
reverse([X|Y],Z,W):-
reverse(Y,[X|Z],W).
reverse([],X,X).
deviendront:
reverse(X,Y,Z):-
X = [H|T],
reverse(T,[H|Y],X).
reverse(X,Y,Z):-
X = [],
Z = Y.
puis:
reverse(X,Y,Z):-
(X = [H|T],
reverse(T,[H|Y],X))
; (X = [],
Z = Y). *%ew ew ugly!*
en ce qui concerne l'exemple sur votre premier poste, il y a deux prédicats différents, chacun ayant un seul article. le deuxième prédicat a 2 arguments alors que le premier a 1 donc ils sont différents. La seule façon de les "fusionner" serait d'appeler simplement le second has_equal_sums (List, _) à la place du premier.
Pour être honnête, je ne vois pas l'intérêt de le faire; Je doute que vous n'obtiendrez pas d'accélération significative et le code devient beaucoup plus désordonné.
Bien sûr, c'est votre code et il peut y avoir des restrictions que nous ne connaissons pas (c'est pourquoi j'ai demandé ce que vous voulez accomplir)
Que voulez-vous dire? Je ne vois qu'une seule "fonction" dans la réponse que vous avez liée. Bien qu'il existe deux versions de celui-ci. BTW, quand vous dites "fonction", je suppose que vous voulez dire "prédicat". – svick
Ouais, je suis désolé, je veux dire prédicat et que je veux être en mesure de comprendre comment l'appeler seulement le prédicat. – Abriel
Je ne comprends toujours pas ce que vous voulez dire. Pourriez-vous élaborer? Peut-être fournir un exemple? – svick