2014-01-19 3 views
6

У меня есть простая функция:OCaml Карринг/Несколько аргументов

let rec ap x y = if x < 10 then 12 else ap((x-1) (y));; 

но ошибку я продолжаю получать это:

Error: This expression has type int 
    This is not a function; it cannot be applied. 

Я застрял на этом в течение 2-х часов в настоящее время, я не может понять, почему это не работает?

Также я просто упростил функцию, потому что в моем фактическом коде ocaml проблема сводится к этому. Я не уверен, что это связано с каррированием, но может ли кто-нибудь объяснить, почему это происходит?

+1

Фактическое сообщение об ошибке указывает точное местоположение проблемы, которая является '(x-1)'. –

ответ

6

Компилятор OCaml считает, что вы применяете (x-1) к (y) в ((x-1) (y)). Вот почему вы получаете ошибку: «Это выражение имеет тип int. Это не функция, она не может применяться».

На самом деле вам нужно написать ap (x-1) (y), потому что ap принимает два аргумента.

Помните, что в OCaml (или других языках Hindley-Milner: SML, Haskell) скобки не нужны для применения функций и служат другой цели, в отличие от C-подобных языков.

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