summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/language/python/list.scm65
1 files changed, 59 insertions, 6 deletions
diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm
index 3976ca6..f31fcba 100644
--- a/modules/language/python/list.scm
+++ b/modules/language/python/list.scm
@@ -155,9 +155,13 @@
(begin
(vector-set! vec k1 (vector-ref vec k2))
(lp (+ k1 1) (+ k2 1)))
- (slot-set! o 'n k1))))))))
-
-
+ (begin
+ (let lp ((i k2))
+ (if (< i N)
+ (begin
+ (vector-set! vec i #f)
+ (lp (+ i 1)))
+ (slot-set! o 'n k1)))))))))))
(raise IndexError))
(values)))
@@ -356,7 +360,7 @@
(define-method (pylist-count (o <p>) . l)
(apply (ref o 'count) l))
-;; extend
+;; extend!
(define-method (pylist-extend! (o <py-list>) iter)
(for ((x : iter)) ()
(pylist-append! o x)))
@@ -460,7 +464,7 @@
(pylist-set! o i (car l))
(lp (cdr l) (+ i 1))))))
-(define-method (pylist-sort! (o <py-list>) . l) (apply (ref o 'sort) l))
+(define-method (pylist-sort! (o <p>) . l) (apply (ref o 'sort) l))
;; INDEX
(define-method (pylist-index (o <py-list>) val . l)
@@ -486,7 +490,56 @@
(lp (+ i 1))))
(raise ValueError "could not find value in index fkn")))
(raise IndexError "index out of scop in index fkn"))))))
+
+(define-method (pylist-index (o <string>) val . l)
+ (let* ((n (string-length o))
+ (f (lambda (m) (if (< m 0) (+ m n) m)))
+ (val (if (and (string? val) (> (string-length val) 0))
+ (string-ref val 0)
+ val)))
+ (call-with-values
+ (lambda ()
+ (match l
+ (()
+ (values 0 n))
+ ((x)
+ (values (f x) n))
+ ((x y)
+ (values (f x) (f y)))))
+ (lambda (n1 n2)
+ (if (and (>= n1 0) (>= n2 0) (< n1 n) (<= n2 n))
+ (let lp ((i n1))
+ (if (< i n2)
+ (let ((r (string-ref o i)))
+ (if (equal? r val)
+ i
+ (lp (+ i 1))))
+ (raise ValueError "could not find value in index fkn")))
+ (raise IndexError "index out of scop in index fkn"))))))
+
+(define-method (pylist-index (o <pair>) val . l)
+ (let* ((n (length o))
+ (f (lambda (m) (if (< m 0) (+ m n) m))))
+ (call-with-values
+ (lambda ()
+ (match l
+ (()
+ (values 0 n))
+ ((x)
+ (values (f x) n))
+ ((x y)
+ (values (f x) (f y)))))
+ (lambda (n1 n2)
+ (if (and (>= n1 0) (>= n2 0) (< n1 n) (<= n2 n))
+ (let lp ((i o))
+ (if (pair? i)
+ (let ((r (car i)))
+ (if (equal? r val)
+ i
+ (lp (cdr i))))
+ (raise ValueError "could not find value in index fkn")))
+ (raise IndexError "index out of scop in index fkn"))))))
-(define-method (pylist-index (o <py>) . l) (apply (ref o 'index) l))
+(define-method (pylist-index (o <p>) . l) (apply (ref o 'index) l))