gpt4 book ai didi

haskell - 列表理解 Haskell 中的算术序列问题

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

我写了一个这样的函数:

constGrid :: a -> [[a]]
constGrid c = take 3 [take 3 [i,i ..] | i <- [c,c ..]]

我用以下方式调用它:

print(constGrid 'a')

应该打印

["aaa","aaa","aaa"]

或任何整数或 bool 值替换'a'

当我评论第一行时它可以工作,但是当我打开它时,它会给出如下错误:

[1 of 1] Compiling Main             ( test.hs, test.o )

test.hs:17:46: error:
• No instance for (Enum a)
arising from the arithmetic sequence ‘c, c .. ’
Possible fix:
add (Enum a) to the context of
the type signature for:
constGrid :: a -> [[a]]
• In the expression: [c, c .. ]
In a stmt of a list comprehension: i <- [c, c .. ]
In the second argument of ‘take’, namely
‘[take 3 [i, i .. ] | i <- [c, c .. ]]’

我的功能有什么问题吗?我不应该改变第一行的任何内容。

最佳答案

如果目标是获得无限的 i 列表,那么您需要重复 i

但是,如果您只想要有限的数字,请注意,replicate n itake n (repeat i) 的更简短表达方式

这两种方法都可以在不受列表元素类型限制的情况下工作 - 然而,正如您所发现的,“范围”表示法需要 Enum

关于haskell - 列表理解 Haskell 中的算术序列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60523922/

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