Как передать значение "по ссылке" функции 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), но это кажется неоптимальным. Есть ли способ получить адрес числа с плавающей запятой в схеме и передать его функции (и такой, чтобы она была правильной)?

0 ответов

Другие вопросы по тегам