我正在使用SWI-Prolog在Prolog中进行练习,采用嵌套列表并将其转换为元素列表然后制作元素的总和,我制作了两个单独的谓词,这些都使我成为两个功能:< / p>
my_flatten(X,[X]) - &gt;通过将每个列表替换为其元素(递归),将列表转换为可能将列表作为元素保存到“平面”列表中。
my_flatten(X,[X]) :- \+ is_list(X).
my_flatten([],[]).
my_flatten([X|Xs],Zs) :-
my_flatten(X,Y), my_flatten(Xs,Ys), append(Y,Ys,Zs).
addList-&GT;添加列表的所有元素并返回其总和
addList([],0).
addList([X|Xs],N):-
addList(Xs,N0),N is X+N0.
问题本身就是我是Prolog中的新编程,我不知道如何在同一个谓词中连接两个谓词,因此my_flattern返回的列表将被谓词addList使用。也许这是一个有点愚蠢的问题,但我已经坚持了几天。我需要一些帮助来澄清这个问题以解决其他问题
答案 0 :(得分:2)
要构建一个同时执行这两项操作的新谓词,只需使用共享变量调用my_flatten
和addList
:
addListFlattened(L, Sum) :-
my_flatten(L, L2),
addList(L2, Sum).
addListFlattened
是一个新谓词(您可以更改名称),它会重复使用addList
。