如何在序言中将“ Saya”翻译为“ I”,如何将“ Saya”翻译为“ i”

时间:2019-05-13 12:27:35

标签: list prolog

当用户输入'saya suka makan pisang'时,该程序将基于事实翻译输入,这意味着它将翻译为“我喜欢吃香蕉” 。 (“ i”是小写)

如果程序无法识别输入(输入与现有事实不匹配),则程序将保留无法识别的单词并将其显示为输出。例如,用户输入'saya suka makan Pisang',输出'我喜欢吃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.

输入输出 input output

1 个答案:

答案 0 :(得分:1)

“解决方案”是将大写单词添加到您的words/2表中:

words(saya,i).
words('Saya', 'I').
words(makan,eat).
words('Makan', 'Eat').
% and so on

您可以在任何文字周围使用单引号使之成为原子。

这是目前最便宜的出路。

如果单词列表很大,则可能需要做一些更复杂的事情。例如,您可以在使用words/2之前将其转换为小写字母,然后在与翻译后的单词匹配后将其大写。但是,所有这些实际上都取决于用例,并且当单词列表很小时,它将需要更多代码。