R : Copyright 1999, The R Development Core Team
Version 0.90.0 Under development (unstable) (October 22, 1999)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type	"?license" or "?licence" for distribution details.

R is a collaborative project with many contributors.
Type	"?contributors" for a list.

Type	"demo()" for some demos, "help()" for on-line help, or
    	"help.start()" for a HTML browser interface to help.
Type	"q()" to quit R.

> ### Using Method Dispatch on "mode" etc :
> 
> abc <- function(x, ...) {
+     if (is.null(class(x))) class(x) <- data.class(x)
+     cat("abc: Before dispatching; x="); str(x)
+     UseMethod("abc", x,...) ## UseMethod("abc") (as in S) fails
+ }
> 
> abc.default <- function(x, ...) sys.call()
> 
> "abc.(" <- function(x)
+     cat("'(' method of abc:", deparse(sys.call(sys.parent())),"\n")
> abc.expression <- function(x)
+     cat("'expression' method of abc:", deparse(sys.call(sys.parent())),"\n")
> 
> abc(1)
abc: Before dispatching; x=Class 'numeric'  num 1
abc.default(1)
> e0 <- expression((x))
> e1 <- expression(sin(x))
> abc(e0)
abc: Before dispatching; x=Class 'expression'   expression((x))
'expression' method of abc: abc.expression(e0) 
> abc(e1)
abc: Before dispatching; x=Class 'expression'   expression(sin(x))
'expression' method of abc: abc.expression(e1) 
> abc(e0[[1]])
abc: Before dispatching; x=Class '('  language, mode "(": ( x
'(' method of abc: abc.((e0[[1]]) 
> abc(e1[[1]])
abc: Before dispatching; x=Class 'call'  language sin(x)
abc.default(e1[[1]])
>