我如何 return 序言中的数字?
How can I return a number in prolog?
我有一个非常简单的 prolog 程序(我还在学习),我有一个知识库,指定您可以骑自行车到目的地,也可以步行。目标是能够知道如果你可以骑自行车从 a 到 b,然后步行从 b 到 c,我们可以问 prolog 是否有从 a 到 c 的路线,所以首先骑自行车到b,然后从b走到c。我用以下代码做到了这一点:
bike(a,b,30).
bike(b,c,20).
bike(c,d,25).
route_by_bike(From,To) :- bike(From,To,_).
route_by_bike(From,To) :- bike(From,Z,_), route_by_bike(Z,To).
walk(a,b,10).
walk(b,c,15).
walk(c,d,22).
walk(b,e,35).
route(From,To) :- walk(From,To,_) ; bike(From,To,_).
route(From,To) :- route(From,X), route(X,To)
我现在想做一个新的谓词,即将谓词 route/2 扩展到 route/3 这样就可以用谓词 route(From,To,Minutes) 导出如果有从 From 到 To To 的路线,骑自行车或步行,returns 该路线将花费的分钟数。问题是我不知道如何使 prolog 实际上 return 某些东西,因为直到现在我只进行了 return False 或 true 的查询。我从来没有制作过实际上 return 是一个数字的程序。
与其他语言相反,在 Prolog 中您不需要 return 东西,您只是建立术语之间的关系。您的谓词 route/3
表示:从 A 点到 B 点需要 N 分钟。
所有参数都可能被视为输入或输出,具体取决于您感兴趣的内容:
若route(bag_end, rivendell, M)
成功,则M
统一为bag_end
至rivendell
所需分钟数。
如果route(X, london, 55)
成功,那么X
是距离london
正好55分钟路程的城市。
同样,route(A,B,C), C < 10
将尝试统一 A
、B
和 C
将所有满足 的值 目标(route
和 >
),即距离不到 10 分钟路程的几个地方,以及加入这些地方所需的实际时间。
所以你需要在你的参数之间建立关系,然后你将能够进行查询,专门统一一个未绑定的 Minutes
变量,这将是与查询关联的 "result" .
我有一个非常简单的 prolog 程序(我还在学习),我有一个知识库,指定您可以骑自行车到目的地,也可以步行。目标是能够知道如果你可以骑自行车从 a 到 b,然后步行从 b 到 c,我们可以问 prolog 是否有从 a 到 c 的路线,所以首先骑自行车到b,然后从b走到c。我用以下代码做到了这一点:
bike(a,b,30).
bike(b,c,20).
bike(c,d,25).
route_by_bike(From,To) :- bike(From,To,_).
route_by_bike(From,To) :- bike(From,Z,_), route_by_bike(Z,To).
walk(a,b,10).
walk(b,c,15).
walk(c,d,22).
walk(b,e,35).
route(From,To) :- walk(From,To,_) ; bike(From,To,_).
route(From,To) :- route(From,X), route(X,To)
我现在想做一个新的谓词,即将谓词 route/2 扩展到 route/3 这样就可以用谓词 route(From,To,Minutes) 导出如果有从 From 到 To To 的路线,骑自行车或步行,returns 该路线将花费的分钟数。问题是我不知道如何使 prolog 实际上 return 某些东西,因为直到现在我只进行了 return False 或 true 的查询。我从来没有制作过实际上 return 是一个数字的程序。
与其他语言相反,在 Prolog 中您不需要 return 东西,您只是建立术语之间的关系。您的谓词 route/3
表示:从 A 点到 B 点需要 N 分钟。
所有参数都可能被视为输入或输出,具体取决于您感兴趣的内容:
若
route(bag_end, rivendell, M)
成功,则M
统一为bag_end
至rivendell
所需分钟数。如果
route(X, london, 55)
成功,那么X
是距离london
正好55分钟路程的城市。同样,
route(A,B,C), C < 10
将尝试统一A
、B
和C
将所有满足 的值 目标(route
和>
),即距离不到 10 分钟路程的几个地方,以及加入这些地方所需的实际时间。
所以你需要在你的参数之间建立关系,然后你将能够进行查询,专门统一一个未绑定的 Minutes
变量,这将是与查询关联的 "result" .