Donc, je suis relativement nouveau à Prolog, et bien que ce problème soit facile dans de nombreuses autres langues, j'ai beaucoup de problèmes avec cela. Je veux générer une liste de facteurs pour un certain nombre N. Je l'ai déjà construit un prédicat qui me dit si un nombre est un facteur:Facteurs d'un nombre
% A divides B
% A is a factor of B
divides(A,B) :- A =\= 0, (B mod A) =:= 0.
% special case where 1 // 2 would be 0
factors(1,[1]) :- !.
% general case
factors(N,L):- N > 0, factor_list(1, N, L).
factor_list(S,E,L) :- S =< E // 2, f_list(S,E,L).
f_list(S,E,[]) :- S > E // 2, !.
f_list(S,E,[S|T]) :- divides(S,E), !, S1 is S+1, f_list(S1, E, T).
f_list(S,E,L) :- S1 is S+1, f_list(S1,E,L).
Toute aide serait appréciée.
EDIT
je assez bien changé ma solution complète, mais pour certains prédicats raison comme factors(9, [1])
retour vrai, quand je veux seulement revenir factors(9, [1,3])
vrai. Des pensées?
Si vous incluez 1 dans facteurs de 9, pourquoi ne pas aussi 9? Voulez-vous dire seulement les facteurs premiers, ou tous les diviseurs d'un nombre? 6 est un diviseur de 72, mais pas un premier, n'est-ce pas? –
@WillNess 9 est implicitement inclus. Dans ce but, nous examinons seulement [1, N/2] –
@WillNess Je veux que la liste entière des facteurs soit le seul prédicat qui retourne vrai. donc 'les facteurs (72, [6])' devraient être faux, et 'les facteurs (72, [1,2,3,4,6,8,9,12,18,24,36])' seraient vrais. Des pensées? –