Как правильно использовать правило в Прологе - PullRequest
0 голосов
/ 05 декабря 2018

Я начал небольшой путь, пытаясь понять, как работает Пролог, мне нужна помощь, чтобы понять, как решить проблему и что на самом деле делает мой код.Я хочу построить предложение из пролога и просто в качестве базового примера, который не имеет особого смысла, я хочу составить предложение типа 'you are' и 'you art'.
Вот мои предикаты:

line(you,[first, type]).
line(thee,[first,old]).
line(thou,[first, new]).

line(are, [second, word]).
line(art, [second, word]).
line(aurt, [second, place]).

Затем я создал правило (которое, как я знаю, неверно, но не знаю почему):

line(A, [composed, type]):-
    line(B, [first, type]),
    line(C, [second, word]),
    append([B,C],A).

Печатая вкомандная строка:

?- line(A, [composed, type]).
false.

Но для меня не интуитивно понятно, что я набираю что-то вроде:

?- line(A, [first,type]).
A = you ;
false.

?- line(A, [second,word]).
A = are ;
A = art ;
false.

Дайте мне слова, которые я хочу.Может кто-нибудь, пожалуйста, помогите мне лучше понять, как я должен составить такое правило, чтобы мой ожидаемый результат был примерно таким:

findall(X, line(X, [composed, type]),Y).
Y= you are;
Y= you art;
false.

Я надеюсь, что это имеет смысл, и я не сделалполностью испортить синтаксис Пролог в этом последнем блоке кода.Заранее спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

Я собираюсь показать вам правильный способ решения этой проблемы, который с помощью DCG:

sentence --> noun, verb.
noun --> [you].
verb --> [are].
verb --> [art].

Теперь вы можете генерировать предложения, просто используя драйвер DCG phrase/2:

?- phrase(sentence, X).
X = [you, are] ;
X = [you, art].

Что у вас там, с [first, type] и [second, word], у меня возникли некоторые проблемы с пониманием.Но DCG - отличный способ для выполнения легких задач НЛП, подобных этой.

...