Skip to content

Help with lang4

6 messages · Abhijit Bera, Seth Falcon, Duncan Murdoch +1 more

#
On 10/29/09 7:00 AM, Abhijit Bera wrote:
If you take a look at the source code for those functions, something may 
suggest itself.  R function calls at the C level are composed like in 
lisp: a pair-list starting with the function cons'ed with the args.

+ seth
#
On 29/10/2009 10:38 AM, Abhijit Bera wrote:
They're in src/include/Rinlinedfuns.h.

Duncan Murdoch
#
On 10/29/09 7:38 AM, Abhijit Bera wrote:
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);

Reading Rinlinedfuns.h should help some.

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

            
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