Prolog 从事实中获取特定数据

Prolog 从事实中获取特定数据,prolog,Prolog,我知道标题并不意味着什么,但是,如何使用prolog从这个事实中获取“calculas1”单词并将其放入列表: hasMark(calculas1 , 78 , 110). 在Prolog中,可以通过以下方式查询事实: hasMark(Subject, X, Y). 在你的例子中,这将产生: Subject = calculus1 X = 78 Y = 110 收集它们的最简单方法是使用内置的findall: 这将产生: Subjects = [calculus1, ...] 这个。。

我知道标题并不意味着什么,但是,如何使用prolog从这个事实中获取“calculas1”单词并将其放入列表:

 hasMark(calculas1 , 78 , 110).

在Prolog中,可以通过以下方式查询事实:

hasMark(Subject, X, Y).
在你的例子中,这将产生:

Subject = calculus1
X = 78
Y = 110
收集它们的最简单方法是使用内置的findall:

这将产生:

Subjects = [calculus1, ...]
这个。。。是其他科目,如果你有。注意,我对其中两个参数使用了u。这意味着我不在乎那些价值观是什么。任何以_开头的变量,包括该字符本身,都表示不在乎

您还可以使用如下谓词:

add_subject( MyList, [Subject | MyList] ) :-
    hasMark(Subject, _, _).
因此,您可以查询:

add_subject( [], List ).
并获得:

List = [calculus1].

注意,带下划线和小写的命名约定在Prolog中比camelCase更常用。因此,最好将您的事实命名为has_mark。

当您说将其放入列表时,您的意思是您有一个现有的列表吗?还是要列出所有主题?@mbrach我要将“calculas1”保存在空列表中
List = [calculus1].