如何在Prolog中找到特定的事实?

时间:2019-04-02 15:39:37

标签: prolog

我刚刚开始学习Prolog,并遇到了一些问题。

给定位置,我需要找到所有具有该位置的项目。我到目前为止所拥有的显示在下面,但是它一直打印错误,我不确定为什么。

Project('Website', 'Red', 'Paris').                    
Project('Computer', 'Green', 'London').                      
Project('CPU', 'Yellow', 'Paris').
Project('Console', 'Blue', 'Berlin').

find_project(location) :- 
    findall(X, (Project(X,_,Y), Y = location),L).

1 个答案:

答案 0 :(得分:1)

Prolog谓词名称是 atoms ,因此必须以小写字母开头或写在单引号之间。另一方面,变量必须以大写字母或下划线开头。试试:

project('Website', 'Red', 'Paris').                    
project('Computer', 'Green', 'London').                      
project('CPU', 'Yellow', 'Paris').
project('Console', 'Blue', 'Berlin').

find_project(Location, Projects) :- 
    findall(Project, project(Project,_,Location), Projects).

通话示例:

| ?- find_project('Paris', Projects).

Projects = ['Website', 'CPU']
yes