首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >邻居,城镇,大坝,联系关系

邻居,城镇,大坝,联系关系
EN

Stack Overflow用户
提问于 2012-01-25 13:32:30
回答 1查看 96关注 0票数 0

在prolog程序中,如下所述:

代码语言:javascript
复制
town(a).
town(b).
town(c).
town(d).
dam(e).
dam(f).
link(a,b).
link(a,c).
link(c,d).
link(b,d).
link(b,c).
link(c,e).
link(a,e).
link(d,f).
neighbour(X,Y):- link(X,Y) ; link(Y,X).

all_neighbours(L,X)将所有邻近城镇的列表L返回给X:all_neighbours(L,X):- town(Y),findall(Y,邻居(X,Y),L)。

这是正确的程序吗?has_dam(L)返回至少有一个相邻大坝的所有城镇的列表L:has_dam(L):- dam(Y),town(X),findall(X,town(X,Y),L)。

这是正确的程序吗?no_dam(L)返回没有邻近大坝的所有城镇的列表L:no_dam(L):- town(X),no dam(Y),findall(X,邻居(X,Y),L)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-25 13:43:51

不,这些都不对。在第一个过程中,对town的调用应该在findall的范围内完成。

代码语言:javascript
复制
all_neighbours(Neighbourhood, X) :-
    findall(Y, (town(Y), neighbour(X, Y)), Neighbourhood).

其他人也一样。注意findall的第二个参数周围的括号。这些是必需的,因为

代码语言:javascript
复制
findall(Y, town(Y), neighbour(X, Y), Neighbourhood)

将被解析为对(可能不存在的) findall/4的调用。

要理解findall查询,请详细说明:

查找所有的Y (Y是一个城镇,X邻居是Y),并调用结果Neighbourhood.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9003552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档