Отсутствует определение дела в Миранде - PullRequest
2 голосов
/ 07 ноября 2011

Я получаю недостающее определение случая, когда звоню по этому номеру

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 Ответ

2 голосов
/ 07 ноября 2011

Отсутствие определения случая означает, что вы подходите к шаблону и не охватывает все случаи. Это происходит дважды в определении вашей функции check: вы сопоставляете второй параметр с шаблоном n:nx, но не с шаблоном [] (поэтому вы не рассматриваете случай, когда второй аргумент может быть пустой список). Точно так же вы сопоставляете четвертый аргумент с (l:ls, r:rs), не учитывая вероятность того, что любой из элементов пары может быть пустым списком.

Итак, причина ошибки заключается в том, что когда вы звоните check из readword, либо sNum пусто, либо один из списков в tape пуст.

...