gpt4 book ai didi

database - Prolog - 坚持作业 - 使用数据库并输入 2 个值以从数据库中获取第三个值

转载 作者:搜寻专家 更新时间:2023-10-30 23:19:19 25 4
gpt4 key购买 nike

示例数据库:

 any(a,b,2). 
any(b,c,2).
any(c,d,3).
any(d,e,1).
any(e,f,3).

键:(Station1,Station2,Time)

问题:

在 prolog 中输入 (station1,time) 并让它返回可到达的所有站点。

例如:

如果您输入:(b,2)

输出应该是:'a' 和 'c'

这是因为在“2”分钟内从“b”站出发,您将能够到达“a”站和“c”站,因为它们在输入的时间范围内。


我厌倦了使用列表和递归,但运气不好,有什么帮助/建议吗?


reachable(Station1, Limit, Result) :-
reachable(Station1, Limit, 0, 0, Result).

reachable(Station1, Visited, TimeSpent, Limit, Result) :-
overground(Station1,Station2,Time),
Visited is Limit - Time,
Limit =< TimeSpent,
Result = [Station2];
overground(Station1, Waypoint, Time),
NewVisited is Visited - Limit,
NewTimeSpent is TimeSpent - NewVisited,
reachable(Waypoint,Station2, NewTimeSpent, NewVisited,Result).

<<< 我试过但似乎不起作用 X_X

最佳答案

那么,让我们看看问题:

  1. 您需要能够从谓词“双向”找到电台,即 any(MyStation, Y)any(Y, MyStation),所以在使用 any/3 时需要分离。
  2. 如有必要,您需要通过递归找到出发站不直接到达的车站。
  3. 由于您必须使用递归,因此您必须使用累加器跟踪在递归的给定点已经花费的时间,以便了解给定点的站点是否仍然满足时间限制。
  4. 因为你必须使用递归,你必须跟踪已经访问过的站点,以免陷入无限循环,或者只通过一个电路中的另一个循环给出两次相同的结果这将完成谢谢这次又是一个累加器。

解决方案的一般外观:

第一步,调用工作谓词:

reachable(From, Limit, Result) :-
...

... 应该是对 reachable/5 的调用(这个 + 2 个累加器)。

第二步,工作谓词:

reachable(From, Visited, TimeSpent, Limit, Result) :-
...

... 应该满足这些准则:

  • 首先你必须找到一个与 From thanks to any/3 相关的电台
  • 然后你要检查这个站是否在Visited中
  • 然后你必须写一个有两种情况的析取(或写两个子句):
    • 最后一种情况,即您检查花费的时间是否低于限制,并将结果与​​适当的变量统一
    • 递归情况,即您使用计算的新 TimeSpent、更新的新 Visited 和新的出发站调用 reachable。

如果您想要更准确的建议,我建议您发布您已经完成的工作,以便我们可以从那里开始工作!

关于database - Prolog - 坚持作业 - 使用数据库并输入 2 个值以从数据库中获取第三个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611311/

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