mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-20 14:19:18 +02:00
other version numbers than 7 to `scheme-report-environment`, providing initial (scheme base) library.
54 lines
1.5 KiB
Scheme
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)))
|