Well, I was wrong, class-direct-supers takes a class, not an instance,
so the function I wanted is possible.
In include it here, along with a mysterious transcript, which I think
might reveal a bug in the STk interpreter.
When I (load "isa.scm") the first time, is-a? gives the wrong answer,
but if I load it again, it give the correct answer.  Can anyone
explain this as an error in my code?
****************************************************************
isa.scm
****************************************************************
(define (is-a? class obj)
  (define (do-is-a? obj-class)
    (cond
     ((eq? class obj-class) #t)
     (else
      (let loop ((supers (class-direct-supers obj-class)))
           (if (null? supers)
               #f
             (or (do-is-a? (car supers))
                 (loop (cdr supers))))))))
  (do-is-a? (class-of obj)))
(define-class <a> ()
  ())
(define-class <b> ()
  ())
(define-class <x> (<a> <b>)
  ())
(define a (make <a>))
(define b (make <b>))
(define x (make <x>))
(define (test-is-a)
  (and
   (eq? (is-a? <x> x) #t)
   (eq? (is-a? <a> x) #t)
   (eq? (is-a? <b> x) #t)
   (eq? (is-a? <x> a) #f)
   (eq? (is-a? <a> a) #t)
   (eq? (is-a? <b> a) #f)
   (eq? (is-a? <x> b) #f)
   (eq? (is-a? <a> b) #f)
   (eq? (is-a? <b> b) #t)
   (eq? (is-a? (class-of 4.5) 4) #t)
   (eq? (is-a? (class-of 4) 4.5) #f)
   ))
****************************************************************
Snow transcript
****************************************************************
bash$ snow
Welcome to the STk interpreter version 3.0b1 [Linux-1.X-ix86]
Copyright (C) 1993,1994,1995 Erick Gallesio - I3S - CNRS / ESSI
<eg_at_unice.fr>
STk> (load "isa.scm")
#[undefined]
STk> a
#[<a> #p8056c60]
STk> x
#[<x> #p8057254]
STk> (is-a? <a> x)
#f
STk> (is-a? <a> x)
#f
STk> (is-a? <a> x)
#f
STk> (load "isa.scm")
#[undefined]
STk> (is-a? <a> x)
#t
STk> Bye.
bash$
Thanks,
Cliff
-- 
Clifford Beshers                Office:  (212) 939-7087   Lab: (212) 939-7101
Columbia University             Fax:     (212) 666-0140   
500 West 12Oth St., Room 450    WWW:     http://www.cs.columbia.edu/~beshers
New York, NY 10027              Email:   beshers_at_cs.columbia.edu
Received on Sat Jan 06 1996 - 15:46:20 CET