diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2017-09-16 17:35:40 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2017-09-16 17:35:40 +0200 |
commit | d82a3d264d43a4fe751d6d3629f64088b03f6ede (patch) | |
tree | 72e0c86374cc4092f980cbdfa0b894d1c3708fe7 /modules/language/python/list.scm | |
parent | 5e6f47f77d26f95320c34a88680982429ae614da (diff) |
variable length function added
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r-- | modules/language/python/list.scm | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm new file mode 100644 index 0000000..64ff6e4 --- /dev/null +++ b/modules/language/python/list.scm @@ -0,0 +1,26 @@ +(define-module (language python list) + #:use-module (oop pf-objects) + #:use-module (oop goops) + #:use-module (language python yield) + #:use-module (language python for) + #:use-module (language python exceptions) + #:export (to-list)) + + +(define-method (to-list x) + (if (vector? x) + (vector->list x) + x)) + +(define-method (to-list (x <p>)) + ((ref x '__tolist__ (lambda () (error "missing __tolist__ in object"))))) + +(define-method (to-list (x <yield>)) + (define l '()) + (catch StopIteration + (lambda () + (let lp () + (set! l (cons (next x) l)) + (lp))) + (lambda x + (reverse l)))) |