米兰达缺少案例定义

时间:2011-11-06 21:22:23

标签: functional-programming miranda

当我打电话给

时,我得到了一个缺少的案例定义
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

1 个答案:

答案 0 :(得分:2)

缺少案例定义意味着您是模式匹配,并未涵盖所有案例。这在您的check函数的定义中会发生两次:您将第二个参数与模式n:nx匹配,但不会与模式[]匹配(因此您不会覆盖案例第二个参数可能是空列表)。类似地,您将第四个参数与(l:ls, r:rs)匹配,而不是考虑该对的元素中任何一个可能是空列表的可能性。

因此导致错误的原因是,当您从check致电readwordsNum为空或tape中的某个列表为空。