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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.