# [plt-scheme] htdp section 17.7

 From: wooks . (wookiz at hotmail.com) Date: Fri Jul 7 20:10:02 EDT 2006 Previous message: [plt-scheme] htdp section 17.7 Next message: [plt-scheme] htdp section 17.7 Messages sorted by: [date] [thread] [subject] [author]

```Apologies if this is sent twice ...... can't remember whether I pressed send
the first time.

Please check my data analysis and examples.

(define-struct mul (left right))
(define-struct div (left right))
(define-struct sub (left right))
(define-struct funcDef (name parm expr))
(define-struct funcInv (name expr))

An expression is either

a variable
a number or
a multiplication or
a function invocation

where

A multiplication is a list (* left right)
where
left is an expression
right is an expression

An addition is a list (+ left right)
where
left is an expression
right is an expression

A subtraction is a list (- left right)
where
left is an expression
right is an expression

A division is a list (/ left right)
where
left is an expression
right is an expression

A variable is a symbol

A funcInv (function invocation) is a structure (name expr) where
name is a symbol
expr is an expression

A funcDef (function defiinition) is a structure (name parm expr)
where

name is a symbol
parm is a symbol
expr is an expression

CONTRACT
evaluate-with-one-def : expression funcDef -> number or error
Calculates and returns the value of the expression if it is a numeric
expression that does not contain a function invocation.

If the expression contains a function invocation and the invoked function
matches funcDef substitute the functions body in the expression and
calculate and return its value.

If the expression invokes a function other than that specified in funcDef
return error.

EXAMPLES
(evaluate-with-one-def (make-funcInv 'square 8) (make-funcDef 'square
'num
(make-mul 'num
'num))) = 64
(evaluate-with-one-def (make-funcInv 'square (make-add 3 4)) (make-funcDef
'square

'num

(make-mul 'num 'num))) = 49

(evaluate-with-one-def 8   (make-funcDef 'square
'num
(make-mul 'num 'num))) = 8

(evaluate-with-one-def (make-mul 7 11)  (make-funcDef 'square
'num
(make-mul 'num 'num))) = 77

(evaluate-with-one-def (make-funcInv 'circle (make-add 3 4)) (make-funcDef
'square

'num

(make-mul 'num 'num))) = ERROR

(evaluate-with-one-def (make-funcInv 'square (make-funcInv 'square 3))
(make-funcDef 'square 'num (make-mul 'num 'num))) =
81

(evaluate-with-one-def (make-add 7 (make-funcInv 'square (make-funcInv
'square 3)))
(make-funcDef 'square 'num (make-mul 'num 'num))) =
88

(evaluate-with-one-def (make-funcInv 'circle (make-funcInv 'square 7))
(make-funcDef 'square 'num (make-mul 'num 'num))) =
ERROR

(evaluate-with-one-def (make-funcInv 'square (make-funcInv 'circle 7))
(make-funcDef 'square 'num (make-mul 'num 'num))) =
ERROR

----Original Message Follows----
From: Matthias Felleisen <matthias at ccs.neu.edu>
To: wooks . <wookiz at hotmail.com>
CC: plt-scheme at list.cs.brown.edu
Subject: Re: [plt-scheme] htdp section  17.7
Date: Thu, 6 Jul 2006 14:12:38 -0400

On Jul 5, 2006, at 7:11 PM, wooks . wrote:

>
>http://www.htdp.org/2003-09-26/Book/curriculum-Z-H-22.html
>
>re 17.7.2 - Am I right to say that the data definitions for  parameter name
>and expression have to allow for "nulls".

If you mean to say that a parameter list is possibly empty, the  answer is
"in principle, yes" but you may assume that is non-empty if  that helps you.
As you may have noticed, Beginner - Intermediate  don't allow empty
parameter lists.

>I ask with particular reference to problems 3 and 5 which seem to  require
>a null parameter and a null expression respectively.

Huh?

>re 17.7.3 - Can I have an example of what is required as I don't
>sufficiently "get" the problem as it is set.
>
>thanks.

1. Take any program you have written. That's an example of the kind  of
information you're dealing with. Translate it into Scheme data.  Done. Or
translate it into Java data if this makes it easier for you.

2. The contract for the function is

evaluate-with-defs : Expression List-of-definitions -> Value

But of course this only makes sense after you have defined the sets
(classes) Expression, List-of-definitions, Value.

I recommend Value = Number to make life easy.

2a. I recommend you think of the Expression argument as the thing you  type
into the Interactions window; the List-of-definitions as the  function
definitions that you typed into the Definitions Window (and  then you hit
RUN); and the Value is what the Interaction Windows  delivers at the end.

3. This exercise separates those who have studied the design recipe  from
those who haven't. Or those who will be great programmers from  those who
will struggle.

Just do it. -- Matthias

P.S. Students who have never programmed before but follow the DR to  the dot
tend to solve this problem in a couple of hours, max. They  are also usually
girls but that's a coincidence.

>
>
>_________________________________________________