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

Check the Lisp program below and make sure it behaves as same as the given instruction and make the necessary adjusments needed.
THE CODE:
(defun simplify-arithmetic-expression (expression)
(let ((simplified (format nil "~{~a~^+ ~}" expression)))
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 (split-sequence:split-sequence-if #'(lambda (char)(member char '(#\+ #\-))) input))))
(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)))
(loop for var in (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 input 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)

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!