Tagged as challenge
Written on 2018-01-31
Write a function random-expression which generates a random math
expression built up by numbers, +, unary/binary -, *, /, ^,
and sqrt. There should be two outputs: (1) the generated expression
in unevaluated form, and (2) the evaluated answer. Decide on and
explain your choice of arguments to random-expression to bound the
size of the expression.
Bonus: Write this in both a dynamically typed language and a strictly typed language.
Extend evaluate-expression to take into account a variable called
operator-table which contains the operators used in random
generation and their arities. For example, the default table might
look like this in Common Lisp:
(defvar *operator-table*
'((+ 2)
(- 1 2) ; unary and binary -
(* 2)
(/ 2)
(expt 2)
(sqrt 1)))
Feel free to add information to the table as you see fit.