Как вы программируете переводчик со списками в прологе?

То, что я хочу сделать, это переводчик в Прологе. Я сделал что-то вроде этого, чтобы перевести одно слово:

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) 

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

Другие вопросы по тегам