University of Virginia, Department of Computer Science CS655: Programming Languages, Spring 2001

Manifest: Tuesday 30 January 2001
 Assignments Thursday, 1 February (in class) Problem Set 1

No new readings assigned. Re-read the parts of Chapter 4 you didn't understand the first time.

Code
Code excerpts from the lecture.

### Higher Order Procedures

```(define (double-els lis)
(if (null? lis)
lis
(cons (+ (car lis) (car lis)) (cdr lis))))

(define (map-els f lis)
(if (null? lis)
lis

(cons ___________________________

_____________________________________)))

(define (increment-els lis)

(map-els _________________________ lis))

(define (???-els lis)
(map-els
(lambda (x) (lambda (y) (+ x y)))
lis))

(define (compose f g x) (f (g x)))

(define (composer lis)
(if (null? lis)

___________________________

_________________________________________________________________))
```

### Mini-Scheme Metacircular Evaluator

Raw text file: meval.scm. You can load this into your Scheme interaction using

```(define (bind-variable var value env)
(cons (cons (cons var value) (car env)) (cdr env)))

(define (extend-environment env)
(cons '() env))

(define (lookup-variable-value var env)
(if (null? env)
(error "No binding for " var)
(if (null? (car env))
(lookup-variable-value var (cdr env))
(if (eq? var (car (car (car env))))
(cdr (car (car env)))
(lookup-variable-value
var
(cons (cdr (car env)) (cdr env)))))))

(define (apply proc operand env)
(if (eq? (car proc) 'primitive)
((car (cdr proc)) operand)
(eval (car (cdr (cdr proc)))
(bind-variable (car (car (cdr proc)))
operand (extend-environment env)))))

(define (eval expr env)
(if (or (number? expr)
(and (list? expr) (eq? (car expr) 'primitive)))
expr
(if (symbol? expr)
(lookup-variable-value expr env)
(if (and (list? expr) (eq? (car expr) 'lambda))
(list 'procedure (car (cdr expr)) (car (cdr (cdr expr))))
(apply (eval (car expr) env)
(eval (car (cdr expr)) env) env)))))
```

The Tao is the One,
From the One come eval and apply;
From these two, creative energy;
From energy, infinitely many things;
The forms of all computation.

All programming embodies eval
And embraces apply,
Through their union
Achieving harmony.

Tao Te Ching, Chapter 42. (Liberally modified and modernized, with no offense meant to Taoists.)