Отсутствует определение дела в Миранде
Я получаю недостающее определение случая, когда звоню
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 ответ
Отсутствие определения случая означает, что вы подходите к шаблону и не охватывает все случаи. Это происходит дважды в определении вашего check
функция: вы сопоставляете второй параметр с шаблоном n:nx
, но не против шаблона []
(так что вы не рассматриваете случай, когда вторым аргументом может быть пустой список). Точно так же вы соответствуете четвертый аргумент против (l:ls, r:rs)
без учета возможности того, что любой из элементов пары может быть пустым списком.
Так что происходит, чтобы вызвать ошибку в том, что когда вы звоните check
от readword
или sNum
пуст или один из списков в tape
пустой.