Lo, on Sunday, January 13, Erik Steffl did write: > type is a propert of variable.
Not exclusively. Two counter-examples, one in C, and one in Scheme. C: int x; x = "foo"; You'll get a type error here at compile time, for obvious reasons. Question: how can this be a type error if only variables have types? You need to realize that "foo" has type (const) char * before you can determine that you can't assign it to an int. Scheme: (define f (lambda (x) (cond ((boolean? x) (if x 42 23)) ((symbol? x) (string-length (symbol->string x))) ((char? x) (char->integer x)) ((vector? x) (vector-length x)) ((procedure? x) (x 42)) ((list? x) (length x)) ((pair? x) (car x)) ((number? x) (- x)) ((string? x) (string-length x)) ((port? x) (read x)) ((promise? x) (force x))))) This defines a function f with one argument, x. What's x's type? The function is equally well-defined for an argument of just about any value supported by R5RS, the current spec. (For that matter, what's the return type of f? Answer: it's usually a number, but it depends on x!) In languages like Scheme, Lisp, Python, and Smalltalk, almost all typechecking is deferred to run-time. Therefore, it is meaningless to describe the type of a variable; in these languages, types only apply to values. Richard