[plt-scheme] (typeof obj)
On Jun 11, 2007, at 9:27 AM, Shriram Krishnamurthi wrote:
> So you don't really want the type at all: you just want the run-time
> tag on a value. (That's what *you* want -- is that what the OP
> wants?) I don't find that very useful. What you want you can write
> just as well in Scheme:
>
> (define (run-time-tag-of v)
> (cond
> [(number? v) 'number]
> [(string? v) 'string]
> ...
> [(procedure? v) 'procedure]))
When I originally asked the question I wanted write something like:
(lambda (object-from-library)
(printf "What is it? Answer: ~a ~a" object-from-library (run-time-
type object-from-library))
...
Many languages have something like `run-time-type' so I thought there
might be a similar thing in PLT. In python it is `type(obj)' and C#
it is `obj.GetType()'. And from what Jos Koot said in a previous
post, the equivalent in PLT would be a procedure that, given any
Scheme_Object, returns the Scheme_Type. I'm assuming that
Scheme_Type is a Scheme_Object. Is it? In Python and C#, the type
objects are objects.
The value of this to me is more about debugging, and exploring and
understanding the system, and I wasn't thinking about whether a `run-
time-type' procedure fit in well with good type theory. Maybe it
doesn't, but I don't see a problem.
The problem I have with your example above is that it won't work as
new types are added.
I don't see a problem with structs, because I imagine type objects
for different structs would be different type objects and not eq?.
But type objects would probably have a property `name' that was a
symbol, which could be eq? to the names of other type objects.
Rob