Пролог - числа больше x

Я работаю с арифметикой Пролога и имею программу, которая генерирует абстрактное синтаксическое дерево, такое как plus(num(1),num(2)), которое просто 1+2. Это делается с помощью DCG. В этом примере plus(num(1),num(2)) совпадает с представлением списка префиксов [+,1,2].

Моя проблема в том, что я хочу разрешить только num(x) больше 3. Например, num(4) разрешено, но не num(1).

Я делаю это:

num(num(4)) --> [4].
num(num(5)) --> [5].
num(num(6)) --> [6].
num(num(7)) --> [7].

и т.д., но хотелось бы сделать что-то вроде num(num(x)) --> [x]. для чисел больше 3. Есть идеи, как подойти к этой проблеме?


person knordbo    schedule 13.11.2013    source источник
comment
@ChristianF Да, это упражнение! Я хочу учиться, так что малейший намек будет оценен по достоинству! :) Я исследовал, но там не так уж много Prolog-штучки ...   -  person knordbo    schedule 13.11.2013
comment
Похоже, вы не понимаете концепцию переменных в Прологе. Прочтите об этом. После этого прочтите о DCG. Не стоит использовать его в этом случае. Тогда поймите, что проверить X ›3 тривиально.   -  person Christian Fritz    schedule 13.11.2013
comment
Еще раз спасибо! Догадаться ;)   -  person knordbo    schedule 13.11.2013
comment
@ExceptionalException: тогда напишите свой ответ.   -  person false    schedule 14.11.2013


Ответы (1)


Как насчет:

num(num(X)) --> [X], {X > 3}

{} / 1 можно использовать для встраивания условий и побочных эффектов в правила грамматики DCG. DCG можно найти во многих системах Prolog, но пока нет зрелого стандарта. Но в большинстве систем Prolog есть {} / 1. Это, например, определяется здесь:

Правила грамматики с определенным предложением
Клаус Даесслер
20 августа 2013 г.
http://www.complang.tuwien.ac.at/ulrich/iso-prolog/dcgs/dcgsdin130820.pdf

В глоссарии {} / 1 обозначается как «цель тела грамматики». В более ранних публикациях конструкция называлась «вспомогательное действие», «вызов процедуры» или «дополнительные условия», что, вероятно, более разумно, чем просто называть ее целью тела грамматики, поскольку мы хотели бы видеть все составляющие тела грамматики как тела грамматики. цели. См., Например, здесь:

Грамматики с определенными предложениями для анализа языка
Фернандо К. Н. Перейра и Дэвид Х. Д. Уоррен
Искусственный интеллект 13 (1980), 231-278
http://cgi.di.uoa.gr/~takis/pereira-warren.pdf

Пока

person Mostowski Collapse    schedule 14.02.2014