Будучи новичком в haskell, я решил попробовать реализовать мини-функцию обратной полировки:
Принимает list
типа int
и строковый оператор ('*','+','/','-'
)
примените оператор к элементу tail
и элементу tail-1
вернуть результирующий list
с двумя удаленными элементами, участвующими в операции, и результирующий элемент, добавленный к хвосту как таковой:
Where e0 = original element at index 0
r = result of the operation:
result = [e0,e1,e2...r] (elements popped off: eN, eN-1)
Это код, который у меня есть до сих пор:
import Data.List
import System.IO
step :: [Int] -> String -> [Int]
step stack operator
| (x:y:ys) "*" = (x * y):ys
| (x:y:ys) "+" = (x + y):ys
| (x:y:ys) "-" = (x - y):ys
| (x:y:ys) "/" = (x / y):ys
И это дает мне следующую ошибку компиляции:
• Couldn't match expected type ‘[Char] -> Bool’
with actual type ‘[a3]’
• The function ‘x : y : ys’ is applied to one argument,
but its type ‘[a3]’ has none
In the expression: (x : y : ys) "/"
In a stmt of a pattern guard for
an equation for ‘step’:
(x : y : ys) "/"
Я считаю, что это результат ошибки в моем синтаксисе, любая помощь приветствуется!