列表上的Prolog计算

时间:2016-10-25 14:59:57

标签: list prolog iteration

我是prolog的新手所以忍受我,

所以我有一些代码,其中我抓住了所有素数达到一定数量。

primes_up_to(X,L):-
    findall(Y,
        (between(2,X,Y), is_prime(Y) ),
        L).

我现在想要获取该列表并检查每个素数是否可以划分为X,因此我可以对其进行因子分解。

到目前为止,这是我的代码。

factorise(X, F):-
    X > 3,
    primes_up_to(X, L),
    write(L),

如何使用L检查给定的列表元素是否可以划分为X

我认为我必须写下这样的人:

0 is ListElement mod X

但我需要为每个元素

执行此操作

1 个答案:

答案 0 :(得分:1)

你写“分解”所以我想你有兴趣知道多种因素。

我提出以下factors/3

factors(1, _, []).

factors(Num, [H|Tp], [H|Tf]) :-
  Num > 1,
  0 is mod(Num,H),
  Quot is Num // H,
  factors(Quot, [H|Tp], Tf).

factors(Num, [H|Tp], Tf) :-
  Num > 1,
  \+ 0 is mod(Num,H),
  factors(Num, Tp, Tf).

如果您对多种因素不感兴趣,则代码可以更简单

factors(_, [], []).

factors(Num, [H|Tp], [H|Tf]) :-
  0 is mod(Num,H),
  factors(Num, Tp, Tf).

factors(Num, [H|Tp], Tf) :-
  \+ 0 is mod(Num,H),
  factors(Num, Tp, Tf).