В this page подробно DCGs в Прологе, он предлагает следующий пример грамматики:Каков второй параметр в этом предикате Prolog? Почему он пуст?
s --> np,vp.
np --> det,n.
vp --> v,np.
vp --> v.
det --> [the].
det --> [a].
n --> [woman].
n --> [man].
v --> [shoots].
который может быть использован как таковой:
s([a,woman,shoots,a,man],[]).
Что такое второй параметр делает? Почему это []
или пусто? Я думаю, вы просто позвоните s([a,woman,shoots,a,man]).
, но это не сработает.
Может ли кто-нибудь объяснить, что происходит с пустым списком здесь и что он делает?
Как говорится в ссылке, которую вы дали: * То есть, как и в распознавателе разностного списка, мы спрашиваем, можем ли мы получить информацию, употребляя символы в [a, woman, shoots, a, man], * * ничего не оставляя **. Другими словами, DCG ожидает, что второй аргумент «что осталось» после обработки ввода. Поскольку в этом случае вы ничего не хотите, аргумент '[]'. Вы также можете использовать «фразу (s, [a, woman, shoots, a, man])», что является более распространенным способом вызова DCG. И для генерации всех признанных предложений, фраза (s, L) .'. – lurker
Я читал это, но я не понимаю, почему передача второго аргумента обозначается как то, что он ожидает оставить. Где эта логика указана в первом блоке кода? –
Эта логика «под капотом» в DCG. Вот упражнение: запустите интерпретатор Prolog, загрузите пример программы DCG (например, из файла), затем выполните «листинг». Это покажет вам, каковы фактические предикаты, и вы увидите второй аргумент. Если вы используете 'фразу' и только нотацию DCG, этот аргумент неяв. Учебник немного вводит в заблуждение, не вводя предикат 'фраза'. – lurker