мне нужно написать правило, которое рекурсивно определяет, когда объект находится выше другого объекта, основанный на объектах в этой картинерекурсивно определить позиции объекта, как «выше» Прологе
Например ?- above(scissors, clock).
должен вернуться правда
это то, что я до сих пор
adjacent_left(clock, rocket).
adjacent_left(rocket, guitar).
adjacent_left(guitar, telephone).
on_top_of(paperclip, clock).
on_top_of(scissors, guitar).
adjacent_right(rocket, clock).
adjacent_right(guitar, rocket).
adjacent_right(telephone, guitar).
underneath(clock, paperclip).
underneath(guitar, scissors).
right_of(Obj1, Obj2):-
adjacent_right(Obj1, Obj2).
right_of(Obj1, Obj3):-
adjacent_right(Obj1, Obj2),
right_of(Obj2, Obj3).
above(Obj1, Obj2):-
on_top_of(Obj1, Obj2).
above(Obj1, Obj3):-
on_top_of(Obj1, Obj2),
above(Obj2, Obj3).
У вас не должно быть этих фактов для 'местного/2' и 'под/2', потому что, если вы хотите добавить/удалить факты' смежный_left/2' или 'on_top_of/2', вам также нужно добавить/удалить предыдущие два, что может привести к некогерентности в ваших фактах. Вместо этого просто напишите правила: 'соседний_right (X, Y): - смежный_left (Y, X).' И 'под (X, Y): - on_top_of (Y, X) .'. – Fatalize