CS 330 Lecture 34 – Scope and eval

Agenda

  • final project deadline
  • association lists (Scheme’s hash)
  • program this
  • dynamic interpretation
  • sandboxing
  • L-systems

Program This

Pick one:

  • Write a function apply-productions-once that takes as arguments a list-of-atoms and an association list. Each atom in the list is replaced by the value for which the atom is the key in the association-list. For example,
    (apply-productions-once '(a b) '((a 1 2) (b X)))
    evaluates to
    '(1 2 X).
  • Write a function apply-productions-n-times that takes as arguments a list-of-atoms, an association list, and a number n. It applies the productions defined in the association list n times and evaluates to the fully-expanded result. For example,
    (apply-productions-n-times '(A) '((A B B) (B A A)) 2) ->
    (apply-productions-n-times '(B B) '((A B B) (B A A) 1) ->
    (apply-productions-n-times '(A A A A) '((A B B) (B A A) 0) ->
    '(A A A A).

Code

lsystem.ss

(define first car)
(define rest cdr)

(define apply-productions-once
  (lambda (loa alist)
    (cond
      ((null? loa) '())
      (else (append 
             (rest (assoc (first loa) alist))
             (apply-productions-once (rest loa) alist))))))

(define apply-productions-n-times
  (lambda (loa alist n)
    (cond
      ((= n 0) loa)
      (else (apply-productions-n-times 
             (apply-productions-once loa alist)
             alist
             (- n 1))))))

(define lsystem
  (lambda (start productions angle n)
    (apply-productions-n-times start productions n)))

(lsystem '(F - F - F - F)
         '((F F - F + F + F F - F - F + F)
           (- -)
           (+ +))
         90
         1)

Haiku

Do it once by hand.
To see what work your code saves.
John Henry found out.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *