Unbound scheme procedures when calling from Java

Per Bothner per@bothner.com
Tue Apr 1 16:29:00 GMT 2003


Chris Dean wrote:
>>>We are trying to call our own Scheme procedures from Java.  
> 
> 
> Another way to do it is to get a ModuleMethod and call that from Java.
> This will work no matter what the setting of module-static:

>         ModuleMethod test = (ModuleMethod) env.get( "test", null );
>         System.err.println( "test = " + test );
>         System.err.println( "result = " + test.apply0() );

Slightly better/cleaner might be to use Procedure:

   Procedure test = (Procedure) env.get( "test", null );
   test.apply0();

Though I think it unlikely that user-defined functions
will no longer be ModuleMethod, it is even less likely
that they will cease being Procecedures.  In any case,
using Procedure also works for builtin or halt-written
procedures.

You might also consider using 'eval' instead of 'get':

   Scheme scm = Scheme.getInstance();
   // or scm = new Scheme();
   Procedure test = (Procedure) scm.eval("test");

This is slower than using get (though it doesn't matter
unless its in an inner loop), but you don't have to
explicitly work with environments.
-- 
	--Per Bothner
per@bothner.com   http://per.bothner.com/




More information about the Kawa mailing list