gpt4 book ai didi

prolog - 如何在序言中实现相应的功能

转载 作者:行者123 更新时间:2023-12-01 13:30:17 24 4
gpt4 key购买 nike

我是Prolog的初学者,想知道如何实现这个对应的功能。

correspond(E1, L1, E2, L2)

this holds when in one place where list L1 has the value E1, L2 has E2. This must work in any mode in which L1 and L2 are proper lists (that is, either [] or a list whose tail is a proper list). For example:

correspond(e,[h,e,l,l,o],X,[1,2,3,4,5])

should have only the solution X = 2.

这是我现在尝试过的:

 correspond(E1, L1, E2, L2).
correspond(E1,[Elt1|List1],E2,[Elt2|List2]) :-
nth0(Index, [Elt1|List1], E1).
nth0(Index, [Elt2|List2], E2).

我想使用 Index 作为获取 E1E2 值的中间值,但这些代码返回 True 或 False。

最佳答案

这是我尝试过的,它至少对你的例子有效:

correspond(e,[h,e,l,l,o],X,[1,2,3,4,5]) 有解 X = 2

代码:

correspond(E1,[E1|_T1],E2,[E2|_T2]).
correspond(E1,[_H1|T1],E2,[_H2|T2]) :-
correspond(E1,T1,E2,T2).

解释:

  • 如果 E1 是第一个列表的第一个元素,则 E2 应该是第二个列表的第一个元素。
  • 否则,我们对列表 1 和 2 的尾部进行相同的尝试,然后递归迭代。

请注意:

correspond(l,[h,e,l,l,o],X,[1,2,3,4,5]) 有两个解 X = 3X = 4

尝试 correspond(X,[h,e,l,l,o],Y,[1,2,3,4,5] 你会得到:

  • X = h, Y = 1
  • X = e, Y = 2
  • X = l, Y = 3
  • X = l, Y = 4
  • X = o, Y = 5
  • 错误

编辑:

如果您真的想要在最后一个结果之后得到true而不是false,您可能想要前置谓词:

correspond(_,[],_,[]).

导致:

correspond(_,[],_,[]).
correspond(E1,[E1|_T1],E2,[E2|_T2]).
correspond(E1,[_H1|T1],E2,[_H2|T2]) :-
correspond(E1,T1,E2,T2).

这意味着当您尝试使用空列表时(例如,当列表大小相同时的最后一次迭代),它是 true

关于prolog - 如何在序言中实现相应的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46278167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com