如何确定Prolog列表中的错误类型?

时间:2011-12-17 17:05:21

标签: list prolog

我到达了我的一个项目的截止日期,我有点陷入困境,所以我需要你的帮助。家庭作业就是在 Prolog 中制作一个拼写检查器,它将使用带字母的列表输入并输出更正后的列表。我将以这样的格式给出正确的单词:

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]
  4. 我已经有了每种修正的代码,但我必须为每个单词运行每一条规则并得到多个结果,其中只有1是正确的结果。有没有办法确定给定单词中的错误是什么,只运行适当的规则才能纠正错误?

2 个答案:

答案 0 :(得分:1)

看起来你只需要分离:

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.

(说如果不需要修正,结果= Word,否则,结果已经持有修正字,所以只返回true)。

答案 1 :(得分:1)

这是Prolog中一个简单的拼写检查器的实现:

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