Re: Re: MLPutRealList vs. sequence of MLPutDouble
- To: mathgroup at smc.vnet.net
- Subject: [mg61750] Re: [mg61737] Re: MLPutRealList vs. sequence of MLPutDouble
- From: "Reese Jones" <rjones at sandia.gov>
- Date: Fri, 28 Oct 2005 03:25:28 -0400 (EDT)
- References: <djq618$jb5$1@smc.vnet.net> <200510270954.FAA20752@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
...perhaps I don't understand but what you are saying
is exactly what I would expect:
MLPutFunction(link, SCRIPT_NAME, 1);
MLPutRealList(link,x,NUM_VARS);
calls in Mathematica SCRIPT_NAME[{x0,x1}]
(where NUM_VARS = 2, SCRIPT_NAME = "test" and test is
test[y_List] := y[[2]]; )
except I get :
Error detected by MathLink: MLGet out of
sequence.
are you saying the function in Mathematica needs
to know the length of the list a priori? that doesn't
seem right
Reese
Jens-Peer Kuska wrote:
>Hi,
>
>because
>
>MLPutFunction(link, SCRIPT_NAME, 1);
>MLPutRealList(link,x,NUM_VARS);
>
>call in Mathematica SCRIPT_NAME[{x0,x1}]
>
>and
>
>MLPutFunction(link, SCRIPT_NAME, NUM_VARS);
>for ( i=0; i<NUM_VARS; i++ ) { MLPutDouble(link,
>x[i]); }
>
>call in Mathematica
>
>SCRIPT_NAME[x0,x1]
>
>Regards
> Jens
>
>"Reese Jones" <rjones at sandia.gov> schrieb im
>Newsbeitrag news:djq618$jb5$1 at smc.vnet.net...
>| Hi
>| I am a new subscriber to the list and I have a
>seemingly
>| simple (read: stupid) question: why does this
>code work
>| when I send a sequence of reals and not work
>when I send
>| a list?
>|
>| <SNIP>
>| /* Now initialize and call Mathematica */
>| env = MLInitialize(NULL);
>| if (env == NULL) return 1;
>|
>| link = MLOpen(num_strings, Mparams);
>| if (link == NULL) return 1;
>|
>| MLActivate(link);
>|
>| /* Load the compare function definition
>into Mathematica */
>| MLPutFunction(link, "EnterTextPacket",
>1);
>| MLPutString(link, "<<" SCRIPT_NAME ".m");
>| MLEndPacket(link);
>|
>| /* call the compare function with x[1],
>x[2]*/
>| MLPutFunction(link, "EvaluatePacket", 1);
>| #if REAL_LIST
>| MLPutFunction(link, SCRIPT_NAME, 1);
>| MLPutRealList(link,x,NUM_VARS);
>| #else
>| MLPutFunction(link, SCRIPT_NAME,
>NUM_VARS);
>| for ( i=0; i<NUM_VARS; i++ ) {
>MLPutDouble(link, x[i]); }
>| #endif
>| MLEndPacket(link);
>|
>| /* skip any packets before the first
>ReturnPacket
>| and then get the result from the
>calculation */
>| int pkt;
>| while( (pkt = MLNextPacket(link), pkt) &&
>pkt != RETURNPKT) {
>| MLNewPacket(link);
>| if (MLError(link)) {
>| fprintf( stderr, "2 Error
>detected by MathLink:
>| %s.\n",
>| MLErrorMessage(link)); }
>| }
>|
>| double fn_val=0.0;
>| MLGetDouble(link, &fn_val);
>| if (MLError(link)) {
>| fprintf( stderr, "3 Error
>detected by MathLink: %s.\n",
>| MLErrorMessage(link)); }
>| MLClose(link);
>| MLDeinitialize(env);
>| <SNIP>
>|
>| this is the Mathematica script that is called
>(it takes a list and
>| returns a single value) :
>|
>| (* test[x_Real,x2_Real] := x; *)
>| test[y_List] := y[[2]];
>|
>|
>| this is the output:
>|
>| Error detected by MathLink: MLGet out of
>sequence.
>| test : { 0.616000, 29.000000} -> f: 0.000000
>|
>|
>| thanks
>| Reese
>|
>| --
>|
>:::::::::::::::::::::::::::::::::::::::::::::::::::::
>| Reese Jones
>| Sandia National Laboratories, MS 9042, P.O. Box
>0969
>| Livermore, CA 94551
>|
>| phone: (925) 294-4744 or (800) 4SANDIA x4-4744
>| fax: (925) 294-1459
>| e-mail: rjones at sandia.gov
>|
>:::::::::::::::::::::::::::::::::::::::::::::::::::::
>|
>|
>
>
>
>
>
>
--
:::::::::::::::::::::::::::::::::::::::::::::::::::::
Reese Jones
Sandia National Laboratories, MS 9042, P.O. Box 0969
Livermore, CA 94551
phone: (925) 294-4744 or (800) 4SANDIA x4-4744
fax: (925) 294-1459
e-mail: rjones at sandia.gov
:::::::::::::::::::::::::::::::::::::::::::::::::::::
- References:
- Re: MLPutRealList vs. sequence of MLPutDouble
- From: "Jens-Peer Kuska" <kuska@informatik.uni-leipzig.de>
- Re: MLPutRealList vs. sequence of MLPutDouble