Я пишу программу, которая анализирует скрипты, написанные на каком-то искусственном языке, и выполняет некоторые вычисления с использованием этого скрипта. Этот язык имеет особую конструкцию, которая используется для вызова внешних функций OCaml типа 'a -> bool
. Итак, в середине языка мы можем иметь
blah blah function (foo 45) blah blah
и я бы хотел, чтобы синтаксический анализатор использовал конструктор, такой как
OCamlFunction of ('a -> bool) * 'a
для разбора этого бита как значения
OCamlFunction (foo,45)
где 'foo' - это функция, которую пользователь должен будет предоставить в отдельном файле .ml и которую синтаксический анализатор не знает заранее; только имя файла OCaml, в котором определено «foo», передается анализатору во время выполнения. Итак, мне нужно определить функцию типа string -> ('a->bool)
, которая принимает имя некоторой функции и возвращает эту функцию.
Мои вопросы:
(1) Я предполагаю, что для динамической загрузки кода следует использовать DynLink.loadfile . Это путь?
(2) Как я могу получить доступ к функции "foo", зная ее идентификатор? (Это приведет меня к camlp5?)