## the following is a dream: add some sugar syntax to allow for
contracts with teeth (in and out checking)

> is.positive <- function(x) (all(x>0))

> exponentiate <- function( x ::is.data.frame , exponent ::is.numeric 
> is.positive)  :: is.vector is.numeric  {
    x$base :: is.positive        ## error also if base does not exist
in x; may need some special IQ
    x$base^exponent
}

should be self-explanatory.  anything that has '::' means "run what is
before through all the functions after and barf if it is not true".
any other operator rather than :: or other syntax would be as
good---this is just illustratory.  in the end, this code should be
viewed by R as the same as

> exponentiate <- function( x, exponent ) {
    stopifnot( is.data.frame(x) )
    stopifnot( is.numeric(exponent) )
    stopifnot( is.positive(exponent) )
    stopifnot( exists("base", "x") )
    stopifnot( is.positive( x$base ) )
    return.value <- x$base^exponent
    stopifnot( is.vector(return.value) )
    stopifnot( is.numeric(return.value) )
    return.value
 }

is this a feasible summer project for a student with a prospect of
inclusion of the completed code in the R core language itself if I pay
for the development time?  {or does better syntax already exist and I
am just ignorant (which I often am)?}

regards,

/iaw
----
Ivo Welch (ivo.we...@gmail.com)

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

Reply via email to