Tutorial 4: Scintacks and Some Antics (Syntax and Semantics) October 3-5, 2007

advertisement
Tutorial 4: Scintacks and Some Antics (Syntax
and Semantics)
CS 135 Fall 2007
October 3-5, 2007
This week we will be looking at the mathematical structure and meaning of a Scheme program. The material here comes primarily from Lecture
Module 4 in the class notes. It’s quite fortunate (and unusual) that we are
working in a programming language in which we can rigorously define the
meaning of every program with relatively few rules. The only unfortuanate
side effect is that we’ll have to endure a week without the fun stories and
problem descriptions that we’ve all grown accustomed to in these tutorials.
Give a full syntactic/semantic analysis of each of the following Scheme
programs. That is, go through (one by one) each of the substitution steps to
completely evaluate each expression to a value. If an error occurs, making
evaluation impossible, pinpoint the exact location and nature of the error
(syntax, semantics, or other).
1.
(and (symbol? ’hello)
(= (- 5 1) (* 2 3))
(/ "a string" "another string"))
2.
(define a (+ 2 3))
(define (foo2 x)
(cond [(or (> x 1)
(< x -1))
(sqr x)]
[(zero? x) 1]))
(foo2 a)
(foo2 (/ a a))
1
3.
(define (foo3 5)
(+ 1 5))
(/ (foo3 5)
0)
4.
(define-struct name (first middle last))
(define (foo4 nme)
(name-middle (+ nme 1)))
(name-last (make-name "James" "A" "Garfield"))
5.
(define (foo5 x)
(cond [(= 1 x) 2]
[else
(* 2
(foo5 (sub1 x)))]))
(foo5 3)
(foo5 -2)
2
Download