【发布时间】:2020-05-22 05:16:58
【问题描述】:
我目前正在学习 haskell,但我的逻辑有问题,尤其是如何执行某些操作。
我想要做什么
- 主要目标是拥有一个包含多个缺少单词的句子(语句)的函数,但一次只需要打印一个句子。
- 我们还需要另一个函数,它打印出 4 个选项,这些选项将为第一个函数包含/打印的每个语句填写一个完整的句子(然后用户选择这些选项来填写句子)。
例如。 - “这个 ___ 包含 ____”
选项:- 字符串、单词
- 列表、选项
- 等
- 等
- 现在我们需要另一个函数,它将从函数 1 中获取每个句子,以及用户从函数 2 中选择的选项,然后创建一个完整的句子并将其返回给用户。
我不确定我们是否需要一个单独的函数来接收用户输入并存储他们从函数 2 中选择的值来完成函数 1 的句子,或者我们是否也可以在函数 2 中添加它。
我能创造什么
我能够执行上述操作,但我只能在一个句子中执行此操作,并且所有操作都在一个函数中(在我看来并没有使代码高效和可重用)。
我再次尝试了我想到的结构(如上所示),但正如我所说的那样,我被逻辑困住了,不确定如何去做。下面我有两个版本的代码,第一个版本展示了我的目标,但我只能用一句话来做,第二个版本是我现在尝试使用多个功能,但我不确定下一步该去哪里
这是第一个版本的代码
--First Version
import Data.List
import System.IO
main :: IO()
sentences = do
putStrLn "The Cat is ______ from ______ the city \n"
putStrLn "Here are your options:"
putStrLn "A. big, nearby"
putStrLn "B. Nearby, in"
putStrLn "C: You, By"
putStrLn "D: By, Yourself"
option <- getChar
if (option == 'A' || option == 'a')
then putStrLn "The Cat is big from nearby the city"
else if (option == 'B' || option == 'b')
then putStrLn "The Cat is nearby from in the city"
else putStrLn "Error"
main = sentences
这是第二个版本的代码(我在哪里)
import Data.List
import System.IO
main :: IO()
--This function contains all the sentences
sentences = do
putStrLn "\nThe Cat is ______ from the ______ \n"
putStrLn "\nThe Cow belongs to ______ from ______ ______ \n"
putStrLn "\nThe Man lives in ______ and is neighbours with ______ \n"
-- This function basically prints after each sentence is displayed to signal to the user that they need to select an option
optionsText = do
putStrLn "Here are your options: \n"
-- These Functions contain the different options for different sentences
options1 = do
putStrLn "A. Running, dog"
putStrLn "B. Hiding, Man"
putStrLn "C. Eating, Trash"
putStrLn "D. Calling, Roof"
options2 = do
putStrLn "A. Tom, Next, Door"
putStrLn "B. Rick, My, Neighbour"
putStrLn "C. Man, farm, place"
putStrLn "D. Sheltor, Animal, Factory"
option3 = do
putStrLn "A. Australia, Me"
putStrLn "B. UK, Actor"
putStrLn "C. Florida, Tom"
putStrLn "D. House, Dog"
【问题讨论】:
-
如果我试图解决这个问题的方法太复杂并且有更简单的方法,请提及。就像我说的那样,我在如何继续前进的逻辑和语法方面遇到了麻烦
-
回过头来看,也许我可以把第一个版本的整个代码做成一个函数?然后多次调用该函数,每次更改句子和选项?
-
你的问题是什么?
-
如何使用我拥有的代码版本 2 处理“我正在尝试做的事情”部分
-
第一个版本可以通过拆分答案部分并使用模式匹配进行抽象,而不是使用多个
if else
标签: haskell recursive-datastructures