summaryrefslogtreecommitdiff
path: root/modules/language/python/list.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r--modules/language/python/list.scm23
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)