1

我正在使用 SWI-Prolog 在 Prolog 中进行练习,以获取嵌套列表并将其转换为元素列表,然后对元素求和,我制作了两个单独的谓词,这两个谓词使我具有两种功能:

my_flatten(X,[X])->通过将每个列表替换为其元素(递归),将列表(可能将列表作为元素保存)转换为“平面”列表。

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-> 将列表的所有元素相加并返回它们的总和

addList([],0).
addList([X|Xs],N):-
   addList(Xs,N0),N is X+N0.

问题本身是我是 Prolog 中的新编程,我不知道如何将两个谓词连接到同一个谓词中,以便谓词 addList 使用 my_flattern 返回的列表。也许这是一个有点愚蠢的问题,但我已经坚持了好几天了。我需要一些帮助来澄清这个问题的其他问题

4

1 回答 1

2

要构造一个同时执行两者的新谓词,只需使用共享变量同时调用my_flattenand addList

addListFlattened(L, Sum) :-
    my_flatten(L, L2),
    addList(L2, Sum).

addListFlattened是一个新的谓词(您可以更改名称),它重用addList.

于 2012-11-27T05:06:07.167 回答