;;;; Instantiation of a skeleton expression ;;; with respect to a dictionary (define (instantiate skeleton dictionary) (define (walk skel) (cond ((match-variable? skel) (instantiate-variable skel dictionary)) ((pair? skel) (cons (walk (car skel)) (walk (cdr skel)))) (else skel))) (walk skeleton)) (define (instantiate-variable var dictionary) (let ((entry (dictionary-lookup var dictionary))) (if entry (value-in-entry entry) (error "No value for " var)))) #| ;;; For example (instantiate '(a (?x ?y) ?y) '((?y c) (?x b))) ;Value: (a (b c) c) |#