diff --git a/syndicate/skeleton.rkt b/syndicate/skeleton.rkt index 4a6b8cf..da4bf99 100644 --- a/syndicate/skeleton.rkt +++ b/syndicate/skeleton.rkt @@ -345,13 +345,15 @@ [(key (in-list path))] (step-term term key))) +(define (index? k) (exact-nonnegative-integer? k)) + (define (step-term term key) (cond [(non-object-struct? term) (define v (struct->vector term)) (define k (+ key 1)) ;; skip the label - (if (>= k (vector-length v)) (void) (vector-ref v k))] + (when (and (index? k) (< k (vector-length v))) (vector-ref v k))] [(list? term) - (if (>= key (length term)) (void) (list-ref term key))] + (when (and (index? key) (< key (length term))) (list-ref term key))] [(hash? term) (hash-ref term key (void))] [else