当我打电话给
时,我得到了一个缺少的案例定义check c (n:nx) state (l:ls,r:rs)
=true,if((isprefix state c)&(r=n))
=false, otherwise
我已经检查了这个,无论我发送什么,它都可以自行运行。
这就是我从中调用的地方(警告:现在写的有点糟糕):
readword input state tape
=output tape, if (((haltcheck sWord sNum state tape)=true)&(isprefix " halt" rline))
=doinst rline state tape , if ((check sWord sNum state tape)=true)
=readword tail state tape, otherwise
where
theline = dropwhile notit input
start = dropwhile isspace theline
sWord = takewhile letter start
ends = dropwhile notspace start
distart = dropwhile isspace ends
sNum = takewhile notspace distart
tail = dropwhile notspace distart
rline = takewhile notit tail
答案 0 :(得分:2)
缺少案例定义意味着您是模式匹配,并未涵盖所有案例。这在您的check
函数的定义中会发生两次:您将第二个参数与模式n:nx
匹配,但不会与模式[]
匹配(因此您不会覆盖案例第二个参数可能是空列表)。类似地,您将第四个参数与(l:ls, r:rs)
匹配,而不是考虑该对的元素中任何一个可能是空列表的可能性。
因此导致错误的原因是,当您从check
致电readword
时sNum
为空或tape
中的某个列表为空。