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