On Dec 1, 2009, at 8:32 PM, Guillaume Yziquel wrote:
> Simon Urbanek a écrit :
>> You just pass it as value of the call. I suspect the reason it doesn't work
>> is in your code, not in the facility (note that the link above is useless
>> since the construction is mystery - if you were constructing it right, it
>> would work ;)).
>> Small example:
>> SEXP myEval(SEXP FN, SEXP first_arg) {
>> return eval(LCONS(FN, CONS(first_arg, R_NilValue)), R_GlobalEnv);
>> }
>> ... or reading R-ext:
>> "There are a series of small macros/functions to help construct pairlists
>> and language objects (whose internal structures just differ by SEXPTYPE.
>> Function CONS(u, v) is the basic building block: is constructs a pairlist
>> from u followed by v (which is a pairlist or R_NilValue). LCONS is a variant
>> that constructs a language object. Functions list1 to list4 construct a
>> pairlist from one to four items, andlang1 to lang4 do the same for a
>> language object (a function to call plus zero to three arguments). Function
>> elt and lastElt find the ith element and the last element of a pairlist, and
>> nthcdr returns a pointer to the nth position in the pairlist (whose CAR is
>> the nth item)."
>
> Reading R-exts,
>
> -1- I believe it would be a good idea to put an example with CONS and LCONS
> in section 5.11.
>
> -2- Building a LANGSXP list with tags from arguments needs invocations of
> CONS LCONS SET_TAG and install. While this is not exactly to my taste, using
> install is really not to my taste since it checks the symbol table and
> eventually creates a symbol. Isn't there a way to create a tag without using
> install over and over? A macro that simply sets the tag to whatever CHARSXP
> might be useful?
>
No, because you cannot use CHARSXP as a TAG. TAGs are always symbols.
Therefore, logically, you must register it first in (or obtain from) the symbol
table using install.
Cheers,
Simon
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel