gpt4 book ai didi

list - Haskell:从列表中一一打印 Int

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

我有一个关于我想在 Haskell 中做的事情的简短问题。
我的主要目标是制作一个从 1 到特定值 y 的整数列表。像[1..y],打印这个列表,每个数字之间有空格

假设我有 [1..8]

我想要的输出是(“_”代表空格):

_1_2_3_4_5_6_7_8

我玩过一些不同的东西,但没有任何运气

这基本上就是我到目前为止所得到的
printLst :: [Int] -> String
printLst (x:xs) = " " ++ putStr (show x) >> printLst xs

我一直在网上搜索以找到任何解决方案,但我没有找到任何可以帮助我做到这一点的东西。

非常感谢帮助

最佳答案

首先,定义一个函数来转换 IntString ,然后在结果前面加上一个空格。

\x -> ' ' : show x

现在将其映射到您的列表中:
>  map (\x -> ' ' : show x) [1..8]
[" 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"]

现在我们只需要将所有字符串连接成一个:
> concat (map (\x -> ' ' : show x) [1..8])
" 1 2 3 4 5 6 7 8"

这可以使用 concatMap 来简化功能:
> concatMap (\x -> ' ':show x) [1..8]
" 1 2 3 4 5 6 7 8"

这构成了 Monad 的基础列表的实例:
> [1..8] >>= (\x -> ' ' : show x)
" 1 2 3 4 5 6 7 8"

或者更简单地说,使用函数组合
> [1..8] >>= (' ' :) . show
" 1 2 3 4 5 6 7 8"

一旦你有了最终的字符串,现在你可以担心打印它了。
> putStrLn $ [1..8] >>= (' ' :) . show
1 2 3 4 5 6 7 8

关于list - Haskell:从列表中一一打印 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58632047/

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