Основная причина, по которой это не работает, заключается в том, что вы не можете объединить свои факты.Проще создавать прологичные программы, если вы думаете о них как о запросе, а не как о программе.В вашем коде есть совпадение suny и sunny.если вы исправите эту орфографическую ошибку, вы получите следующее:
?- out(saturday,_,X).
true ;
X = beach ;
X = home ;
X = cinema ;
true.
Что, вероятно, все еще не то, что вы хотите, потому что оно все еще соответствует слишком многим вещам.попробуйте это вместо:
weather(saturday, sunny).
weather(sunday, uncertain).
prefers(peter, if_weather(uncertain), onday(sunday), walk_with_family).
prefers(peter, if_weather(sunny), onday(_), go_to_beach).
prefers(peter, if_weather(uncertain), onday(saturday), go_to_cinema).
prefers(peter, if_weather(rainy), onday(_), stay_home).
peter_will_do_next(Day,X) :- prefers(peter, if_weather(Y), onday(Day), X), weather(Day,Y).
peter_will_stay_home_on(Day) :- peter_will_do_next(Day,Y), Y == stay_home.
?- peter_will_do_next(saturday,What).
What = go_to_beach .
?- peter_will_stay_home_on(sunday).
false.
В этом коде мы указываем факты погоды как одну процедуру и предпочтения peter в пыльнике (в основном для ясности).Затем мы можем запросить факты и получить результат, который (более вероятно), что вы имели в виду.