为什么prolog不打印此列表

时间:2011-04-18 06:13:04

标签: list search printing prolog items

我在下面有一个prolog规则

schedule(mary,[ma424,ma387,eng301]).

我有一个谓词

taking(X,Y):- schedule(X, [Y | L]). 

当我尝试通过输入

来弄清楚她正在上课时
taking(mary,Y).
我得到了 Y = ma424

为什么不打印出所有课程

我也尝试了这个和其他变体

taking(X,Y):- schedule(X,[X|L]),schedule(Y, [Y | L]),schedule(Y,L),X\=Y,X\=L.

但它不起作用

如何让它打印所有类,为我的规则定义

1 个答案:

答案 0 :(得分:3)

这是由于您定义谓词的方式。

taking(X,Y) :-        % X takes class Y if...
    schedule(X,       % in the schedule for X,
             [Y|L]).  % Y is the first element.

如果您没有告诉,您的程序将不会神奇地决定搜索列表L。为此,请使用member/2谓词:

taking(Student, Class) :-
    schedule(Student, Classes),
    member(Class, Classes).