On Oct 29, 2009, at 13:56 , Seth Falcon wrote:

On 10/29/09 7:38 AM, Abhijit Bera wrote:
Can't find the source to Rf_lang* series of functions. :|

But I'm thinking it should be like this correct me if I'm wrong:

PROTECT(e=lang4(install("myfunction"),arg1,arg2,arg3);
PROTECT(SETCAR(CDR(e),portConstraints));
PROTECT(portVal=R_tryEval(e,R_GlobalEnv, NULL));

Perhaps I'm misunderstanding your goal, but I do not think this is correct.

After this call:

   > PROTECT(e=lang4(install("myfunction"),arg1,arg2,arg3);

e can be visualized as:

          (myfunction (arg1 (arg2 (arg3 nil))))

If you want to end up with:

          (myfunction (arg1 (arg2 (arg3 (arg4 nil)))))

Then you either will want to build up the pair list from scratch or you could use some of the helpers, e.g. (all untested),

          SEXP last = lastElt(e);
          SEXP arg4Elt = lang1(arg4);
          SETCDR(last, arg4Elt);


In general, I'd avoid SETCDR -- why not use CONS/LCONS? That is the generic way to do this (I'd suggest some reading about the fundamentals of it) -- langX/listX are just convenience macros (although not really macros ..).

Cheers,
Simon

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to