Fill in the definition of vlist below ;;; keys is a list of atoms, alist is of the form ;;; ((key1 value1)(key2 value2) ...). Returns a list of the values ;;; corresponding to keys. E.g. (vlist '(a 1)(b 2)(c 3)) '(c a)) returns ;;; (3 1). If any of the keys is not a key in alist, the value of ;;; vlist is the atom *missing*. E.g. (vlist '((a 1)) '(a b)) returns ;;; *missing*. (define (vlist keys alist) (vlistr )) ;;; keys is a list of atoms, alist is of the form ;;; ((key1 value1)(key2 value2) ...). Calls -succeed- with a ;;; single argument, the list of values associated with the keys, in ;;; reverse order. ;;; if any element of keys is not a key in alist, calls -fail- instead. (define (vlistr keys alist -succeed- -fail-) (vlist1 keys alist ( ) -succeed- -fail-)) (define (vlist1 keys alist result -succeed- -fail-) (if (null? keys)(-succeed- result) (cassoc (car keys) alist (lambda (val) (vlist1 (cdr keys) alist (cons val result) -succeed- -fail-)) -fail-))) (define (cassoc key alist -succeed- -fail-) (if (null? alist) (-fail-) (if (eq? (car (car alist)) key) (-succeed- (car (cdr (car alist)))) (cassoc key (cdr alist) -succeed- -fail-))))