首页 > 解决方案 > Prolog 谓词将两个列表相乘(表示一元数)

问题描述

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

这个想法就在那里,但我只是不知道如何解决这个问题,我理解它为什么会发生(我正在添加一个列表作为头部),所以我只是想知道是否有人可以帮助我。
提前致谢。

标签: listprologsuccessor-arithmetics

解决方案


[Lis|H]Lis用作第一个元素,无论是否Lis是列表。例如,您应该查看append/3[swi-doc]以附加两个列表:

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

推荐阅读