Prolog谓词将两个列表相乘(代表一元数)

时间:2020-08-31 20:30:50

标签: list prolog successor-arithmetics

我想编写一个将表示数字的列表相乘的代码,例如:
α-次([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]]。

这个想法就存在了,但是我只是不知道如何解决这个问题,我知道为什么会发生这种情况(我正在添加一个列表作为标题),所以我只是想知道是否有人可以帮助我。
预先感谢。

1 个答案:

答案 0 :(得分:2)

[Lis|H]将使用Lis作为第一个元素,而不管Lis是否为列表。例如,您应该看看append/3 [swi-doc]来添加两个列表:

times([], _, []).
times([_|T], Lis, R) :-
    append(Lis, H, R),
    times(T, Lis, H).
相关问题