diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2017-09-17 00:34:11 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2017-09-17 00:34:11 +0200 |
commit | a4447a8040becb747bc4c1a9bb0a7a98321e3d58 (patch) | |
tree | 30fb0fcf0e9ed6f9fc31f38b0655eba941f27b22 /modules/language/python/list.scm | |
parent | 884e534162ea190b72b53dbe0973980f6caf55c5 (diff) |
+ append now implemented
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r-- | modules/language/python/list.scm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm index 0b98b61..b8f1860 100644 --- a/modules/language/python/list.scm +++ b/modules/language/python/list.scm @@ -161,3 +161,34 @@ (format port "[]") (format port "[~a~{, ~a~}]" (car l) (cdr l))))) + +(define-method (+ (o1 <py-list>) (o2 <py-list>)) + (let* ((vec1 (slot-ref o1 'vec)) + (vec2 (slot-ref o2 'vec)) + (n1 (slot-ref o1 'n)) + (n2 (slot-ref o2 'n)) + (n (+ n1 n2)) + (vec (make-vector (* 2 n))) + (o (make <py-list>))) + + (let lp ((i1 0)) + (if (< i1 n1) + (begin + (vector-set! vec i1 (vector-ref vec1 i1)) + (lp (+ i1 1))) + (let lp ((i2 0) (i i1)) + (if (< i2 n2) + (begin + (vector-set! vec i (vector-ref vec2 i2)) + (lp (+ i2 1) (+ i 1))))))) + + (slot-set! o 'n n ) + (slot-set! o 'vec vec) + o)) + +(define-method (+ (o1 <pair>) (o2 <pair>)) + (append o1 o2)) + + + + |