這裏的一個舒適的事情是,標準的Haskell列表是一個很好的堆棧(自然,記住堆棧是一個更受限制的列表)。你的功能可能看起來像這樣:
--takes one string and uses a stack to convert it to another string
doSomethingWithStack :: String -> [String] -> String
doSomethingWithStack str stack =
let str' = --here you embody your points 2 and 3
stack' = --stack top is (head stack), push is (x : stack), pop is (tail stack)
--... any change you'd want to make to any value turns into a new variable
in case stack'' of --check the final variables
[] -> str'' --if stack is empty, end
_ -> doSomethingWithStack str'' stack'' --if not, repeat
--now, to make it pretty
fancyWrapper :: String -> String
fancyWrapper str = doSomethingWithStack str [] -- empty list is an empty stack
--because you should strive to separate pure and impure functions
--, I suggest that you do the print elsewhere, say
main = do
str <- getLine
print $ fancyWrapper str
希望這既不是太少,也不是太多。一旦遇到問題,請嘗試並詢問更具體的問題。
感謝您的回答。該函數應該首先得到一個字符串。這是否符合你提供的結構? – jason 2013-03-10 20:57:48
當你說「得到一個字符串」,你的意思是從命令行?如果是這樣,在'main'的'do'塊中添加'getLine'。 – 2013-03-10 21:55:17
我的意思是功能將被稱爲像這樣使用擁抱: 函數「stackoverflow」 – jason 2013-03-10 22:02:52