#:use-module (language python eval )
#:use-module (language python bool )
- #:replace (list abs min max hash round format)
+ #:replace (list abs min max hash round format map)
#:re-export (StopIteration GeneratorExit RuntimeError
Exception ValueError TypeError
chr classmethod staticmethod objectmethod
divmod enumerate filter
getattr hasattr setattr hex isinstance issubclass
- iter map sum id input oct ord pow super
+ iter sum id input oct ord pow super
sorted zip
ClassMethod StaticMethod Funcobj))
#t
(is-a? (ref sub '__goops__) (ref cls '__goops__)))))
-(define-method (isinstance x y) #f)
+(define-method (isinstance x y)
+ (if (null? y)
+ #f
+ (if (pair? y)
+ (or (isinstance x (car y))
+ (isinstance x (cdr y)))
+ (is-a? x y))))
+
+(define-method (isinstance (i <integer>) y)
+ (if (issubclass y int)
+ #t
+ (if (pair? y)
+ (or (isinstance i (car y))
+ (isinstance i (cdr y)))
+ (is-a? i y))))
+
+(define-method (isinstance (i <real>) y)
+ (if (issubclass y float)
+ #t
+ (if (pair? y)
+ (or (isinstance i (car y))
+ (isinstance i (cdr y)))
+ (is-a? i y))))
+
+(define-method (isinstance (i <pair>) y)
+ (if (issubclass y tuple)
+ #t
+ (if (pair? y)
+ (or (isinstance i (car y))
+ (isinstance i (cdr y)))
+ (is-a? i y))))
+
+(define-method (isinstance (i <string>) y)
+ (if (issubclass y str)
+ #t
+ (if (pair? y)
+ (or (isinstance i (car y))
+ (isinstance i (cdr y)))
+ (is-a? i y))))
+
+(define-method (isinstance (i <bytevector>) y)
+ (if (issubclass y bytes)
+ #t
+ (if (pair? y)
+ (or (isinstance i (car y))
+ (isinstance i (cdr y)))
+ (is-a? i y))))
+
+
+(define-method (isinstance o (cl <p>))
+ (cond
+ ((eq? cl py-list)
+ (is-a? o <py-list>))
+ (else #f)))
+
(define-method (isinstance (o <p>) (cl <p>))
- (aif it (ref cl '__instancecheck__)
- (it o)
- (if (pair? cl)
- (or
- (isinstance o (car cl))
- (isinstance o (cdr cl)))
- (is-a? o (ref cl '__goops__)))))
+ (cond
+ ((ref cl '__instancecheck__) =>
+ (lambda (it)
+ (it o)))
+ ((pair? cl)
+ (or
+ (isinstance o (car cl))
+ (isinstance o (cdr cl))))
+ (else
+ (is-a? o (ref cl '__goops__)))))
+
+
(define iter
(case-lambda
(define (id x) (object-address x))
(define (input str)
- (format #t str)
+ ((@ (guile) format) #t str)
(readline))
(define (idx x) x)