将两个列表相乘的 Prolog 谓词(表示一元数)
Prolog predicate to multiply two lists (representing unary numbers)
我想编写一个代码,将表示数字的列表相乘,例如:
?- 次 ([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).
我已经有了上面的代码,它有点像我想要的,但不是真的。例如在询问时:
?- 次 ([1,1,1], [1,1], Res)
Res = [[1,1],[1,1],[1,1]]。
想法是有的,但我只是不知道如何解决这个问题,我明白为什么会这样(我添加了一个列表作为标题),所以我只是想知道是否有人可以帮助我。
提前致谢。
[Lis|H]
将使用 Lis
作为第一个元素,无论 Lis
是否为列表。你应该看看 append/3
[swi-doc] 例如附加两个列表:
times([], _, []).
times([_|T], Lis, <b>R</b>) :-
append(<b>Lis</b>, <b>H</b>, <b>R</b>),
times(T, Lis, <b>H</b>).
我想编写一个代码,将表示数字的列表相乘,例如:
?- 次 ([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).
我已经有了上面的代码,它有点像我想要的,但不是真的。例如在询问时:
?- 次 ([1,1,1], [1,1], Res)
Res = [[1,1],[1,1],[1,1]]。
想法是有的,但我只是不知道如何解决这个问题,我明白为什么会这样(我添加了一个列表作为标题),所以我只是想知道是否有人可以帮助我。
提前致谢。
[Lis|H]
将使用 Lis
作为第一个元素,无论 Lis
是否为列表。你应该看看 append/3
[swi-doc] 例如附加两个列表:
times([], _, []).
times([_|T], Lis, <b>R</b>) :-
append(<b>Lis</b>, <b>H</b>, <b>R</b>),
times(T, Lis, <b>H</b>).