我有这个尝试。我对您的第一个解决方案进行了更改,只是为了消除一些冗余。我用谓词
connected/2来概括的关系,共同出现在所有的连接
by_car/2,
by_train/2和
by_plane/2事实:
connected(From, To) :- by_car(From, To).connected(From, To) :- by_train(From, To).connected(From, To) :- by_plane(From, To).
然后,我定义
travel/2为
connected/2:
travel(From, To) :- connected(From, To).travel(From, To) :- connected(From, Through), travel(Through, To).
转到
travel/3,请注意,嵌套
go...术语中的最终连接是一个结构
go/2,而其余的是
go/3s。因此,我们需要填充
X一系列以
go/3终止的嵌套结构
go/2。这是我们的基本条件。然后,它是简单地重复的第二条款的问题
travel/2,但包括一个
go/3在第三个参数,将捕获实例化以值
From和
Through在每次迭代:
travel(From, To, go(From, To)) :- connected(From, To).travel(From, To, go(From, Through, Route)) :- connected(From, Through), travel(Through, To, Route).



