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

List 如何在Prolog中确定列表中的错误类型?,list,prolog,List,Prolog,我的一个项目快到最后期限了,我有点卡住了,所以我需要你的帮助。家庭作业是关于在Prolog中制作一个拼写检查器,它将使用带有字母的列表输入,并输出更正后的列表。我将得到如下格式的正确单词: word([t,h,e]). word([h,e,l,l,o]). word([w,o,r,l,d]). 我应该检查的错误是 一个字母的错误。示例:[t,h,a]->[t,h,e] 少了一封信。示例:[h,e,l,l]->[h,e,l,l,o] 另加一封信。示例:[w,o,l,r,l,d]->[w,o,r,

我的一个项目快到最后期限了,我有点卡住了,所以我需要你的帮助。家庭作业是关于在Prolog中制作一个拼写检查器,它将使用带有字母的列表输入,并输出更正后的列表。我将得到如下格式的正确单词:

word([t,h,e]).
word([h,e,l,l,o]).
word([w,o,r,l,d]).
我应该检查的错误是

  • 一个字母的错误。示例:[t,h,a]->[t,h,e]
  • 少了一封信。示例:[h,e,l,l]->[h,e,l,l,o]
  • 另加一封信。示例:[w,o,l,r,l,d]->[w,o,r,l,d]

  • 我已经有了每种更正的代码,但是我必须为每个单词运行每一条规则,并得到多个结果,其中只有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.
    

    (也就是说,如果不需要更正,Result=Word,否则,Result已经包含了更正的单词,所以只需返回true即可)。

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


    我不认为您总能确定错误;例如,
    hel
    可以是
    hell
    (少了一个字母)或
    he
    (多了一个字母)。您提到您得到了多个结果,只有1个是正确的;你能举个例子吗?@thanosQR给我的单词没有这样的相似性,所以不可能把一个单词和另一个单词弄错。例如,假设这是提示:?-checker([[t,h,e],[w,o,l,r,l,d]],X)。X=[[t,h,e],[w,o,l,r,l,d];%使用单字母错误。X=[[t,h,e],[w,o,l,r,l,d];%使用丢失的一个字母。X=[[t,h,e],[w,o,r,l,d];%多用一个字母。这对我有帮助,但我不想抄袭什么东西,我真的想抓住重点。谢谢你的链接。给定的链接已更改为:那就可以了。不是所有的,但我注意到如果我使用你在Begging中提供的代码,以及我的所有规则,用;那么我要得到的第一个结果就是正确的。虽然我不知道为什么会发生这种情况,但有没有办法只要第一个结果是正确的,就保持第一个结果?一种停止递归的方法我的意思是,你可以调用一次(my_correction)或在它之后使用一个cut(my_correction(X),!,%rest…谢谢,A!就在递归修复问题之前,只显示一个结果。我希望这会通过。非常感谢。