(define create-empty-ff (lambda () ())) (define extend-ff (lambda (sym val ff) (cons (cons (list sym) (vector val)) ff))) (define extend-ff* (lambda (sym-list val-list ff) (cons (cons sym-list (apply vector val-list)) ff))) (define list-index (lambda (s los) (cond ((null? los) -1) ((eq? s (car los)) 0) (else (let ((n (list-index s (cdr los)))) (if (= n -1) -1 (+ 1 n))))))) (define ribassoc (lambda (s los v fail-value) (let ((n (list-index s los))) (if (= n -1) fail-value (vector-ref v n))))) (define apply-ff (lambda (ff symbol) (if (null? ff) '*fail* (let ((val (ribassoc symbol (caar ff) (cdar ff) '*fail*))) (if (eq? val '*fail*) (apply-ff (cdr ff) symbol) val)))))