summaryrefslogtreecommitdiff
path: root/modules/language/python/list.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2017-09-16 17:35:40 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2017-09-16 17:35:40 +0200
commitd82a3d264d43a4fe751d6d3629f64088b03f6ede (patch)
tree72e0c86374cc4092f980cbdfa0b894d1c3708fe7 /modules/language/python/list.scm
parent5e6f47f77d26f95320c34a88680982429ae614da (diff)
variable length function added
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r--modules/language/python/list.scm26
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))))