Как вы программируете переводчик со списками в прологе? - PullRequest
2 голосов
/ 30 ноября 2011

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

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 ]

5 голосов
/ 30 ноября 2011

Вот еще один:

traducir(Xs, Ys) :- maplist(traduccion, Xs, Ys).
4 голосов
/ 30 ноября 2011
traducir([],[]).
traducir([Hin|Tin], [Hout|Tout]) :-
    traduccion(Hin, Hout),
    traducir(Tin,Tout).
0 голосов
/ 27 сентября 2016

Чтобы перевести несколько языков на несколько других, вы можете написать предикат, подобный этому:

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).
0 голосов
/ 02 августа 2015

Также добавьте предикат catchall

     tranduccion(X,X) 

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

...