List 如何在Prolog中确定列表中的错误类型?
我的一个项目快到最后期限了,我有点卡住了,所以我需要你的帮助。家庭作业是关于在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,
word([t,h,e]).
word([h,e,l,l,o]).
word([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!就在递归修复问题之前,只显示一个结果。我希望这会通过。非常感谢。