Question: I ' m having an issue with correctly simplifying the arithmetic expression in the Lisp code below could you help solve the issue? The description

I'm having an issue with correctly simplifying the arithmetic expression in the Lisp code below could you help solve the issue? The description of the program and the code are included (PLZ add a screenshot of the code running properly)
THE DESCRIPTION :
Create a LISP program for the simplification and evaluation of arithmetic expressions
(PEMDAS).
The program, when executed, should prompt the user to enter an arithmetic expressions
("Enter arithmetic expression: ")The expression should be a linear combination of single letter variables. The program will then simplify the expression (like below):
Enter arithmetic expression: 2x +13+ y - x
Simplification: x + y +13
and then it 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, then ask for a new expression to evaluate. If the answer is 'n', then it will simply ask for a new expression to evaluate. The program will quit with command 'quit' entered at the expression prompt.
Example of I/O(in the case of y:
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:
THE CODE:
(defun simplify-expression (expr)
"Function to simplify arithmetic expression"
(let*((terms (split-sequence:split-sequence #\+ expr))
(simplified-terms (mapcar #'(lambda (term)
(string-trim "" term))
terms))
(final-simplified (format nil "~{~a~^+ ~}" simplified-terms)))
final-simplified))
(defun evaluate-expression (expr values)
"Function to evaluate arithmetic expression"
(let*((tokens (split-sequence:split-sequence #\+ expr))
(evaluated-tokens (mapcar #'(lambda (token)
(eval (read-from-string token)))
tokens))
(result (apply #'+ evaluated-tokens)))
result))
(defun main ()
"Main function to run the program"
(format t "Enter arithmetic expression (or 'quit' to exit):~%")
(loop
(format t ">")
(finish-output)
(let ((input (read-line)))
(if (string= input "quit")
(progn
(format t "Good Bye!~%")
(return)))
(let*((simplified (simplify-expression input)))
(format t "Simplification: ~a~%" simplified)
(format t "Evaluate? (y/n): ")
(finish-output)
(let ((choice (char-downcase (read-char))))
(cond
((char= choice #\y)
(let*((vars (remove-duplicates (remove-if-not #'alpha-char-p (coerce simplified 'list)))))
(format t "Provide variable values~%")
(let ((values (make-hash-table :test 'equal)))
(loop for var in vars do
(progn (format t "~a: " var)
(setf (gethash var values)(read))))
(format t "Expression value: ~a~%***~%"(evaluate-expression simplified values))))
((char= choice #
)
nothing))
(t (format t "***~%"))))))))
(main)

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!