Я использовал реализацию стека с этого сайта:
http://zoo.cs.yale.edu/classes/cs201/Fall_2007/materials/pdfs/stacks.pdf
Стек, позвольте мне, ну, я думаю, "зеркально" мой список. после того, как я проверил, каким символом был введенный пользователем символ, я просто вставил соответствующий символ в свой стек.
(define (makeListFromSymbols myList)
(display "Length of List = ")
(display(length myList)) (newline)
(cond
((null? myList)
(display "LIST IS NULL")(newline)
(popTheRestOfStack)
)
((eq? #\0 (car myList))
(display "Equals 0")
(stackForExpression 'push! #\0)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\1 (car myList))
(display "Equals 1")
(stackForExpression 'push! #\1)
(makeListFromSymbols(cdr myList) )
(newline)
)
((eq? #\2 (car myList))
(display "Equals 2")
(stackForExpression 'push! #\2)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\3 (car myList))
(display "Equals 3")
(stackForExpression 'push! #\3)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\4 (car myList))
(display "Equals 4")
(stackForExpression 'push! #\4)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\5 (car myList))
(display "Equals 5")
(stackForExpression 'push! #\5)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\6 (car myList))
(display "Equals 6")
(stackForExpression 'push! #\6)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\7 (car myList))
(display "Equals 7")
(stackForExpression 'push! #\7)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\8 (car myList))
(display "Equals 8")
(stackForExpression 'push! #\8)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\9 (car myList))
(display "Equals 9")
(stackForExpression 'push! #\9)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\+ (car myList))
(display "Equals +")
(handleAdditionOperator)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\/ (car myList))
(display "Equals /")
(handleDivisionOperator)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\- (car myList))
(display "Equals -")
(handleSubtractionOperator)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\* (car myList))
(display "Equals *")
(handleMultiplicationOperator)
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\( (car myList))
(display "Equals (")
(stack1 'push! #\( )
(makeListFromSymbols(cdr myList))
(newline)
)
((eq? #\) (car myList))
(display "Equals )")
(popAndTransferUntilLeftBracket)
(makeListFromSymbols(cdr myList))
(newline)
)
(else (display "Character is invalid")(newline) (makeListFromSymbols(cdr myList)))
)
)
если у кого-то возникнут подобные вопросы по этому поводу или по поводу моего кода / функций, напишите мне. (я думаю, что мой адрес электронной почты отображается на моей странице пользователя?)
У меня также есть алгоритм псевдокода для преобразования инфикса в нотацию после исправления (это было назначение здесь)