Re: MLPutRealList vs. sequence of MLPutDouble
- To: mathgroup at smc.vnet.net
- Subject: [mg61737] Re: MLPutRealList vs. sequence of MLPutDouble
- From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
- Date: Thu, 27 Oct 2005 05:54:31 -0400 (EDT)
- Organization: Uni Leipzig
- References: <djq618$jb5$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
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
|
:::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
- Follow-Ups:
- Re: Re: MLPutRealList vs. sequence of MLPutDouble
- From: "Reese Jones" <rjones@sandia.gov>
- Re: Re: MLPutRealList vs. sequence of MLPutDouble