Я пытаюсь использовать метапрограммирование и DCG, чтобы превратить список в список предложений, используя Prolog. Например, я хотел бы превратить [a, man, is, a, human] в [ (human(X) :- man(X))]
Я подумал, что могу использовать =.. для составления терминов из списка их составных частей. Например, вызов Term =.. [f,a,b,c]
свяжет Term с f(a,b,c)
.
Моя проблема заключается в попытке объединить это с помощью DCG. До сих пор я использовал DCG, чтобы проверить правильность формы предложения:
%% syllogism( +S )
% Holds if the sentence S is one of four syllogisms
% a B is a C
syllogism --> article, subject, is_, (article ; [] ), subject .
% some B is a C
syllogism --> some, subject, is_, (article ; [] ), subject .
% no B is a C
syllogism --> no, subject, is_, (article ; [] ), subject .
% some B is not a C
syllogism --> some, subject, is_, not, (article ; [] ), subject .
subject --> [X] .
some --> [some] .
is_ --> [is] .
article --> [a] .
article --> [every] .
not --> [not] .
no --> [no] .
Однако я пытаюсь изменить это, чтобы я мог составить список предложений, все еще полагаясь на DCG.
РЕДАКТИРОВАТЬ: В основном то, чего я пытаюсь добиться, - это взять список L и создать список предложений: [a, man, is, a, human] должен производить [man(X) :- human(X)]
Аналогично: [нет, В, есть, а, С] должно давать [ (ложь :- В(Х),С(Х))]
Спасибо за ваше время.
(=..)/2
непосредственно в программе. Вместо этого вы можете дать бетонные конструкции. - person false   schedule 21.11.2012subject --> [X].
означает, что субъектом может быть что угодно. Это предназначено? - person false   schedule 21.11.2012=..
. - person liori   schedule 21.11.2012