diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2017-09-18 23:54:35 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2017-09-18 23:54:35 +0200 |
commit | a2632b522cd3dd48a9cd7315038660d8c85bc557 (patch) | |
tree | ee8b6af3b09580ae520709ecb037eced69990f61 /modules/language/python/list.scm | |
parent | 44ee078a24fc7a06f8da7f9f82c8a382f82fbdc2 (diff) |
missing methods added
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r-- | modules/language/python/list.scm | 65 |
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)) |