Вот код на сортировку любого заданного списка:Сортировка списка в OCaml
let rec sort lst =
match lst with
[] -> []
| head :: tail -> insert head (sort tail)
and insert elt lst =
match lst with
[] -> [elt]
| head :: tail -> if elt <= head then elt :: lst else head :: insert elt tail;;
[Источник: Code
Однако я получаю несвязанный ошибка:
Unbound value tail
# let rec sort lst =
match lst with
[] -> []
| head :: tail -> insert head (sort tail)
and insert elt lst =
match lst with
[] -> [elt]
| head :: tail -> if elt <= head then elt :: lst else head :: insert elt tail;;
Characters 28-29:
| head :: tail -> if elt <= head then elt :: lst else head :: insert elt tail;;
^
Error: Syntax error
Может кто-нибудь, пожалуйста, помогите мне понять проблему здесь? Я не нашел head
или tail
быть предопределены в любом месте, ни в коде
Но я не понял, что означает шаблон «head :: tail». Не могли бы вы объяснить? –
Список типов - это встроенный тип, имеющий два конструктора. Один из них - пустой список '[]'. Другая - ячейка cons '::'. Написанные вами сопоставления шаблонов ничем не отличаются от совпадений шаблонов, которые вы могли бы написать для типов, которые вы определили бы сами, за исключением того, что они используют встроенный 0-арный конструктор [] и binary ::. –
В шаблоне 'head :: tail' переменная' head' представляет первый элемент списка, а 'tail' - остальную часть списка. –