gpt4 book ai didi

haskell - 像命令式程序一样跟踪 Haskell 中的程序变量

转载 作者:行者123 更新时间:2023-12-02 19:02:38 25 4
gpt4 key购买 nike

我很难找出每次用户与我的程序交互时如何进行更改。这很难解释,所以这里有一个例子(Haskell + wxhaskell):

simulate :: Int -> Frame () -> IO ()
simulate qNr window = do
fdata <- readFile "qarchive"
case (split (listTake (split fdata '\n') qNr 0) '#') of
(qst:a:b:c:coralt:answer:x) -> do
-- GUI Controls Initialization (buttons,text,etc...)
nextButton <- button window [text := "Next Question ->", on command := set infoField [text := "Next Question"], position := pt 185 155]
return ()

main :: IO ()
main = start gui

gui :: IO ()
gui = do
window <- frame [text := "Question program", clientSize := sz 640 480]
headerText <- staticText window [text := "Title Text", fontSize := 20, position := pt 5 5]
simulate 0 window
return ()

我希望在按下“下一个问题”按钮时更改一些小部件。我想将这些小部件更改为我从文件中读取的某些值。如何跟踪当前问题的编号?我实际上无法将 QuestionNumber 作为变量递增,因为 Haskell 不允许这样的事情。我想还有另一种方法可以做到这一点。

示例:

Initialize GUI
Read data from file
If button is pressed, increment question number by 1 and change widgets.

您如何以实用的方式解决此类问题?

最佳答案

函数的参数是变量。当用户输入新值时,将这些值传递给函数。

例如,一个根据用户输入更新值的简单程序:

main = loop 0

loop n = do
print n
v <- read `fmap` getLine
loop (n + v)

请注意,根据用户提供的内容,对“loop”的递归调用每次都会传递不同的值。

这是函数式编程的基本思维方式——命令式程序中循环中的局部可变变量变成了函数式程序中递归函数的参数。

关于haskell - 像命令式程序一样跟踪 Haskell 中的程序变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3326299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com