我到达了我的一个项目的截止日期,我有点陷入困境,所以我需要你的帮助。家庭作业就是在 Prolog 中制作一个拼写检查器,它将使用带字母的列表输入并输出更正后的列表。我将以这样的格式给出正确的单词:
word([t,h,e]).
word([h,e,l,l,o]).
word([w,o,r,l,d]).
我应该检查的错误是
我已经有了每种修正的代码,但我必须为每个单词运行每一条规则并得到多个结果,其中只有1是正确的结果。有没有办法确定给定单词中的错误是什么,只运行适当的规则才能纠正错误?
答案 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