所以我对 Prolog 比较陌生,虽然这个问题在许多其他语言中很容易,但我遇到了很多麻烦。我想为数字 N 生成一个因子列表。我已经建立了一个谓词,告诉我一个数字是否是一个因子:
% 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).
任何帮助,将不胜感激。
编辑
我几乎改变了我的整个解决方案,但由于某种原因factors(9, [1])
,当我只想返回 true 时,谓词如 return factors(9, [1,3])
true。有什么想法吗?