Как вы программируете переводчик со списками в прологе?
То, что я хочу сделать, это переводчик в Прологе. Я сделал что-то вроде этого, чтобы перевести одно слово:
traducir(X,Y) :- traduccion( X, Y ).
traduccion(gato,cat).
И когда ты спрашиваешь Пролог traducir(X,cat)
, это отвечает X=gato
То, что я хочу сделать, это переводчик, где вы спрашиваете что-то вроде traducir(X,[Hola,mi,nombre,es,Juan]).
и ответ Пролога должен быть X=[Hello,my,name,is,John]
,
4 ответа
Решение
Вот еще один:
traducir(Xs, Ys) :- maplist(traduccion, Xs, Ys).
traducir([],[]).
traducir([Hin|Tin], [Hout|Tout]) :-
traduccion(Hin, Hout),
traducir(Tin,Tout).
Чтобы перевести несколько языков на несколько других, вы можете написать предикат, подобный этому:
translate(Lang1,X,Lang2,Y) :-
Translations = [
[
[spanish,perro],
[english,dog],
[french,chien],
[german,hund],
[italian,cane]
],
[
[french,chat],
[spanish,gato],
[english,cat]
]
%You can add more lists of translations here if necessary.
],
member(Translation,Translations),
member([Lang1,X],Translation),
member([Lang2,Y],Translation).
Теперь вы можете определить traducir
Предикат как это:
traducir(X,Y) :- translate(spanish,X,english,Y).
Также добавьте предикат catchall
tranduccion(X,X)
в нижней части вашей логической базы, если вы хотите включить имена людей, которые не переведены.