1

当我打电话给这个时,我得到了一个丢失的案例定义

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
4

1 回答 1

1

缺少案例定义意味着您正在进行模式匹配并且您没有涵盖所有案例。这在函数的定义中发生了两次check:您将第二个参数与 pattern 匹配n:nx,但不与pattern 匹配[](因此您没有涵盖第二个参数可能是空列表的情况)。同样,您将第四个参数与 匹配(l:ls, r:rs),而不考虑这对元素中的任何一个元素可能是空列表的可能性。

因此,导致错误的原因是当您checkreadword其中一个sNum为空或其中一个列表tape为空时调用。

于 2011-11-06T21:31:00.730 回答