Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Check the Lisp program below and make sure it behaves as same as the given instruction and make the necessary adjusments if needed. THE CODE:

Check the Lisp program below and make sure it behaves as same as the given instruction and make the necessary adjusments if needed.
THE CODE:
(defun simplify-arithmetic-expression (expression)
(let*((simplified (remove-if #'(lambda (char)(char= char #\space)) expression))
(terms (split-sequence:split-sequence #\+ simplified))
(simplified-terms (mapcar #'(lambda (term)
(string-trim "" term))
terms))
(final-simplified (format nil "~{~a~^+ ~}" simplified-terms)))
final-simplified))
(defun evaluate-arithmetic-expression (expression values)
(let*((tokens (split-sequence:split-sequence #\+ expression))
(evaluated-tokens (mapcar #'(lambda (token)
(eval (read-from-string token)))
tokens))
(result (apply #'+ evaluated-tokens)))
(format t "Expression value: ~a~%" result)))
(defun main ()
(loop
(format t "Enter arithmetic expression: ")
(let ((input (read-line)))
(cond ((string= input "quit")
(format t "Good Bye!~%")
(return))
(t
(let*((simplified (simplify-arithmetic-expression input)))
(if (string= simplified "INVALID")
(progn
(format t "Invalid expression. Please enter a valid arithmetic expression.~%")
(return))
(progn
(format t "Simplification: ~a~%" simplified)
(format t "Evaluate (y/n)?")
(let ((decision (read-line)))
(cond ((string= decision "y")
(format t "Provide variable values~%")
(let ((values (make-hash-table :test 'equal)))
(loop for var across (remove-duplicates (remove-if-not #'alpha-char-p (coerce simplified 'list)))
do (progn (format t "~a: " var)
(setf (gethash var values)(read))))
(evaluate-arithmetic-expression simplified values)))
((string= decision "n")
(format t "***~%"))
(t (format t "Invalid choice.~%"))))))))))))
(main)
THE INSTRUCTION :
Create a program for the simplification and evaluation of arithmetic expressions. The program, when executed, should prompt the user to enter an arithmetic expression:
> exeval
Enter arithmetic expression: 2x +13+ y - x
The expression should be a linear combination of single letter variables. The program will then simplify the expression:
> exeval
Enter arithmetic expression: 2x +13+ y - x
Simplification: x + y +13
and then will ask whether to evaluate the expression. If the answer is 'y' then it will prompt for values for each of the variables and evaluate the expression:
> exeval
Enter arithmetic expression: 2x +13+ y - x
Simplification: x + y +13
Evaluate? y
Provide variable values
x : 1
y : 3
Expression value: 18
***
Enter arithmetic expression:
then ask for a new expression to evaluate. If the answer is 'n', then it will simply ask for a new expression to evaluate:
> exeval
Enter arithmetic expression: 2x +13+ y - x
Simplification: x + y +13
Evaluate? n
***
Enter arithmetic expression:
The program will quit with command 'quit' enter at the expression prompt:
> exeval
Enter arithmetic expression: 2x +13+ y - x
Simplification: x + y +13
Evaluate? n
***
Enter arithmetic expression: quit
Good Bye!
(PLZ include screenshots of the execution the program for assurance.)

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Data Analysis Using SQL And Excel

Authors: Gordon S Linoff

2nd Edition

111902143X, 9781119021438

More Books

Students also viewed these Databases questions

Question

What do you plan on doing upon receiving your graduate degree?

Answered: 1 week ago

Question

5. Explain the supervisors role in safety.

Answered: 1 week ago