我想在 Haskell 函数中使用堆栈,但我不知道如何使用它。我的功能应该像这样工作:
- 取一个字符串
- 将此输入字符串的一些元素放入输出字符串,并将其他元素放入堆栈。
- 也将元素弹出到该输出字符串。
- 递归执行 2 和 3 直到堆栈为空。
- 当堆栈为空时打印输出字符串。
我不知道何时何地创建该堆栈。由于我是 Haskell 编程的新手,所以我自己无法弄清楚。由于我还没有创建任何代码,我也无法显示任何代码。你能告诉我这个函数在算法上会是什么样子吗?我应该在哪里定义堆栈和输出字符串?谢谢。
这里有一件让人舒服的事情是标准的 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
希望这既不是太少也不是太多。一旦遇到问题,试一试并提出更具体的问题。