реализовать отрицание (\+ или not / 1) в WAM Prolog
Как бы вы реализовали отрицание по отказу (+) в WAM? Или (->;)soft-cut. Мы предполагаем, что сокращение реализовано.
Например, Once описывается swi-pl как,
once(Goal) :-
Goal,
!.
Чтобы добавить еще один источник, в самой Википедии просто есть расплывчатое выражение "выполнить \+".
Отрицание подразумевает получение значения предиката, т. Е. Если оно истинно, то оно ложно, и наоборот. Однако вместо того, чтобы возвращать значение, WAM описывает "сбой" как операцию. Я бы реализовал это какgoto fail
и т.п.
У меня проблемы с пониманием того, где именно находится значение (в высокоуровневом описании цель имеет истинное значение, но на низкоуровневой основе это операция) или если вы расширяете WAM и как.