Я новичок в OCaml и определили вложенные списки следующим образом:вложенные списки в OCaml
type 'a node = Empty | One of 'a | Many of 'a node list
Теперь я хочу, чтобы определить функцию обертывания, которая надстроена квадратные скобки первых членов порядка вложенного списка. Напр. wrap (Многие [one a; Many [c; d]; один b; один e;]) возвращает Many [Many a; Empty]; Многие [Многие [с, d]; Empty]; Многие [б; Empty]; Многие [е; Empty]]. Вот мой код такой же:
let rec wrap list = function
Empty -> []
| Many[x; y] -> Many [ Many[x; Empty]; wrap y;];;
Но я получаю сообщение об ошибке в последнем выражении: Это выражение имеет тип «узел, но выражение было ожидать от типа» список б. Пожалуйста помоги.
По-прежнему возникает ошибка после внесения изменений, которые вы предложили. На этот раз совпадение шаблонов не является исчерпывающим .. – user2352241
Это предупреждение, а не ошибка - ваш код может работать без исчерпывающего соответствия шаблону, но это не хороший стиль и не звуковое программирование. Это не является исчерпывающим, потому что вы не справляетесь с ситуацией «Один». Подумайте, как вы хотели бы это сделать. –
Хорошо, спасибо! – user2352241