我想编写一个将表示数字的列表相乘的代码,例如:
α-次([1,1,1],[1,1],Res)。
Res = [1,1,1,1,1,1]。
times([], _, []). % base case
times([_|T], Lis, [Lis|H]) :-
times(T, Lis, H).
我已经有了上面的代码,它可以满足我的要求,但实际上不是。例如,当询问:
?-times([1,1,1],[1,1],Res)
Res = [[1,1],[1,1],[1,1]]。
这个想法就存在了,但是我只是不知道如何解决这个问题,我知道为什么会发生这种情况(我正在添加一个列表作为标题),所以我只是想知道是否有人可以帮助我。
预先感谢。
答案 0 :(得分:2)
[Lis|H]
将使用Lis
作为第一个元素,而不管Lis
是否为列表。例如,您应该看看append/3
[swi-doc]来添加两个列表:
times([], _, []).
times([_|T], Lis, R) :-
append(Lis, H, R),
times(T, Lis, H).