Description

Introduction
In this assignment, you will implement a calculator using Scheme. For the assignment you can use The MIT Scheme interpreter which is installed on our UNIX systems (e.g. ow.sabanciuniv.edu) or you can install and use a MIT Scheme interpreter for Windows.

The Task
The assignment is divided into several parts. Each part is connected to another and by combining them, you will obtain a leftassociative calculator in Scheme:

Write a procedure named twoOperatorCalculator which will calculate leftassociative in x addition and subtraction operations. Operations are given as a list and the output should be the result of these operations. Below is a sample output for this procedure:
1 ]=> (twoOperatorCalculator ^{0}(1 + 15 32=5 + 2))^{0} V alue : 38=5

Write a procedure named fourOperatorCalculator which will calculate leftassociative in x multiplication and division operations. Operations are given as a list and the output should be a list which contains in x addition, in x subtraction operations and the results of multiplication and division operations. Below is a sample output for this procedure:
1 ]=> (fourOperatorCalculator ^{0}(1 + 3 
5 
4=5 
8 + 2 
1))^{0} 

V alue : 15 : (1 + 15 32=5 + 2)^{0}
3. Write a procedure named calculatorNested which will calculate operations in nested
1
lists. Some operations may have precedence over other operations and these operations are represented using nested lists. This procedure should calculate the operations inside nested lists and return a list which contains in x addition, subtraction, multiplication, division operations and the results of nested lists. Below is a sample output for this procedure:
1 ]=> (calculatorNested 
^{0}(1 + 
(1+1 2) 5 4=5 8+(5 3) 1))^{0} 

V alue : 13 
:(1+3 
5 
4=5 8 
+ 2 
1) 

1 ]=> (calculatorNested 
^{0}(1 + 
2 
(2 
(3 + 5)=2)))^{0} 

V alue : 24 
:(1+2 
2) 
Note that there can be nested lists inside other nested lists. In this case calculatorNested should calculate all nested lists.

Write a procedure named checkOperators which will make an input check for the calculator. Allowed operations on the calculator are in x addition, in x subtraction, in x multiplication and in x division. These operations are given as elements of a list. The list can also contain nested lists which can have their own calculations. Below is a sample output for this procedure:
1 ]=> (checkOperators ^{0}(1 + (1 + 1 
2) 
5 
4=5 
8+(5 3) 
1)) 

V alue : # t

Write a procedure named calculator which will calculate in x addition, subtraction, multiplication and division operations. Operators should be leftassociative. Multiplication and division should have precedence over addition and subtraction. Operations surrounded by parenthesizes should have precedence over other operations. Operations are given as a list. The procedure should rst check whether the given list is syntactically correct. If the list is not syntactically correct, then the procedure should return false, otherwise it should calculate the operations and give the output as a result. Below is a sample output for this procedure:
1 ]=> (calculator^{0}(1 + (1 + 1 
2) 
5 
4=5 
8+(5 3) 
1)) 

V alue : 38=5
Please use recursion and use let and let in your code only for debugging purposes.
2

How to Submit


On SUCourse, submit your .scm le using the following format: idhw5.scm. DO NOT compress/bundle/archive.



Important: SUCourses clock may be o a couple of minutes. Take this into account to decide when to submit.



No homework will be accepted if it is not submitted using SUCourse.



You must write your les by yourself.



Start working on the homework immediately.



Good luck ðŸ™‚

3