Перевести Пролог Слова - PullRequest
2 голосов
/ 28 января 2010

Я работаю над этим замечательным проектом Пролог, и я застрял в этой ситуации, когда мне нужно перевести некоторые слова в другие слова (например, «я» в «ты». *

Это то, что я сделал, и я уверен, что это довольно сомнительно. Я ввожу предложение, и когда оно идет на преобразование, оно меняет только одно слово, а потом начинает дурачиться. (например, «я чувствую себя счастливым» меняется на «ты», а затем падает.)

translate([]).
translate([H|T], [NewH|NewT]):-
             means(H,NewH);
             spit(T,NewT).
means(i,you).
means(my,your).
means(mine,yours).

1 Ответ

2 голосов
/ 28 января 2010

Вот исправление:

translate([], []).
translate([H|T], [NewH|NewT]):-
             means(H, NewH),
             translate(T,NewT).
means(i, you) :- !.
means(my, your) :- !.
means(mine, yours) :- !.
means(X, X).

Изменения следующие:

  1. Я исправил отсутствующий параметр в первом определении перевода (это считается полностью независимой функцией, если число параметров не совпадает).
  2. Я звоню translate в остальной части списка, когда переводится первый элемент.
  3. Я утверждаю, что каждое слово означает себя, если не указано иное. Часть :- ! означает, что если вы соответствуете этому, не пытайтесь делать остальное (это позволяет избежать списков, всегда совпадающих с самими собой).

Пример использования:

?- translate([this, is, i], X).
X = [this, is, you].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...