prolog - 如何在 Prolog 中制作一个程序来识别用户输入的名词的性别、复数和大小写?
问题描述
我有以下词典规则
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 .
换句话说,我需要打破单词的最后一个音节,并与规则进行比较,以便喜欢适用的内容。
我似乎被困在如何打破这个词的最后一个音节。
解决方案
不要将原子拆分为字符列表。用于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 ;
推荐阅读
- r - 使用 kable 打印大型 data.frame 的有效方法
- visual-studio - Visual Studio 2015 社区版在登录时总是崩溃
- json - Ionic 4 使用搜索栏读取本地 JSON 文件
- python - 在数据框中搜索多个子值
- postgresql - PostgreSQL 使用 Linux 大页面
- android - 我的 var 值不会在第一次“点击”时更新
- java - 如何使 Failsafe RetryPolicy 处理 ConstraintVoilationException
- python - 如何在python中删除图像的背景
- reactjs - ReferenceError:找不到变量:React 上的 regeneratorRuntime
- dspace - 在 DSpace 实例中集成文档可视化器