如果我们有一个无条件的陈述,如:
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,__,__]).
你看到我的困境吗?有没有更好的方法来做到这一点,而不是像我一样硬编码?因为无条件陈述可以是任何形式。
答案 0 :(得分:0)
如果元素在列表中,则需要一个成功的谓词,否则将失败。这个谓词是memberchk/2
:
class_student(C, S) :-
student(S, Cs),
memberchk(C, Cs).