почему prolog не печатает этот список

#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:

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

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