[Rd] Help with lang4
Simon Urbanek
simon.urbanek at r-project.org
Thu Oct 29 19:47:45 CET 2009
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
More information about the R-devel
mailing list