2015-03-29 3 views
1

Может ли кто-нибудь объяснить синтаксис, используемый для когда у вас есть вложенные функции?Вложенные функции Ocaml

Например, у меня есть внешняя и внутренняя рекурсивная функция.

let rec func1 list = match list with 
[] -> [] 
|(head::tail) -> 
let rec func2 list2 = match list2 with 
... 
;; 

Я провел весь день, пытаясь понять это, и я получаю когда-либо утомительно «Синтаксическая ошибка».

+3

Вы можете представить полный пример? – ivg

+0

К сожалению, я не могу показать полный пример. Выше было всего лишь рекурсивное рекурсивно. Может быть, простой вопрос для экспертов OCaml - это то, как я могу вернуться к внешней функции. Итак, предположим, что у нас есть условное выражение во внутренней функции, и после оценки, где оно истинно или ложно, и выполните одно заявление, я хочу вернуться к func1 (см. Выше). Как бы я вырвался из внутреннего рекурсивного блока? – ButtahNBred

+0

Вы не должны задавать вопросы в комментариях. Слишком сложно следовать. Функция OCaml является выражением. Там нет движения или взлома, так как есть (в некотором смысле) на императивном языке. Вы должны показать какой-то код, чтобы получить более полезный ответ. –

ответ

3

Вы не указали достаточно кода, чтобы ошибка была очевидна.

Вот рабочий пример:

# let f x = 
     let g y = y * 5 in 
     g (x + 1);; 
val f : int -> int = <fun> 
# f 14;; 
- : int = 75 

Update

Что-то, что могло бы помочь, пока вы не привыкли к синтаксису OCaml является использование много дополнительных скобок:

let rec f y x = 
    match x with 
    | h :: t -> (
     let incr v = if h = y then 1 + v else v in 
     incr (f y t) 
    ) 
    | _ -> (
     0 
    ) 

Особенно сложно вложить один match внутри другого, не делая такого рода вещи. Это может быть ваша фактическая проблема, а не вложенные функции.

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