args are now stored with their symbols instead of ther string identifiers

This commit is contained in:
FelixBrendel
2019-08-01 19:48:09 +02:00
parent 7cebcd1823
commit 241ac60ced
11 changed files with 141 additions and 15 deletions
+28
View File
@@ -0,0 +1,28 @@
(import "cxr.slime")
(define key-not-found-index -1)
(define (make-set :rest vals)
(set-type
(if vals
(list vals)
'(()))
:set))
(define (set-find set val)
(let ((values (car set)))
(define (inner values current-index)
(cond ((null? values) key-not-found-index)
((= (car values) val) current-index)
(else (inner (cdr values) (+ 1 current-index)))))
(inner values 0)))
(define (set-contains? set val)
(unless (= (set-find set val) key-not-found-index)
t))
(define (set-insert! set value)
(unless (set-contains? set value)
(mutate set (pair (pair value (first set)) ()))
(set-type set :set))
set)