Я пытаюсь реализовать функцию (Eval т), которая выполняет следующие действия:ракеток: реализовать функцию (Eval т)
примеры:
(eval '(2 * (1 + 2))) -> 6
(eval '((3 - (4/2)) * 2) -> 2
То, что я до сих пор является:
(define (inner lst)
((cond
((equal? (second lst) '+) +)
((equal? (second lst) '-) -)
((equal? (second lst) '*) *)
((equal? (second lst) '/) /))
(first lst) (third lst)))
(define (eval t)
(cond
((and (number? (first t)) (number? (third t))) (inner t))
((list? (third t)) (eval `(,(first t) ,(second t) ,(inner (third t)))))
((list? (first t)) (eval `(,(inner (first t)) ,(second t) ,(third t))))))
Он работает:
(eval '(1 + (1 + 2))) -> 4
(eval '((1 + 1) + (2 + 2))) -> 6
, но это не работает для таких случаев, как:
(eval '((1 + 1) + (1 + (1 + 1))))
Любая помощь будет принята с благодарностью!