реализовать отрицание (\+ или not / 1) в WAM Prolog

Как бы вы реализовали отрицание по отказу (+) в WAM? Или (->;)soft-cut. Мы предполагаем, что сокращение реализовано.

Например, Once описывается swi-pl как,

once(Goal) :-
    Goal,
    !.

Чтобы добавить еще один источник, в самой Википедии просто есть расплывчатое выражение "выполнить \+".

Отрицание подразумевает получение значения предиката, т. Е. Если оно истинно, то оно ложно, и наоборот. Однако вместо того, чтобы возвращать значение, WAM описывает "сбой" как операцию. Я бы реализовал это какgoto fail и т.п.

У меня проблемы с пониманием того, где именно находится значение (в высокоуровневом описании цель имеет истинное значение, но на низкоуровневой основе это операция) или если вы расширяете WAM и как.

0 ответов

Другие вопросы по тегам