list - 如何在序言中将'Saya'翻译成'I'和'saya'翻译成'i'
问题描述
当用户输入“saya suka makan pisang”时,该程序将根据事实翻译输入,这意味着它将翻译为“我喜欢吃香蕉”。(“i”是小写的)
如果输入没有被程序识别(输入与存在的事实不匹配),程序将保留未识别的单词并将其显示为输出。例如,用户输入'saya suka makan Pisang',输出'i like eat Pisang'(Pisang 不是我的事实)
现在我打算做的是当用户输入“Saya suka makan pisang”时,程序会将其翻译为“我喜欢吃香蕉”(“我”是大写字母)
换句话说,这个程序需要能够将所有的事实翻译成大写和小写。
words(saya,i).
words(makan,eat).
words(pisang,banana).
words(oren,orange).
words(minum,drink).
words(suka,like).
:- style_check(-singleton).
translation(X,Y):-
words(X,Y).
translation(X,Y):-
words(Y,X).
translation(X,X).
translate([], []).
translate([H|T], [H1|T1]):-
translation(H, H1),
translate(T,T1).
prolist([],[]).
prolist(SL,[W|T]):-
split(SL,WL,R),
name(W,WL),
prolist(R,T).
split([],[],[]).
split([32|T],[],T).
split([H|T],[H|T2],R):-
split(T,T2,R).
run:-
nl,write('Enter One sentence or word (English or Malay):'),
read(X),end(X),
nl.
end(X):-
X=q->write('SESSION END. THANK YOU. ');
name(X,SL),prolist(SL,List),translate(List,K), atomic_list_concat(K, ' ', W),
nl,
write('Translated as:'),
write(W),
nl,
run.
解决方案
“解决方案”是将大写单词添加到您的words/2
表格中:
words(saya,i).
words('Saya', 'I').
words(makan,eat).
words('Makan', 'Eat').
% and so on
您可以在任何文字周围使用单引号以使其成为原子。
这是您目前最便宜的出路。
如果你有一个很大的单词列表,那么你可能需要做一些更复杂的事情。例如,您可以在使用 之前将其转换为小写words/2
,然后在匹配翻译后的单词后,必要时将其大写。但这一切实际上取决于用例,当单词列表如此之少时,代码会更多。
推荐阅读
- android - xml下方不明空间空间
- javascript - 构建后使用外部 Vue 组件
- matlab - MATLAB:nx1 Char 的“ismember”函数
- android - 如何获取 FloatingActionButton 的当前颜色
- python - Heroku 减少 TensorFlow 应用程序的内存消耗
- javascript - 类型错误:无法读取 undefined-Discord.js 的属性“内容”
- esp8266 - esp8266 - 如何在 spi 上写入代码段?
- python - 如何绘制不同颜色的线
- python - 2 一次变换的数据帧乘法
- angular - 使用 rxjs 在 Angular 中转换 http 服务响应