Question: 1 Functions with Multiple Arguments ( with Deferred Substitutions ) Start with the f 1 WAE interpreter for deferred substitution, and extend the implementation to

1 Functions with Multiple Arguments (with Deferred Substitutions)
Start with the f1WAE interpreter for deferred substitution, and extend the implementation to support any number of arguments to a function (including zero), and any number of arguments (including zero) in a function application:As with homework 1, you must change the f1 WAE datatype, and you must thus provide a parse function that produces values of your modified f1WAE datatype. It must accept a quoted expression and produce an nWAE value. Similarly, you must provide a parse-defn function to parse definitions.
See homework 1 for details on these functions.
You must also provide an interp-expr function with signature:
fnWAE (listof FunDef)-> Number
This function should be a very simple wrapper for your interp function, which our tests will call on the results of your parsers. If yours is more than a few lines (one line is possible), you may be overthinking it.
2 Errors
Your interpreter and parser must obey the formats and precedence rules described in homework 1.
Otherwise, assume that the input to your parser is a well-formed program.
3 Conditionals
Add if0, a conditional expression. It has three subexpressions:2 Errors
Your interpreter and parser must obey the formats and precedence rules described in homework 1. Otherwise, assume that the input to your parser is a well-formed program.
3 Conditionals
Add if0, a conditional expression. It has three subexpressions:
fnWAE>=cdots
|if0||
1
Evaluating an if0 expression evaluates the first subexpression; if it produces 0, then the result of the entire expression is the result of the second subexpression. Otherwise, the result is the result of the third subexpression.
Examples:
(test (interp-expr (parse '{if0012})'())1)
(test (interp-expr (parse '{if0123})'())3)4 Negative predicate
Implement, in the fnWAE language (without any extensions, i.e., you cannot add new kinds of expressions to the language or to your interpreter), a predicate neg? that determines if an integer is negative. That is, write a defun like this one that can be passed to your parse function and then used with your interp function (with a suitable expression that calls it):
{deffun neg? x}...}
It must return either 0(if the input is negative), or 1(if not). The number 0 is not itself considered negative.
5 Multiplication on integers
As you did in the previous problem, implement (in the fnWAE language without any extensions), a function mult that computes the product of two integers.
{deffun mult x y}...}
6 Handin instructions
Provide definitions for parse, parse-defn, and interp-expr, as above.
Provide a PLAI-level definition of mult-and-neg-deffuns that is bound to a list of (unparsed) deffuns that contains both neg? and mult as well as any helper functions you need:
1 Functions with Multiple Arguments ( with

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!