【问题标题】:Prolog predicate to multiply two lists (representing unary numbers)Prolog 谓词将两个列表相乘(表示一元数)
【发布时间】:2020-08-31 20:30:50
【问题描述】:

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

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

【问题讨论】:

  • [Lis|H] 将使用Lis 作为第一个元素,无论Lis 是否为列表。例如,您应该查看append/3 以附加两个列表。
  • 这些是不同形式的皮亚诺数。您可以使用 append & friends 还是应该使用 Peano Number 公理?

标签: list prolog successor-arithmetics


【解决方案1】:

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

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

【讨论】:

  • 这正是我所需要的!当你看到它时它总是有意义的,但你自己想出来......谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
相关资源
最近更新 更多