[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
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.welch at gmail.com)
More information about the R-devel
mailing list