快速Prolog问题

时间:2015-03-02 00:50:59

标签: prolog predicate

如果我们有一个无条件的陈述,如:

student(name, [class1, class2, class3, class4]).

在class1 中检索所有学生的最佳方法是什么?

我目前正在做的方法是......

class1_students(X):-
    student(X,[class1,__,__,__]).

但这仅适用于上述无条件陈述。它不适用于无条件陈述,例如:

student(name, [class2, class1, class3, class4]).

因为那时我需要将条件谓词调整为:

class1_students(X):-
    student(X,[__,class1,__,__]).

你看到我的困境吗?有没有更好的方法来做到这一点,而不是像我一样硬编码?因为无条件陈述可以是任何形式。

1 个答案:

答案 0 :(得分:0)

如果元素在列表中,则需要一个成功的谓词,否则将失败。这个谓词是memberchk/2

class_student(C, S) :-
    student(S, Cs),
    memberchk(C, Cs).