Как я могу создать программу на Прологе, которая распознает пол, множественность и падеж существительного, который вводит пользователь? - PullRequest
1 голос
/ 25 мая 2019

У меня есть следующие правила лексики

gr_noun_suffix(masculine,singular,nominative,10,'ος').
gr_noun_suffix(masculine,singular,nominative,10,'ης').
gr_noun_suffix(masculine,singular,possessive,10,'η').
gr_noun_suffix(masculine,singular,accusative,10,'η').
gr_noun_suffix(masculine,plural,nominative,10,'ες').
gr_noun_suffix(masculine,plural,possessive,10,'ων').
gr_noun_suffix(masculine,plural,accusative,10,'ες').

и мне нужно дать в качестве ввода, например

gr_noun(X,F,Gender,Plurality,Singularity,Case,Code,[σκυλος],[]).

и получите

F = σκυλ(X),
Gender= masculine,
Singularity= singular,
Case= possessive,
Code= 10 .

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

Кажется, я застрял в том, как разбить последний слог слова.

1 Ответ

0 голосов
/ 25 мая 2019

Не разбивайте атомы на списки символов. Используйте sub_atom/5, чтобы найти суффикс или разорвать его.

Я не могу понять, какими должны быть все аргументы, но этого должно быть достаточно для отправной точки:

gr_noun(X, F, Gender, Singularity, Case, Code, Noun) :-
    gr_noun_suffix(Gender, Singularity, Case, Code, X),
    sub_atom(Noun, Before, Len, 0, X),
    sub_atom(Noun, 0, Before, Len, F0),
    F =.. [F0, X].

С этим я получаю:

?- gr_noun(X, F, Gender, Singularity, Case, Code, σκυλος).
X = ος,
F = σκυλ(ος),
Gender = masculine,
Singularity = singular,
Case = nominative,
Code = 10 ;
...