从Fact获取特定数据

时间:2013-12-25 14:13:14

标签: prolog

我知道标题,但并不意味着如何获得' calculas1'单词并使用prolog将其列入此列表:

 hasMark(calculas1 , 78 , 110).

1 个答案:

答案 0 :(得分:0)

在Prolog中,您可以通过这种方式查询事实:

hasMark(Subject, X, Y).

在您的示例中,将产生:

Subject = calculus1
X = 78
Y = 110

收集它们的最简单方法是使用内置的findall

findall(Subject, hasMark(Subject, _, _), Subjects).

这将产生:

Subjects = [calculus1, ...]

...是其他科目,如果你有的话。请注意,我使用_作为两个参数。这意味着我不在乎这些价值观是什么。任何以_开头的变量,包括该字符本身,都意味着“不关心”。

你也可以使用这样的谓词:

add_subject( MyList, [Subject | MyList] ) :-
    hasMark(Subject, _, _).

所以你可以查询:

add_subject( [], List ).

得到:

List = [calculus1].

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