diff options
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r-- | modules/language/python/list.scm | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm index 7deda10..a60703c 100644 --- a/modules/language/python/list.scm +++ b/modules/language/python/list.scm @@ -695,14 +695,27 @@ ;; SORT! (define (id x) x) +(define (sort- it key reverse) + (catch #t + (lambda () + (for ((x : it)) ((l '()) (i 0)) + (values (cons ((@ (guile) list) (key x) i x) l) + (+ i 1)) + + #:final + (begin + (let lp ((l (sort (reverse! l) (if reverse > <))) + (i 0)) + (if (pair? l) + (let ((x (car l))) + (pylist-set! it i (caddr x)) + (lp (cdr l) (+ i 1)))))))) + (lambda x (raise (TypeError "problem in sorting layout"))))) + (define-method (pylist-sort! (o <py-list>) . l) (apply (lambda* (#:key (key id) (reverse #f)) - (let lp ((l (sort (map key (to-list o)) (if reverse > <))) (i 0)) - (if (pair? l) - (begin - (pylist-set! o i (car l)) - (lp (cdr l) (+ i 1)))))) + (sort- o key reverse)) l)) (define-method (pylist-sort! (o <p>) . l) |