Как определить вид ошибки в списке в Прологе? - PullRequest
2 голосов
/ 17 декабря 2011

Я заканчиваю работу над одним из моих проектов, и я застрял, поэтому мне понадобится ваша помощь.Домашнее задание - это проверка орфографии в Пролог , которая будет использовать ввод списков с буквами и выводить исправленные списки.Мне дадут правильные слова в таком формате:

word([t,h,e]).
word([h,e,l,l,o]).
word([w,o,r,l,d]).

Ошибки, о которых я должен проверить:

  1. Ошибка одной буквы.Пример: [t, h, a] -> [t, h, e].
  2. Отсутствует одна буква.Пример: [h, e, l, l] -> [h, e, l, l, o].
  3. Одна дополнительная буква.Пример: [w, o, l, r, l, d] -> [w, o, r, l, d]

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

Ответы [ 2 ]

1 голос
/ 17 декабря 2011

Вот реализация простой проверки орфографии в Прологе:

https://github.com/Attempto/APE/blob/master/lexicon/spellcheck.pl

1 голос
/ 17 декабря 2011

Кажется, вам нужен дизъюнкт:

my_correction(Word) :-
    (
        correction1(Word, Result)
    ;
        correction2(Word, Result)
    ;
        correction3(Word, Result)
    ),
    % do stuff with Result.

Или, может быть, я неправильно понял вашу проблему ...

Возможно, вы захотите обернуть это в структуру if для случая, когда коррекция не требуется:

my_correction(Word) :-
    (   \+ (correction1(Word, Result);correction2(Word, Result);correction3(Word, Result))
     -> Result = Word
     ;  true),
    % do stuff with Result.

(это говорит о том, что если коррекция не требуется, Result = Word, иначе Result уже содержит корректирующее слово, поэтому просто верните true).

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