123456789101112131415161718192021222324252627282930313233343536 |
- #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))))))
|