diff options
Diffstat (limited to 'mew.scm')
-rw-r--r-- | mew.scm | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/mew.scm b/mew.scm index d0de5e0..70bcff6 100644 --- a/mew.scm +++ b/mew.scm @@ -19,7 +19,7 @@ per pop! prn proj push! puts rand range rep repeat sample scan scan-right sing? search seq set set-at sgn - shuffle shuffle! sort sort! str slurp + shuffle shuffle! sort sort-by sort! str slurp tally-accumulator tbl time while uniq-accumulator unlist until @@ -1361,6 +1361,21 @@ (chicken-sort! xs less?) (error "can only sort! vectors"))))) + (define sort-by + (case-lambda + ((sequence transform) (sort-by sequence transform <?)) + ((sequence transform less?) + (let ((t (tbl))) + (define (cached k) + (hash-table-ref t k + (lambda () + (let ((v (transform k))) + (hash-table-set! t k v) + v)))) + (sort sequence (lambda (a b) + (less? (cached a) (cached b)))))))) + + (let ((old-repl-prompt (repl-prompt))) (repl-prompt (lambda () (let ((old-prompt (old-repl-prompt))) |