* calling scheme procedure from java and passing a list as argument...
@ 2015-09-17 13:09 Damien Mattei
2015-09-17 18:54 ` Per Bothner
0 siblings, 1 reply; 4+ messages in thread
From: Damien Mattei @ 2015-09-17 13:09 UTC (permalink / raw)
To: kawa
hello again,
suppose i have a java code (the case is running on tomcat web server but
that's make no difference)
and i want to pass a list to a scheme routine, i have two questions:
-is there a way to call a scheme procedure in kawa,i suppose the answer
is yes but how?
( i know i can do it making a method in a kawa class definition and call
the method)
- but how can i pass a list as parameter, what is the equivalent of
scheme list in java or kawa??
I would greatly appre"ciate a little example...
thanks
Damien
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: calling scheme procedure from java and passing a list as argument...
2015-09-17 13:09 calling scheme procedure from java and passing a list as argument Damien Mattei
@ 2015-09-17 18:54 ` Per Bothner
2015-09-18 9:53 ` Damien Mattei
0 siblings, 1 reply; 4+ messages in thread
From: Per Bothner @ 2015-09-17 18:54 UTC (permalink / raw)
To: Damien Mattei, kawa
On 09/17/2015 06:09 AM, Damien Mattei wrote:
> hello again,
> suppose i have a java code (the case is running on tomcat web server but
> that's make no difference)
> and i want to pass a list to a scheme routine, i have two questions:
> -is there a way to call a scheme procedure in kawa,i suppose the answer
> is yes but how?
> ( i know i can do it making a method in a kawa class definition and call
> the method)
This page talks about *evaluating* Scheme from Java:
http://www.gnu.org/software/kawa/Evaluating-Scheme-expressions-from-Java.html
If you have a Scheme Proecdure object you can call by using one of the
apply methods. For example:
Object[] args = {x, y};
Object result = myProc.applyN(args);
or:
Object result = myProc.apply2(x, y);
> - but how can i pass a list as parameter, what is the equivalent of
> scheme list in java or kawa??
> I would greatly appre"ciate a little example...
To create a list you can use one of the static methods in gnu..lists.LList,
like makeList or list1 ... list4.
It's usually best to do as much as you can in Scheme: It is easier (and
better documented with a more stable API) calling Java from Scheme
than calling Scheme from Java.
--
--Per Bothner
per@bothner.com http://per.bothner.com/
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: calling scheme procedure from java and passing a list as argument...
2015-09-17 18:54 ` Per Bothner
@ 2015-09-18 9:53 ` Damien Mattei
2015-09-18 13:51 ` Damien Mattei
0 siblings, 1 reply; 4+ messages in thread
From: Damien Mattei @ 2015-09-18 9:53 UTC (permalink / raw)
To: Per Bothner, kawa
Le 17/09/2015 20:54, Per Bothner a écrit :
>
>
> On 09/17/2015 06:09 AM, Damien Mattei wrote:
>> hello again,
>> suppose i have a java code (the case is running on tomcat web server but
>> that's make no difference)
>> and i want to pass a list to a scheme routine, i have two questions:
>> -is there a way to call a scheme procedure in kawa,i suppose the answer
>> is yes but how?
>> ( i know i can do it making a method in a kawa class definition and call
>> the method)
>
> This page talks about *evaluating* Scheme from Java:
>
> http://www.gnu.org/software/kawa/Evaluating-Scheme-expressions-from-Java.html
>
>
> If you have a Scheme Proecdure object you can call by using one of the
> apply methods. For example:
>
> Object[] args = {x, y};
> Object result = myProc.applyN(args);
> or:
> Object result = myProc.apply2(x, y);
>
>> - but how can i pass a list as parameter, what is the equivalent of
>> scheme list in java or kawa??
>> I would greatly appre"ciate a little example...
>
> To create a list you can use one of the static methods in
> gnu..lists.LList,
> like makeList or list1 ... list4.
>
> It's usually best to do as much as you can in Scheme: It is easier (and
> better documented with a more stable API) calling Java from Scheme
> than calling Scheme from Java.
unfortunalely this is a java project including scheme,not the reverse,
i tried to use list2 in this example but it complains that
gnu.lists.LList is not a pair,
in scheme a list is a pair.
i have this error:
Exception in thread "main" Argument #1 '(. #<not a pair>)' to 'car' has
wrong type (gnu.lists.LList) (gnu.lists.LList cannot be cast to
gnu.lists.Pair)
at Vector2D.plus(Vector2D.scm:28)
at helloworld.main(helloworld.java:30)
Caused by: java.lang.ClassCastException: gnu.lists.LList cannot be cast
to gnu.lists.Pair
... 2 more
when i try to run this code:
LList glst = new LList();
glst.list2(2,3);
Object result = vec.plus(glst);
on this method definition in Vector2D class:
((plus L) ::int
(+ (car L) (cadr L)))
this is of course for testing before doing serious work...
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: calling scheme procedure from java and passing a list as argument...
2015-09-18 9:53 ` Damien Mattei
@ 2015-09-18 13:51 ` Damien Mattei
0 siblings, 0 replies; 4+ messages in thread
From: Damien Mattei @ 2015-09-18 13:51 UTC (permalink / raw)
To: kawa
finally i understand my error,result of many years without coding in java...
here is the solution:
LList glst = new LList();
//glst = glst.list2(2,3); // works also
glst = LList.list2(2,3);
System.out.println("glst : "+glst);
Object result0 = vec.plus(glst);
System.out.println("result0 :"+result0);
Pair pair = new Pair(2, LList.Empty);
Pair pair2 = new Pair(3, pair);
LList glst2 = new LList();
glst2 = pair2;
System.out.println("glst2 : "+glst2);
Object result = vec.plus(glst2);
System.out.println("result : "+result);
and the result:
glst : (2 3)
result0 :5
glst2 : (3 2)
result : 5
Le 18/09/2015 11:52, Damien Mattei a écrit :
>
> Le 17/09/2015 20:54, Per Bothner a écrit :
>>
>> On 09/17/2015 06:09 AM, Damien Mattei wrote:
>>> hello again,
>>> suppose i have a java code (the case is running on tomcat web server but
>>> that's make no difference)
>>> and i want to pass a list to a scheme routine, i have two questions:
>>> -is there a way to call a scheme procedure in kawa,i suppose the answer
>>> is yes but how?
>>> ( i know i can do it making a method in a kawa class definition and call
>>> the method)
>> This page talks about *evaluating* Scheme from Java:
>>
>> http://www.gnu.org/software/kawa/Evaluating-Scheme-expressions-from-Java.html
>>
>>
>> If you have a Scheme Proecdure object you can call by using one of the
>> apply methods. For example:
>>
>> Object[] args = {x, y};
>> Object result = myProc.applyN(args);
>> or:
>> Object result = myProc.apply2(x, y);
>>
>>> - but how can i pass a list as parameter, what is the equivalent of
>>> scheme list in java or kawa??
>>> I would greatly appre"ciate a little example...
>> To create a list you can use one of the static methods in
>> gnu..lists.LList,
>> like makeList or list1 ... list4.
>>
>> It's usually best to do as much as you can in Scheme: It is easier (and
>> better documented with a more stable API) calling Java from Scheme
>> than calling Scheme from Java.
> unfortunalely this is a java project including scheme,not the reverse,
> i tried to use list2 in this example but it complains that
> gnu.lists.LList is not a pair,
> in scheme a list is a pair.
> i have this error:
> Exception in thread "main" Argument #1 '(. #<not a pair>)' to 'car' has
> wrong type (gnu.lists.LList) (gnu.lists.LList cannot be cast to
> gnu.lists.Pair)
> at Vector2D.plus(Vector2D.scm:28)
> at helloworld.main(helloworld.java:30)
> Caused by: java.lang.ClassCastException: gnu.lists.LList cannot be cast
> to gnu.lists.Pair
> ... 2 more
> when i try to run this code:
>
> LList glst = new LList();
> glst.list2(2,3);
> Object result = vec.plus(glst);
>
> on this method definition in Vector2D class:
> ((plus L) ::int
> (+ (car L) (cadr L)))
>
> this is of course for testing before doing serious work...
>
>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-09-18 13:51 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-17 13:09 calling scheme procedure from java and passing a list as argument Damien Mattei
2015-09-17 18:54 ` Per Bothner
2015-09-18 9:53 ` Damien Mattei
2015-09-18 13:51 ` Damien Mattei
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).