【发布时间】:2014-07-03 01:55:06
【问题描述】:
我是 Prolog 的新手。我读了这段代码,它找到了一个整数的素数:
factors(1,[1]) :-
true, !.
factors(X,[Factor1|T]) :-
X > 0,
between(2,X,Factor1),
NewX is X // Factor1, (X mod Factor1) =:= 0,
factors(NewX,T), !.
并改成这个:
factors(1,[[1,1]]) :-
true, !.
factors(X,[Factor1|T]) :-
X > 0,
( is_list(Factor1),
length(Factor1, 2),
Factor1 = [Base|A],
A = [Pow],
between(2,X,Base),
between(1,100,Pow),
NewX is X / (Base ** Pow),
(X mod Base) =:= 0,
(NewX mod Base) =\= 0
),
factors(NewX,T), !.
第一个效果很好,但后者不响应查询。即当我输入时:
factors(2,[[2,1],[1,1]]).
我得到'true',但是当我输入时:
factors(2,X).
我得到'假'。
【问题讨论】:
标签: prolog primes number-theory