LINUX.ORG.RU

Тупой вопрос по OCaml


0

0

Требуется написать две рекурсивно взамиосвязанные функции. Например так

let foo x = if ...cond1... then bar x else ...

let bar x = if ...cond2... then foo x else ...

Не могу найти как продекларировать функцию bar, чтобы при определении foo транслятор уже знал что такое bar

anonymous

Функции foo и bar обе должны иметь глобальную область видимости

Такое непроканает

let rec foo x =

let bar x = if ... cond2 ... then foo x else .... in

if ... cond1 ... then bar x else ...

anonymous
()
Ответ на: комментарий от Zulu

Не совсем то, что расчитывал увидеть. Есть одна тонкость - функции bar и foo объявлены в разных файлах. Более того функция bar генерируется автоматически ocamllex-ом.

anonymous
()
Ответ на: комментарий от Begemoth

Да, пардон.
Ну смысл не в этом, а в том что решается это так же как и в остальных случаях -- для объявления на одном уровне вложенности используется and.

Zulu ★★☆☆
()
Ответ на: комментарий от anonymous

Через функции второго порядка можно все это сделать. Пример

let foo bar_f x = if ...cond1... then bar_f x else ...

let rec bar x = if ...cond2... then foo bar x else ... 

Т.е. функция foo принимает функцию bar в качестве параметра.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.