[Rd] Contract Syntactic Sugar

ivo welch ivo.welch at anderson.ucla.edu
Mon Feb 4 22:53:02 CET 2013

## 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

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) )

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)?}


Ivo Welch (ivo.welch at gmail.com)

More information about the R-devel mailing list