在表Prolog中查找X.

时间:2016-08-20 23:48:28

标签: prolog

如何让我的Prolog代码返回数据库中的内容,而不是仅仅回答yesno

我有这张小桌子

student('Pelt', '67890').
grade('PH100', '67890', 'C plus').

当我传入'C plus'时,如何编写一个返回'Pelt'的查找函数?这就是我所拥有的,但我不认为它会去任何地方。

lookupGrade(X) :- student(X, Y), grade(W, Y, Z).

1 个答案:

答案 0 :(得分:4)

Prolog规则不会将值作为C函数返回。

在您想要提取学生的成绩时,您应该将两个要素传递给lookupGrade;但是(来自Mat的建议;谢谢)我在student_grade中更改了名称(原因在最后解释)。

规则可能类似

student_grade(Name, Grade) :- student(Name, Code), grade(_, Code, Grade).

将其用作

 student_grade('Pelt', G)

您在G 'C plus'中“统一”了值 student_grade(N, 'C plus')

请注意,此规则的作用方向相反;与

'Pelt'

您在N中统一lookupGrade

这就是为什么findall/3是一个坏名字的原因:如果你传递一个原子作为名称和一个等级变量,它可以是一个“查找等级”;如果你传递一个原子作为等级和一个变量的名字,可以是一个“查找学生”;可以(以{{1}}为例,例如)用于查找所有匹配的学生/成绩,如果你传递给它两个变量。