diff options
| author | Mistivia <i@mistivia.com> | 2024-02-25 20:11:54 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2024-02-25 20:11:54 +0800 |
| commit | 515ecbf5a20a8e432a998b0a543bedcb1bd64cf4 (patch) | |
| tree | 6353c603a8cf0276553f420205f8d1c730a318ce /lib/utils.rkt | |
| parent | e191b610c11326b587cf0b01fd6fc37b8d07bb19 (diff) | |
reorg code
Diffstat (limited to 'lib/utils.rkt')
| -rw-r--r-- | lib/utils.rkt | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/utils.rkt b/lib/utils.rkt new file mode 100644 index 0000000..2ce8a51 --- /dev/null +++ b/lib/utils.rkt @@ -0,0 +1,36 @@ +#lang racket + +(provide get-lines + enumerate + repeat + split-list-by) + +(define (repeat n e) + (let loop ((i 0) (ret '())) + (if (>= i n) + ret + (loop (+ 1 i) (cons e ret))))) + +(define (get-lines fp) + (let loop ((lines '())) + (define l (read-line fp)) + (if (eof-object? l) + (reverse lines) + (loop (cons l lines))))) + +(define (enumerate lst) + (let loop ((i 1) (ret '()) (remain lst)) + (if (null? remain) + (reverse ret) + (loop (+ 1 i) (cons (list (car remain) i) ret) (cdr remain))))) + +(define (split-list-by e lst . eq) + (define cmp (if (null? eq) equal? eq)) + (let loop ((ret '()) + (cur '()) + (lst lst)) + (if (null? lst) + (reverse (cons (reverse cur) ret)) + (if (cmp e (car lst)) + (loop (cons (reverse cur) ret) '() (cdr lst)) + (loop ret (cons (car lst) cur) (cdr lst)))))) |
