我试图让一个谓词将一个事实与另一个事实联系起来,并一直持续到指定的停止点。
例如,假设我正在做一个物流记录,我想知道谁从谁那里得到了一个包裹,以及他们从哪里得到的,直到最后。
序言代码
mailRoom(m).
gotFrom(annie,brock).
gotFrom(brock,cara).
gotFrom(cara,daniel).
gotFrom(daniel,m).
gotFrom(X,Y) :- gotFrom(Y,_).
所以我试图对谓词 gotFrom 做的是让它从你开始的任何点(例如:gotFrom(brock,Who)) 递归地沿着列表向下移动并到达由 m 指定的结尾,即邮件室。
不幸的是,当我运行这个谓词时,它会读出,
Who = annie.
Who = brock.
Who = cara.
etc.etc....
我试着遍历整个事情,但我不确定它从布洛克到安妮,再到卡拉,一直到它循环到无限的真实。我有一种感觉,它与函数 (_) 中的通配符有关,但我不确定我还能如何表达函数的那部分,以便谓词在程序中搜索下一个事实,而不是跳到最后。
我尝试在我的程序中使用后退(!),但它给了我同样的错误。
任何帮助是极大的赞赏。我不想要代码,我只想知道我做错了什么,这样我就可以学习如何正确地做。
谢谢。