DCG кодирует факты с помощью лямбд в старых прологах?

#prolog #dcg

#пролог #dcg

Вопрос:

Наличие правила :

 nx(X^dog(X)) --> [dog].
 

В старых книгах запрос на вышеуказанный факт звучит так :

 ?- nx(X^R).
 

но теперь я должен использовать :

 ?- phrase(nx(X^F),R).
F = dog(X),
R = [dog].
 

потому что он закодирован как :

 ?- listing(nx).
nx(X^dog(X), [dog|A], A).
 

как он был закодирован до того, что его не нужно было распаковывать с помощью phrase() .

Комментарии:

1. В старых книгах, возможно, никогда не было nx(X^F,R,[]). никакой другой кодировки. На какую книгу вы ссылаетесь?

2. NLP для Prolog Pro и Prolog для анализа NLP

3. например, см. n(): np(Sem) —> d((X ^ Res) ^ Sem), n (X ^ Res). … это потому, что это внутри правила?

4. Да, внутри правила DCG вы вызываете другое правило без дополнительных аргументов и без phrase . Только при вызове правила DCG из кода, отличного от DCG, вы используете дополнительные аргументы (старый стиль) или phrase (новый стиль).

5. Но где вы это видели ?- nx(X^R). ?? Мягко говоря, не в Pereira amp; Shieber.