我是prolog的新手,当用户输入数字列表时,它只会将合成数加起来。
复合数:4,6,8 ... etc
。到目前为止,我在prolog
中完成了列表的总和。但是真的有问题我怎么能在prolog中找到复合数?
可以通过此找到总和
list_sum( [] , 0 ) .
list_sum( [Head|Tail] , TotalSum ) :-
list_sum(Tail,Sum1) ,
Total = Head+Sum1 .
答案 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) .
那里有很多关于如何确定素数的地方。你应该能够搞清楚。