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