diff --git a/src/ikarus.boot b/src/ikarus.boot index 1ea6a1c..739e9d1 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/libcore.ss b/src/libcore.ss index 5a655b2..4ad4917 100644 --- a/src/libcore.ss +++ b/src/libcore.ss @@ -1020,6 +1020,35 @@ (lambda (x ls) (race x ls ls ls)))) +(primitive-set! 'assoc + (letrec ([race + (lambda (x h t ls) + (if (pair? h) + (let ([a ($car h)] [h ($cdr h)]) + (if (pair? a) + (if (equal? ($car a) x) + a + (if (pair? h) + (if (not (eq? h t)) + (let ([a ($car h)]) + (if (pair? a) + (if (equal? ($car a) x) + a + (race x ($cdr h) ($cdr t) ls)) + (error 'assoc "malformed alist ~s" + ls))) + (error 'assoc "circular list ~s" ls)) + (if (null? h) + #f + (error 'assoc "~s is not a proper list" ls)))) + (error 'assoc "malformed alist ~s" ls))) + (if (null? h) + #f + (error 'assoc "~s is not a proper list" ls))))]) + (lambda (x ls) + (race x ls ls ls)))) + + (primitive-set! 'string->symbol (lambda (x) (unless (string? x) diff --git a/src/makefile.ss b/src/makefile.ss index 86252bb..16c1c96 100644 --- a/src/makefile.ss +++ b/src/makefile.ss @@ -57,7 +57,7 @@ remprop putprop getprop property-list apply map for-each andmap ormap - memq memv assq + memq memv assq assoc eq? equal? reverse string->symbol symbol->string oblist