Я пишу функцию, которая берет арифметическое инфиксное выражение в кавычках, включающее числа, переменные и операторы, и преобразует его в префиксную нотацию.
Например:
(infix->prefix '(2 + 3 * x ^ 5 + a))
будет оценивать
(+ 2 (+ (* 3 (^ x 5)) a))
or
(+ (+ 2 (* 3 (^ x 5))) a)
В порядке старшинства у нас есть: +,-,*,/ и ^.
Это то, что у меня есть до сих пор
(define (infix->prefix lst)
(if (list? lst)
(if (null? (cdr lst))
(car lst)
(list (cadr lst)
(infix->prefix (car lst))
(infix->prefix (cddr lst)))
)
lst)
)
Это дает правильную нотацию префикса, но без приоритета. Он оценивает
(+ 2 (* 3 (^ x (+ 5 a))))
Это правильный порядок, но круглые скобки отключены из-за приоритета. Я провел некоторое исследование, и мне трудно понять, как его добавить.
Любые отзывы или предложения о том, как реорганизовать мой код, были бы потрясающими. Спасибо!