Skip to main content

cs_lec_18

Special Forms A combination that is not a call expression is a special form:

  • if expression: (if <predicate> <consequent> <alternative> )
  • and and or (and <e1> .. <en>), (or <e1> ... <en>)
  • Binding symbols: (define <symbol> <expression>)
  • New procedures: (define (<symbol> <formal parameters>) <body>))
> (define pi 3.14)
> (* pi 2)
6.28
> (define (square x) (* x x))
> (define (average x y) (/ (+x y) 2))
> (define (sqrt x) (define (improve guess)(average guess ( x guess))))
>

Lambda Expressions Lambda expressions evaluate to anonymous procedures

(lambda (<formal-parameters>) <body>)
(define (plus4 x) (+ x 4))
(define plus4 (lambda (x) (+ x 4)))

An operator can be a call expression too:

((lambda (x y z) (+ x y (square z))) 1 2 3 )
(define pi 3.14)
(define plus4 4)
(lambda (x) (+ x 4))
(define plus4 (lambda (x) (+ x 4)))

Cond and Begin The cond special form that behaves like if-elif-else statements in Python.

if x>10:
print('big')
elif x>5:
print('medium')
else:
print('small')
(cond ((> x 10) (print 'big')) ((> x 5) (print 'medium')) else (print 'small'))

(print (cond ((> x 10) 'big') ((> x 5) 'medium') (else 'small')))
(define x 12)

(if (> x 10))

![[chrome_p30Kd4RRwj.png]]

Let Expressions The let speccial form binds symbols to vlues temporarily; just for one expression

a = 3
b = 2+2
c = math.sqrt(a*a+b*b)

![[chrome_lOTbA6qxAw.png]] Drawing Stars (forward 100) or (fd 100) draws a line (right 90) or (rt 90) turns 90 degrees ![[chrome_CqBr7vzVYg.png]]

(define (star n m) (let ((a (/ (* 360 m) n))) (define (side k) (if (< k n) (begin (fd 100) (rt a) (side (+ k 1)))))))(side 0))