You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
br-parser-tools/collects/tests/mzscheme/ttt/veclib.ss

58 lines
1.3 KiB
Scheme

;; --------------------------------------------------------------------------
;; 2vec-library.ss
; #|
; (unit/sig
; (make-2vec 2vec-ref 2vec-set! collect)
; (import plt:userspace^)
; |#
;; 2 dimensional, square vectors
(define collect
(lambda (base combine)
(local ((define C
(lambda (l)
(cond
((null? l) base)
(else (combine l (car l) (C (cdr l))))))))
C)))
(define (make-2vec N element)
(make-vector (* N N) element))
(define (2vec-ref 2vec i j)
(let ((L (sqrt (vector-length 2vec))))
(vector-ref 2vec (+ (* i L) j))))
(define (2vec-set! 2vec i j element)
(let ((L (sqrt (vector-length 2vec))))
(if (and (< i L) (< j L))
(vector-set! 2vec (+ (* i L) j) element)
(error '2vec-set! "~s ~s" i j))))
(define (I N)
(let ((2vec (make-2vec N 0)))
(let loop ((i 0) (j 0))
(if (= i N)
(void)
(begin
(2vec-set! 2vec i j 1)
(loop (add1 i) (add1 j)))))
2vec))
(define (P N)
(let ((2vec (make-2vec N 0)))
(let loop ((i 0) (j 0))
(cond
[(and (= i N) (= j 0)) (void)]
[(< j N) (2vec-set! 2vec i j (list i j)) (loop i (add1 j))]
[(< i N) (loop (add1 i) 0)]
[else (error 'P "impossible ~s ~s" i j)]))
2vec))
; #|
; )
; |#