diff --git a/debug/kons.scm b/debug/kons.scm index d1cd89a2..7cfc462a 100644 --- a/debug/kons.scm +++ b/debug/kons.scm @@ -1,7 +1,7 @@ ;; A temporary test file (import (scheme base) (scheme write) - (srfi 9) + ;(srfi 9) ) ;; TODO: seems begins are not spliced when part of an applied lambda?? diff --git a/scheme/base.sld b/scheme/base.sld index 4cbd9f0c..4511c028 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -17,16 +17,17 @@ ; TODO: need filter for the next two. also, they really belong in SRFI-1, not here ;delete ;delete-duplicates - ;; TODO: possibly relocating here in the future + ;; Record types define-record-type record? - ; register-simple-type - ; make-type-predicate - ; make-constructor - ; make-getter - ; make-setter - ; slot-set! - ; type-slot-offset + register-simple-type + make-type-predicate + make-constructor + make-getter + make-setter + slot-set! + type-slot-offset + ;; END records receive abs max @@ -1385,7 +1386,7 @@ new))) (define (type-slot-offset name sym) (let ((field-tags (vector-ref name 2))) - (list-index2 sym field-tags))) + (_list-index sym field-tags))) (define (slot-set! name obj idx val) (let ((vec obj)) ;; TODO: get actual slots from obj (vector-set! (vector-ref vec 2) idx val))) @@ -1396,6 +1397,17 @@ (lambda (obj val) (vector-set! (vector-ref obj 2) idx val))) +;; Find index of element in list, or -1 if not found +(define _list-index + (lambda (e lst) + (if (null? lst) + -1 + (if (eq? (car lst) e) + 0 + (if (= (_list-index e (cdr lst)) -1) + -1 + (+ 1 (_list-index e (cdr lst)))))))) + (define (record? obj) (and (vector? obj) (> (vector-length obj) 0) diff --git a/srfi/9.sld b/srfi/9.sld index 9fd82feb..b286e32a 100644 --- a/srfi/9.sld +++ b/srfi/9.sld @@ -45,7 +45,7 @@ new))) (define (type-slot-offset name sym) (let ((field-tags (vector-ref name 2))) - (list-index2 sym field-tags))) + (_list-index sym field-tags))) (define (slot-set! name obj idx val) (let ((vec obj)) ;; TODO: get actual slots from obj (vector-set! (vector-ref vec 2) idx val))) @@ -61,6 +61,17 @@ (> (vector-length obj) 0) (equal? record-marker (vector-ref obj 0)))) + ;; Find index of element in list, or -1 if not found + (define _list-index + (lambda (e lst) + (if (null? lst) + -1 + (if (eq? (car lst) e) + 0 + (if (= (_list-index e (cdr lst)) -1) + -1 + (+ 1 (_list-index e (cdr lst)))))))) + (define-syntax define-record-type (er-macro-transformer (lambda (expr rename compare) diff --git a/tests/unit-tests.scm b/tests/unit-tests.scm index 856a10b2..cdfaee16 100644 --- a/tests/unit-tests.scm +++ b/tests/unit-tests.scm @@ -5,7 +5,7 @@ (scheme read) (scheme write) (scheme eval) - (srfi 9) + ;(srfi 9) ) (define *num-passed* 0)