Вы изменили порядок заголовка и хвоста списка. Вы определили CONS of 'element * 'element mylist
, поэтому его следует использовать как CONS(head, tail)
. Вы используете его как CONS(tail, head)
в reverse
. Из-за этого два предложения указывают на противоречивые типы для reverse
, и вы получаете ошибку. Обратного порядка аргументов недостаточно, чтобы превратить CONS
в append
функцию.
Ваша обратная функция должна иметь форму с предложениями, которые следуют за конструкторами для типа данных. Одна из возможностей такова:
fun reverse NIL = NIL
| reverse CONS(x, xs) = (* implementation for CONS *)
Вероятно, немного проще добавить второй аргумент, который вы используете для получения результата. Это должно выглядеть так:
fun reverse'(NIL, result) = result
| reverse'(CONS(x,xs), result) = (* implementation for CONS *)
и называться как reverse'(lst, NIL)
.
Я пропустил реализацию предложений CONS
, поскольку вы пометили вопрос как домашнее задание.