Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
39
Task/Generic-swap/Scheme/generic-swap.ss
Normal file
39
Task/Generic-swap/Scheme/generic-swap.ss
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
; swap elements of a vector
|
||||
; vector-swap! is not part of r5rs, so we define it
|
||||
(define (vector-swap! v i j)
|
||||
(let ((a (vector-ref v i)) (b (vector-ref v j)))
|
||||
(vector-set! v i b)
|
||||
(vector-set! v j a)))
|
||||
|
||||
(let ((vec (vector 1 2 3 4 5)))
|
||||
(vector-swap! vec 0 4)
|
||||
vec)
|
||||
; #(5 2 3 4 1)
|
||||
|
||||
|
||||
; we can swap also in lists
|
||||
(define (list-swap! v i j)
|
||||
(let* ((x (list-tail v i))
|
||||
(y (list-tail v j))
|
||||
(a (car x))
|
||||
(b (car y)))
|
||||
(set-car! x b)
|
||||
(set-car! y a)))
|
||||
|
||||
(let ((lis (list 1 2 3 4 5)))
|
||||
(list-swap! lis 0 4)
|
||||
lis)
|
||||
; (5 2 3 4 1)
|
||||
|
||||
|
||||
; using macros (will work on variables, not on vectors or lists)
|
||||
(define-syntax swap!
|
||||
(syntax-rules ()
|
||||
((_ a b)
|
||||
(let ((tmp a))
|
||||
(set! a b)
|
||||
(set! b tmp)))))
|
||||
|
||||
; try it
|
||||
(let ((a 1) (b 2)) (swap! a b) (list a b))
|
||||
; (2 1)
|
||||
Loading…
Add table
Add a link
Reference in a new issue