как перевести «Сая» на «Я» и «Сая» на «Я» в прологе - PullRequest
1 голос
/ 13 мая 2019

когда пользователь вводит 'saya suka makan pisang' эта программа переведет ввод на основе факта, что означает, что он будет переводиться в 'Мне нравится есть банан' . ( «i» в нижнем регистре)

Если ввод не распознается программой (ввод не совпадает с существующим фактом), программа останется нераспознанным словом и отобразит его как вывод. Например, пользовательский ввод 'saya suka makan Pisang' , вывод 'Мне нравится есть Pisang' (Писанг не в моем деле)

Теперь, что я собираюсь сделать, это когда пользовательский ввод 'Saya suka makan pisang' , программа переведет его как «Мне нравится есть банан» («I» в верхнем регистре)

Другими словами, эта программа должна иметь возможность переводить все факты в верхний и нижний регистр.

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 Ответ

1 голос
/ 14 мая 2019

«Решением» является добавление заглавных слов в таблицу words/2:

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

Вы можете использовать одинарные кавычки вокруг любого литерала, чтобы сделать его атомом.

Этоэто самый дешевый выход для вас на данный момент.

Если у вас большой список слов, вам, возможно, придется сделать что-то более сложное.Например, вы можете преобразовать в нижний регистр, прежде чем использовать words/2, затем, после того как вы сопоставили переведенное слово, используйте его заглавными буквами, если это необходимо.Но все это действительно зависит от варианта использования, и будет больше кода, когда список слов будет таким маленьким.

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