Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

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

Students also viewed these Databases questions