Question: 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

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 Databases Questions!