Я пишу функцию, которая принимает цитированное арифметическое инфиксное выражение, включающее числа, переменные и операторы, и преобразует его в префиксную нотацию.Преобразование префикса приоритета оператора - Схема
Например:
(infix->prefix '(2 + 3 * x^5 + a))
будет вычисляться
(+ 2 (+ (* 3 (^ x 5)) a))
или
(+ (+ 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))))
Правильный заказ, но скобки закрыты из-за приоритета. Я провел некоторое исследование, и мне сложно определить, как его добавить.
Любая обратная связь или предложения о том, как реорганизовать мой код, были бы замечательными. Благодаря!
Спасибо! Назначение для класса, и я не думаю, что мы можем использовать ракетку, но я буду искать ее для дальнейшей помощи. – user2762848
Если это для класса, ваш инструктор, безусловно, ведет вас к определенной методике синтаксического анализа ...? –
... или, может быть, он или она просто хочет, чтобы вы разбили его, используя сначала операторов с наименьшим приоритетом, а затем разделите, пока не получите полное дерево? В любом случае, я предполагаю, что определенная стратегия была описана в задании. –