我试图弄清楚如何在prolog中创建一个谓词,它只对给定列表中偶数的平方进行求和.
预期产量:
?- sumsq_even([1,3,5,2,-4,6,8,-7], Sum).
Sum = 120 ;
false.
Run Code Online (Sandbox Code Playgroud)
我知道怎么做是从列表中删除所有奇数:
sumsq_even([], []).
sumsq_even([Head | Tail], Sum) :-
not(0 is Head mod 2),
!,
sumsq_even(Tail, Sum).
sumsq_even([Head | Tail], [Head | Sum]) :-
sumsq_even(Tail, Sum).
Run Code Online (Sandbox Code Playgroud)
这给了我:
Sum = [2, -4, 6, 8]
Run Code Online (Sandbox Code Playgroud)
而且我也知道如何将列表中所有数字的平方加起来:
sumsq_even([], 0)
sumsq_even([Head | Tail], Sum) :-
sumsq_even(Tail, Tail_Sum),
Sum is Head * Head + Tail_Sum.
Run Code Online (Sandbox Code Playgroud)
但我似乎无法弄清楚如何将这两者连接在一起.我想我可能走错了路,但我不确定如何定义正确的关系以使其有意义.
谢谢!