gpt4 book ai didi

haskell - 如何在单个函数中执行多个语句?

转载 作者:行者123 更新时间:2023-12-05 08:27:16 25 4
gpt4 key购买 nike

我正在学习 Haskell,为了完成一项作业,我必须打印蛇梯游戏。一开始,我尝试打印电路板,这就是我所做的。

import Data.List
aRow :: Int -> String
aRow n = "+" ++ take (4*n) (intercalate "" (repeat "---+")) ++ "\n|" ++ take (4*n) (intercalate "" (repeat " |")) ++ "\n"

board :: Int -> Int -> IO()
board 1 y = putStrLn (aRow y)

我想要另一个 board 实例,它接受参数 x 和 y

board x y = putStrLn (aRow y)
board (x-1) y

我知道我不能像这样调用多个语句,但是任何人都可以提供一些关于我如何处理这个的见解吗?我想用参数 'y' 调用 aRow 并执行 'x' 次。

谢谢。

此外:当我调用 board 1 y 时,我将其作为输出: 板 1 5
+---+---+---+---+---+
| | | | | |

最佳答案

我认为最简洁的方法是在不执行任何 IO 的情况下创建电路板,然后在最后仅使用 IO 将其打印出来。

您可以使用concatreplicate 来实现:

board :: Int -> Int -> String
board x y = concat (replicate y (aRow x))

您可能在底部漏掉了一行,但我会让您弄明白的!

顺便说一句,take (4*n) (intercalate ""(repeat "---+"))concat (replicate n "---+ ") 所以你可以将 aRow 写成:

aRow :: Int -> String
aRow n = '+' : concat (replicate n "---+")
++ "\n|" ++ concat (replicate n " |")
++ "\n"

编辑:我会使用 unlines::[String] -> String 在多行上连接多个 String:

aRow :: Int -> String
aRow n = unlines
[ '+' : concat (replicate n "---+")
, '|' : concat (replicate n " |")
]

关于haskell - 如何在单个函数中执行多个语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035575/

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