diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/language/python/tuple.scm | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/modules/language/python/tuple.scm b/modules/language/python/tuple.scm new file mode 100644 index 0000000..9675a27 --- /dev/null +++ b/modules/language/python/tuple.scm @@ -0,0 +1,36 @@ +(define-module (language python tuple) + #:use-module (oop goops) + #:use-module (oop pf-objects) + #:use-module (language python hash) + #:use-module (language python for) + #:export (tuple <py-tuple> defpair)) + + +(define-class <py-tuple> () l) +(define-method (py-hash (o <py-tuple>)) (py-hash (slot-ref o 'l))) +(define-method (py-class (o <py-tuple>) tuple)) +(define-method (equal? (o1 <py-tuple>) o2) (equal? (slot-ref o1 'l) o2)) +(define-method (equal? o1 (o2 <py-tuple>)) (equal? o1 (slot-ref o2 'l))) + +(define-python-class tuple (<py-tuple>) + (define __init__ + (case-lambda + ((self) + (slot-set! self 'l '())) + ((self it) + (slot-set! self 'l + (for ((x : it)) ((l '())) + (cons x l) + #:final + (reverse l)))))) + (define __repr__ + (lambda (self) (format #f "~a" (slot-ref self 'l))))) + +(define-syntax-rule (defpair (f o . u) code ...) + (begin + (define-method (f (o <pair>) . u) + code ...) + (define-method (f (o <py-tuple>) . u) + (let ((o (slot-ref o 'l))) + code ...)))) + |