Prolog,需要从列表和总和中找出复合数

时间:2014-05-05 04:39:33

标签: prolog

我是prolog的新手,当用户输入数字列表时,它只会将合成数加起来。 复合数:4,6,8 ... etc。到目前为止,我在prolog中完成了列表的总和。但是真的有问题我怎么能在prolog中找到复合数?

可以通过此找到总和

list_sum( []          , 0        ) .
list_sum( [Head|Tail] , TotalSum ) :-
  list_sum(Tail,Sum1) ,
  Total = Head+Sum1 .

1 个答案:

答案 0 :(得分:1)

如果参数是复合数,则需要添加成功的谓词is_composite/1。我就是这样做的:

sum_of_composite_numbers( Ns , S ) :-
  sum_of_composite_numbers( Ns , 0 , S )
  .

sum_of_composite_numbers( [] , R , R ) .
sum_of_composite_numbers( [N|Ns] , T , R ) :-
  ( is_composite(N) -> T1 = T+N ; T1 = T ) ,
  sum_of_composite_numbers( Ns , T1 , R )
  .

复合数字是:

  

一个正整数,除了一个或数字之外,至少有一个正除数   本身。换句话说,复合数是任何大于1的正整数   不是素数[Wikipedia]。

当然,素数就是它的反面,

  

大于1的自然数,除1和自身之外没有正除数。   大于1的自然数不是素数,称为复合数。   [维基百科]

因此,定义复合数的一种方法是检查素数,例如:

is_composite(N) :- N > 1 , \+ is_prime(N) .

那里有很多关于如何确定素数的地方。你应该能够搞清楚。