J'ai un prédicat prenant un seul argument. Quand il y a une solution, cet argument unique doit être égal à un autre argument que j'ai (j'ai un prédicat qui va d'un argument à trois).Prolog: solutions de sortie de programme simples
Je peux imprimer la solution facilement pour voir que l'algorithme fonctionne. Cependant, je viens d'obtenir false
/no
lorsque le programme s'exécute. Je pense que c'est quelque chose à voir avec moi donnant au programme une variable et lui demandant de retourner la même variable mais modifiée par l'exécution du programme. Je n'ai jamais eu cette situation auparavant.
Des idées les gars?
Si quelqu'un comme des suggestions sur le code dans son ensemble, alors je serais heureux de recevoir des commentaires à ce sujet aussi.
Merci beaucoup et bonne année :).
% Eulers totient function
phi(M) :-
phi(0, 0, M).
phi(Count, Inter, M) :-
Count = M,
print(Inter),
M is Inter.
phi(Count, Inter, M) :-
Count \= M,
coprime(Count, M),
InterNew is Inter + 1,
CountNew is Count + 1,
phi(CountNew, InterNew, M).
phi(Count, Inter, M) :-
Count \= M,
\+ coprime(Count, M),
CountNew is Count + 1,
phi(CountNew, Inter, M).
MISE À JOUR: Ce problème est l'un des problèmes Prolog '99 à: http://sites.google.com/site/prologsite/prolog-problems/2 et il est question 2.09.
MISE À JOUR: coprime/2-jacente a été demandé:
% coprime is defined as two integers having a gcd of 1
coprime(X, Y) :-
gcd(X, Y, 1).
qui utilise prédicat GCD:
% calculating the greatest common divisor of two numbers
% recursive version of Euclidian algorithm
gcd(G, 0, G).
gcd(Lo, Hi, G) :-
Hi \= 0,
Inter is Lo mod Hi,
gcd(Hi, Inter, G).
Pourriez-vous publier le prédicat coprime? –
Quelle requête posez-vous? – ShiDoiSi
Que doit faire 'phi/1'? La fonction de totaliseur d'Euler ne peut pas être implémentée comme un prédicat à un seul argument ... –