[gambit-list] C Embedding question

Alex Ryu ryu.alex at gmail.com
Thu Jan 29 10:38:09 EST 2009


On Thu, Jan 29, 2009 at 6:54 AM, Marc Feeley <feeley at iro.umontreal.ca> wrote:
>
> On 29-Jan-09, at 1:44 AM, Alex Ryu wrote:
>
>> Hello
>> I would like to do something similar to the following within my C program:
>> *****************
>> char* condition = "(2 < 4) & (3 > 7");
>> int boole;
>> ...
>> boole = evaluate(condition);
>> *****************
>> where evaluate is a scheme function already written and compiled by
>> gsc.  Most of the documentation I have seen relates more to the
>> reversed situation - calling C functions from scheme.   I have taken a
>> look at the client example program in the tests directory, but it is
>> not clear to me exactly how the string is treated by scheme - ie, in
>> what form it is going to be, if that makes any sense.  Obviously I
>> would prefer it as a list of some sort, but I don't know if that's
>> possible.  I am using Linux and gcc 4, if that makes a difference.
>> Thanks for your time
>> Alex
>
> The example code in tests/client.c and tests/server.scm is very close to
> what you want.  One difference is that you want the function to return a
> boolean.  The other difference is that in your example you are using an
> infix expression.  Is this really what you want?  The code in
> tests/server.scm uses Scheme's normal prefix syntax.  If you really want
> infix then you could change the eval-string function in tests/server.scm to
> be
>
> (c-define (evaluate str) (char-string) bool "evaluate" "extern"
>  (catch-all-errors
>    (lambda () (eval (read-from-string (string-append "\\" str ";"))))))
>
> This will use Gambit's SIX parser (Scheme infix syntax extension).
>
> This is untested code.
>
> Marc
>
>
Thank you for the advice and sorry for being obtuse.  Do I not need a
write-to-string before the eval?



More information about the Gambit-list mailing list