2016-02-06 2 views
2

Я работаю в OCaml, окружающая среда, которую я использую, это Eclipe Mars. И когда я пытаюсь использовать List.iter [1.;3.;2.;-7.;4.;5.] ~f:(fun x -> update rsum x);;, он дает ошибку, говоря, что Error: The function applied to this argument has type 'a list -> unit This argument cannot be applied with label ~f# Дело в том, что это пример из книги, которая отлично работает для них, но я постоянно получаю эту ошибку, когда пытаюсь использовать ~f:. Может кто-нибудь объяснить мне, почему это не работает? А также это помогло бы, если бы я знал, как сделать эту работу.label ~ f в OCaml

ответ

3

Тильда представляет функцию, известную как labelled argument. Стандартная библиотека OCaml имеет список модулей, где функции объявляются без помеченных аргументов и модулей ListLabels, которые их используют.

Моя гипотеза заключается в том, что вы читаете Real World OCaml, когда авторы используют другую библиотеку standard под названием Core. В этой библиотеке есть собственный модуль List, и эта библиотека многократно использует помеченные аргументы. Итак, вы, вероятно, забыли загрузить эту библиотеку в верхний уровень. Вероятно, вам нужно объяснить Eclispe, как загрузить нужную библиотеку или написать module List=ListLabels в верхней части исходного файла.

+0

Единственное, что нужно отметить, это то, что Core не является другой стандартной библиотекой, это надпись поверх * стандартной библиотеки. – antron

+0

Есть ли способ использовать Core с OcaIDE и Eclipse? – measuretheory

1

Стандартный модуль List не поддерживает помеченные аргументы. Стандартный модуль ListLabels делает поддерживает помеченные аргументы.

# List.iter ~f: (fun x -> Printf.printf "%d\n" x) [1; 2; 3];; 
Error: The function applied to this argument has type 'a list -> unit 
This argument cannot be applied with label ~f 

# ListLabels.iter ~f: (fun x -> Printf.printf "%d\n" x) [1; 2; 3];; 
1 
2 
3 
- : unit =() 

Если вы учитесь из учебника или книги, вы должны быть уверены, что вы используете один и тот же модуль, как и они.

Смежные вопросы