chibi-scheme/lib/scheme/extras.scm
Alex Shinn bd32131b9d The big renaming to define-library in .sld, make it possible to pass
other version numbers than 7 to `scheme-report-environment`, providing
initial (scheme base) library.
2011-10-02 17:16:05 +09:00

54 lines
1.5 KiB
Scheme

(define call/cc call-with-current-continuation)
(define flush-output-port flush-output)
(define (close-port port)
((if (input-port? port) close-input-port close-output-port) port))
(define (call-with-port port proc)
(let ((res (proc port)))
(close-port port)
res))
(define (make-list n . o)
(let ((init (and (pair? o) (car o))))
(let lp ((i 0) (res '()))
(if (>= i n) res (lp (+ i 1) (cons init res))))))
(define (list-copy ls)
(reverse (reverse ls)))
(define (list-set! ls k x)
(cond ((null? ls) (error "invalid list index"))
((zero? k) (set-car! ls x))
(else (list-set! ls (- k 1) x))))
(define (vector-map proc vec . lov)
(if (null? lov)
(let lp ((i (vector-length vec)) (res '()))
(if (zero? i)
(list->vector res)
(lp (- i 1) (cons (proc (vector-ref vec i)) res))))
(list->vector (apply map proc (map vector->list (cons vec lov))))))
(define (vector-for-each proc vec . lov)
(if (null? lov)
(let ((len (vector-length vec)))
(let lp ((i 0))
(cond ((< i len)
(proc (vector-ref vec i))
(lp (+ i 1))))))
(apply for-each proc (map vector->list (cons vec lov)))))
(define (vector-copy vec)
(let* ((len (vector-length vec))
(res (make-vector len)))
(do ((i 0 (+ i 1))) ((>= i len) res)
(vector-set! res i (vector-ref vec i)))))
(define (vector->string vec)
(list->string (vector->list vec)))
(define (string->vector vec)
(list->vector (string->list vec)))