Worksheet on Naming and Recursion
8.12

Worksheet on Naming and Recursion🔗

Start by copying all of the given code into a single DrRacket buffer. Make sure that you include the final require that actually invokes the inner module, and make sure that when you run the code you see the results computed by the expressions in the my-mod1 module.

Then, solve each exercise by adding code immediately after the commented exercise statement.

  #lang racket
  ;; this code defines the sim-ZODE4 language as a module
  (module sim-ZODE4 racket
    (provide
     [rename-out (#%lam-app #%app)
                 (my-if if)]
     else
     #%module-begin
     #%datum
     + - * / = equal? <= =>
     true false
     locals)
    (require (for-syntax syntax/parse))
   
    (define-syntax (#%lam-app stx)
      (syntax-case stx (lamb :)
        [(_ lamb : args ... : body)
         #'(lambda (args ...) body)]
        [(_ e ...)
         #'(#%app e ...)]))
   
    (define-syntax (my-if stx)
      (syntax-case stx (:)
        [(_ : e1 : e2 : e3)
         #'(if e1 e2 e3)]))
   
    (define-syntax (locals stx)
      (syntax-parse stx
        [((~literal locals)
          (~literal :)
          (~seq var:id (~literal =) rhs (~literal :)) ...
          body:expr)
         #'(let ([var rhs] ...) body)])))
   
  ;; this module uses the sim-ZODE4 language. That is, its
  ;; contents are written *in* the sim-ZODE4 language.
  ;; the only edits you should make are inside this module:
  (module my-mod1 (submod ".." sim-ZODE4)
   
    1234
   
    4567
   
    {+ 4 5}
   
    {if : true : 34 : 39}
    
    {{lamb : x y : {+ x y}} 4 3}
   
    {locals : z = {+ 9 14}
            : y = 98
            : {+ z y}}
   
   
    ;; exercise 0: Give the name `f` to the function that
    ;; accepts an argument `x` and computes x^2 + 4x + 4.
    ;; apply `f` to seven.
   
    ;; exercise 1: Use the trick discussed in class to define
    ;; a `fact` function that computes the factorial of a given
    ;; number. Use it to compute the factorial of 12.
   
    ;; exercise 2: Define a 'pow' function that accepts a base
    ;; and a (natural number) exponent, and computes the base to
    ;; the power of the exponent. Don't worry about non-natural
    ;; number exponents (6^1.5, 5^-4).
   
    ;; exercise 3: use `fact` and `pow` to build a "sin" function
    ;; that accepts a number x and a number of terms `n`, and computes
    ;; (sin x) using `n` terms of the taylor expansion. (Note that
    ;; this is a little ambigious; do zero-coefficient terms count?
    ;; You can go either way on this.) Use this function to compute
    ;; the sine of 1 radian to an error of no more than ten to the minus
    ;; 30th.
   
   
    )
   
  ;; this code actually invokes the 'my-mod1 module, so that the
  ;; code runs.
  (require 'my-mod1)