ユーザーが私のプログラムを操作するたびに何かを変更する方法を見つけるのに苦労しています。説明するのが難しいので、ここに例を示します (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 ()
「次の質問」ボタンが押されたときにいくつかのウィジェットを変更したい。これらのウィジェットを、ファイルから読み取った値に変更したいと考えています。現在の質問番号を追跡するにはどうすればよいですか? Haskell はそのようなことを許可していないため、実際に questionNumber を変数としてインクリメントすることはできません。やり方は他にもあると思います。
例:
Initialize GUI
Read data from file
If button is pressed, increment question number by 1 and change widgets.
この種の問題に機能的な方法でどのように対処しますか?