почему пролог не печатает этот список - PullRequest
1 голос
/ 18 апреля 2011

У меня есть правило пролога ниже

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 Ответ

3 голосов
/ 18 апреля 2011

Это связано с тем, как вы определили предикат.

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).
...