一个谓词,它将返回列表中偶数的总和:
sumsq_even([], 0).
sumsq_even([FirstNum|RestOfNums], Total) :-
sumsq_even(RestOfNums, TotalRest),
Total is FirstNum + TotalRest :- 0 is FirstNum mod 2, % Add Firstnum if it is even
Total is TotalRest :- 1 is FirstNum mod 2. % Dont add if firstnum is odd
首先我的代码编译,但我得到一个语法错误:第4行的运算符优先级冲突。此外,当我尝试查询时:
sumsq_even([1,3,5,2,-4,6,8,-7], Total).
它返回False而不是Total的值。我究竟做错了什么?
在您的代码中使用:-
(第4行和第5行)是不正确的。在Prolog中,if A then B else C
被写为( A -> B ; C)
。所以你的代码应该是:
sum_even([],S,S).
sum_even([H|T],ST,S):-
( 0 =:= H mod 2 ->
SO is ST+H;
SO = ST
),
sum_even(T,SO,S).
sumsq_even(L,Total):-
sum_even(L,0,Total).
?- sumsq_even([1,3,5,2,-4,6,8,-7], Total).
Total = 12.