1

我在下面有一个序言规则

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.

但它不起作用

我如何让它打印所有的类给我的规则定义的方式

4

1 回答 1

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).
于 2011-04-18T07:00:59.130 回答