【问题标题】:How to call a predicate that appends two lists in Prolog?如何调用在 Prolog 中附加两个列表的谓词?
【发布时间】:2021-03-23 19:09:32
【问题描述】:

我到处都看到这样的东西:append([1,2,3],[a,b,c],appended)., 但是如果我有 2 个列表:ok([1,2,3]).hello([a,b,c]).,我想将 okhello 附加在一起。

为什么append(ok,hello,appended). 不起作用?

如果列表已经定义,我将如何做到这一点而无需手动输入每个元素?

【问题讨论】:

  • 您为什么希望append(ok,hello,appended) 工作? append(X, Y, Z) 只是将 列表 XY 附加到列表 Z...
  • 好吧,我想把结果称为不同的东西,所以我希望它被称为 appended,这是好的,并且 hello 附加在一起。如何在不必键入每个元素的情况下做到这一点?

标签: list prolog append call predicate


【解决方案1】:

您首先查询列表,然后附加它们:

ok( OK), hello( Hello), append( OK, Hello, Appended).

Prolog 的逻辑变量名称​​必须以大写字母开头。

如果您只想查看作为查询结果报告的 Appended,请尝试

ok( _OK), hello( _Hello), append( _OK, _Hello, Appended).

正如Enigmativity 在 cmets 中所建议的那样,另一种不那么骇人听闻的方法是为此定义一个特殊用途的谓词,

appended( Appended) :-
  ok( OK), hello( Hello), append( OK, Hello, Appended).

【讨论】:

  • 我是否通过 member(OK, Appended). 对其进行测试,其中 OK 是 ok 的一个元素?因为当我这样做时它返回 false。
  • 你写的和我写的一模一样。单独尝试ok(OK).。它有效吗?您声称它已经定义,所以它应该可以工作。是吗?
  • 那么hello(Hello).呢?它也应该工作。那么,答案中显示的表达式也应该。如果没有,请显示您的查询和您得到的回复。
  • 它可以工作,但是当我执行上面的查询时,它会打印 OK,然后是 Hello,然后是 Appended。我希望它只是打印附加。
  • 尝试solve(Appended) :- ok(OK), hello(Hello), append(OK, Hello, Appended). 然后查询?- solve(Appended).。那应该只打印Appended
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多