(define-module (language python module python) #:use-module (oop goops) #:use-module ((oop pf-objects) #:select (

class-method static-method refq)) #:use-module (language python exceptions ) #:use-module (language python for ) #:use-module (language python try ) #:use-module (language python yield ) #:use-module (language python list ) #:use-module (language python dict ) #:use-module (language python set ) #:use-module (language python compile ) #:use-module (language python string ) #:use-module (language python set ) #:use-module (language python number ) #:use-module (language python dir ) #:use-module (language python hash ) #:replace (list abs) #:re-export (Exception StopIteration send sendException next GeneratorExit sendClose RuntimeError len dir next dict) #:export (print repr complex float int round set all any bin callable chr classmethod staticmethod divmod enumerate filter format getattr hasattr hash hex isinstance iter map)) (define print (case-lambda (() (format #t "~%")) ((x) (format #t "~s~%" x)) (l (format #t "~s~%" l)))) (define (repr x) (format #f "~a" x)) (define abs py-abs) (define list pylist) (define string pystring) (define complex py-complex) (define float py-float) (define int py-int) (define round py-round) (define set py-set) (define all py-all) (define any py-any) (define bin py-bin) (define divmod py-divmod) (define format py-format) (define hash py-hash) (define hex py-hex) (define-method (callable x ) #f) (define-method (callable (x )) #t) (define-method (callable (x )) #t) (define-method (callable (x )) #t) (define-method (callable (x )) #t) (define-method (callable (x

)) (ref x '__call__)) (define chr integer->char) (define classmethod class-method) (define staticmethod static-method) (define (enumerate l) (make-generator enumerate (lambda (yield) (for ((x : l)) ((i 0)) (yield i x) (+ i 1))))) (define (filter f l) (make-generator enumerate (lambda (yield) (for ((x : l)) () (if (f x) (yield x)))))) (define miss (list 'miss)) (define* (getattr a b #:optional (k miss)) (let ((r (ref a (symbol->string b) k))) (if (eq? r miss) (raise AttributeError "object/class ~a is missing attribute ~a" a b) r))) (define (hasattr a b) (let ((r (ref a (symbol->string b) k))) (not (eq? r miss)))) (define (isinstance o cl) (if (pair? cl) (or (isinstance o (car cl)) (isinstance o (cdr cl))) (is-a? o cl))) (define iter (case-lambda ((o) (aif it (wrap-in o) it (aif get (ref o '__getitem__) (make-generator iter (lambda (yield) (for () (i 0) (yield (get i)) (+ i 1)))) (raise TypeError "not iterable" o)))) ((f sent) (make-generator iter (lambda (yield) (for () () (let ((r (f))) (if (equal? r sent) (break) (yield r))))))))) (define-syntax map (lambda (x) (syntax-case x () ((map f a ...) (with-syntax (((x ...) (generate-temporaries #'(a ...)))) #'(make-generator map (lambda (yield) (for ((x : a) ...) () (yield (f x ...))))))))))