Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

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
:::::::::::::::::::::::::::::::::::::::::::::::::::::



  • Prev by Date: Re: Why aren't nested groups? XML again.
  • Next by Date: Re: Re: Integrate vs Nintegrate for impulsive functions
  • Previous by thread: Re: MLPutRealList vs. sequence of MLPutDouble
  • Next by thread: Anomaly or expected behaviour?