Сортировка списка в OCaml - PullRequest
4 голосов
/ 03 мая 2010

Вот код для сортировки любого заданного списка:

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;;

[Источник: Код

Тем не менее, я получаю Unbound ошибку:

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 ни предопределенных ни в коде

Ответы [ 4 ]

2 голосов
/ 03 мая 2010

Ваш код кажется правильным и компилируется для меня:

    Objective Caml version 3.11.1

# let rec sort lst = ...

val sort : 'a list -> 'a list = <fun>
val insert : 'a -> 'a list -> 'a list = <fun>

# sort [ 1 ; 3 ; 9 ; 2 ; 5 ; 4; 4; 8 ; 4 ] ;;
- : int list = [1; 2; 3; 4; 4; 4; 5; 8; 9]
1 голос
/ 30 апреля 2012

Символ «|» является символом горизонтальной линии, он не является символом l, а символ -> является символом минус и большим символом. Я думаю, что вы скопировали и вставили фрагмент кода на веб-сайте Inria. Пожалуйста, проверьте и перепишите специальные символы. Я проверил это, и он хорошо работает.

1 голос
/ 04 мая 2010

В дополнение к сказанному Паскалем, тип списка определяется как:

type 'a list = [] | :: of 'a * 'a list

и вот что вы соответствуете вашему списку lst против.

0 голосов
/ 08 марта 2013

Голова и хвост не должны быть определены.Они совпадают с «списком», который вы даете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...