小编Rob*_*ung的帖子

在Prolog中创建谓词,该谓词仅对列表中偶数的平方进行求和

我试图弄清楚如何在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)

但我似乎无法弄清楚如何将这两者连接在一起.我想我可能走错了路,但我不确定如何定义正确的关系以使其有意义.

谢谢!

prolog clpfd

5
推荐指数
1
解决办法
857
查看次数

标签 统计

clpfd ×1

prolog ×1