#prolog #attempto #drs
#prolog #попытка #drs
Вопрос:
Я пытаюсь преобразовать DRS в другую структуру. Вот незавершенная незавершенная работа (все еще простое DRS):
conds2lst(Conds,Lst) :- maplist( X^L^(Z-_ = X, Z =.. L), Conds, Lst).
property(Conds,Adj) :- member([property,_,Adj|_], Conds).
object(Conds,Struct) :- , property(Conds,Adj), member([object,Noun,Noun|_], Conds), Struct =.. [Noun,Adj].
predicate(Conds,Struct) :- object(Conds,Obj),
( member([predicate,Verb,Verb,Subj,_Obj], Conds), Struct =.. [Verb,Subj,Obj] );
( member([predicate,Verb,Verb,Subj,Obj,IndObj], Conds), Struct =.. [Verb,Subj,Obj,IndObj] ).
sent(Conds,Struct) :- predicate(Conds,Struct).
?- ape2drs('Peter owns a red book.',D),conds(D,C),conds2lst(C,L),sent(L,S).
D = drs([book, own], [object(book, book, countable, na, eq, 1)-1/5, property(book, red, pos)-1/4, predicate(own, own, named('Peter'), book)-1/2]),
C = [object(book, book, countable, na, eq, 1)-1/5, property(book, red, pos)-1/4, predicate(own, own, named('Peter'), book)-1/2],
L = [[object, book, book, countable, na, eq, 1], [property, book, red, pos], [predicate, own, own, named('Peter'), book]],
S = own(named('Peter'), book(red)) .
конечно, мой текущий код довольно специфичен… но одна вещь, которая начинает распутываться… жуткое чувство… это похоже на код DCG …
property -> [property], member.
object -> property, member, {=.. }.
predicate -> object, (member;member).
sent -> predicate.
разница в том, что список неупорядочен, но если вы можете передать его иерархически от глагола вниз, он, вероятно, может быть проанализирован как Иерархически-Difference-List, т.Е. Несколько имитировать DCG !? member() is играет роль DIFF.
Сложность заключается в том, что вам нужно поздно привязать доменные переменные сверху вниз ИЛИ снизу вверх
А ты как думаешь ? или мне это только кажется ?
Комментарии:
1. IMO: DCG — это общая парадигма программирования, применимая к различным видам обработки ввода / вывода с использованием списков данных. Если вам нужны неупорядоченные данные, подумайте об использовании словарей (поддерживаемых SWI-Prolog). Но переосмыслите DCG, который зависит от списков.
2. Что вы имеете в виду под «поздней привязкой к переменным домена сверху вниз ИЛИ снизу вверх»?