List 比较prolog中两个列表的内容

List 比较prolog中两个列表的内容,list,prolog,compare,letters,List,Prolog,Compare,Letters,我有一些家庭作业,我坚持一点。我得到了如下事实: word([h,e,l,lo]). word([m,a,n]). word([w,o,m,a,n]). etc 我必须制定一个规则,以便用户输入一个字母列表,我应该将列表与我的单词进行比较,并纠正任何可能的错误。如果第一个字母的位置正确,我将使用以下代码: mistake_letter([],[]). mistake_letter([X|L1],[X|L2]):- word([X|_]), m

我有一些家庭作业,我坚持一点。我得到了如下事实:

word([h,e,l,lo]).
word([m,a,n]).
word([w,o,m,a,n]). etc
我必须制定一个规则,以便用户输入一个字母列表,我应该将列表与我的单词进行比较,并纠正任何可能的错误。如果第一个字母的位置正确,我将使用以下代码:

mistake_letter([],[]).
mistake_letter([X|L1],[X|L2]):-
             word([X|_]),
             mistake_letter(L1,L2).
问题是我不知道如何移动到单词事实中的下一个字母。下次运行回溯时,它将使用单词的开头,而我想使用列表中的第二个字母。有没有办法解决这个问题

对于任何语法错误,我深表歉意,并感谢您的帮助。

为了转到“事实”一词的下一个字母,您需要将“事实”一词作为第三个论点,并随身携带。在你的
错误字母/2
中,你将一个接一个地挑选单词,然后调用
错误字母/3
,传递你挑选的单词,如下所示:

mistake_letter(L1,L2):-
    word(W),
    mistake_letter(L1,L2,W).
当要更正的单词中的字母在所选单词的字母之前用完时,您需要更改基本大小写以执行某些操作。你所做的取决于你的作业:你可以回溯
错误字母([],[],[])。
,声明匹配
错误字母([],[],[])。
,在更正
错误字母([],[],[],[])后附上单词的尾部。
或做其他事情

您还需要一个简单的案例来说明更正的单词的第一个字母与您选择的单词的第一个字母匹配的情况:

mistake_letter([X|L1],[X|L2],[X|WT]):-
    mistake_letter(L1, L2, WT).

最后,您需要一个最重要的例子:当首字母不匹配时该怎么办。这可能是您的大部分作业:其余的只是样板递归。为了使其正确,您可能需要将
错误字母/3
更改为
错误字母/4
,以便能够计算匹配数,然后将其与原始单词中的字母数进行比较。这会让你放弃像
[w,o,r,l,d]
-->[h,e,l,l,o]这样的“更正”,因为只有20%的匹配字母。

非常感谢你,我一点也没有想到这一点。至于你提到的重要案例,我的大部分作业是制作一种字典来纠正给定的句子中的任何错误,但每个单词只错1个字母,因此我相信我不必计算匹配或错误的数量,因为它们总是最多1个。无论如何,谢谢你的回答。