Как передать значение "по ссылке" функции C в Chez Scheme
У меня есть следующая функция в C:
int bisection(double a, double b, double atol, double rtol, double (*f)(double), double *x, double *fx);
Последние два аргумента - то, где результат функции фактически возвращен, тогда как int
результат для индикации состояния, да C-стиль...
Итак, на стороне схемы я определяю внешнюю процедуру:
(define c-bisection
(foreign-procedure
"bisection"
(double double double double int (* double) (* double))
int))
Замечания: int
в списке аргументов указатель на функцию в C. Может быть, есть лучший способ сделать это, но простой int
на самом деле работает.
Теперь, как передать два последних параметра (x
а также fx
в С функции)?
Я не могу просто сделать:
(let* ((x 0.0)
(fx 0.0)
(result (c-bisection a b atol rtol f-callback x fx)))
...)
(как я надеялся, Схема будет переводить переменные x
а также fx
на их адреса)
Единственный способ, которым я могу думать, - это вручную выделить память (foreign-alloc
) за x
а также fx
а потом освободить (foreign-free
), но это кажется неоптимальным. Есть ли способ получить адрес числа с плавающей запятой в схеме и передать его функции (и такой, чтобы она была правильной)?