gpt4 book ai didi

列表的 Haskell 映射函数

转载 作者:行者123 更新时间:2023-12-02 06:21:13 26 4
gpt4 key购买 nike

我是 Haskell 的新手,遇到以下问题。我必须创建一个数字列表 [f1, f2, f3...],其中 fi x = x ^ i。然后我必须创建一个将 fi 应用于数字列表的函数。例如,如果我有一个列表 lis = [4,5,6,7..] 输出将是 [4^1, 5^2,6^3, 7^4 ...]。这是我到目前为止写的:

powers x= [x^y |y<-[1,2,3,4]]

list = [1,2,3,4]

match :: (x -> xs) -> [x] -> [xs]
match f [] = []
match f (x:xs) = (f x) : ( match f xs )

所以如果我把 list = [1,2,3] 输出为 [1,1,1,1][2,4,8,16],[3,9,27,81] 而不是[1,4,27]

你能告诉我哪里出了问题并指出正确的方向吗?

最佳答案

第一个问题是 powersInt -> [Int] 类型。我认为,您真正想要的是 [Int -> Int] 类型的东西——Int -> Int 函数的列表,而不是采用 的函数code>Int 并返回 Int 的列表。如果您像这样定义 powers:

powers = [(^y) | y <- [1..4]]

您可以使用 zipWith 将每个幂应用于列表中相应的元素,如下所示:

zipWith ($) powers [1,2,3] -- returns [1,4,27]

($) 将其左(第一个)参数应用于其右(第二个)参数。

请注意,使用此处定义的 powers 会将返回列表的长度限制为 4。如果您希望能够使用任意长度的列表,则需要制作 powers 一个无限列表,如下所示:

powers = [(^y) | y <- [1..]]

当然,正如 dave4420 指出的,更简单的技术是简单地使用

zipWith (^) [1,2,3] [1..] -- returns [1,4,27]

关于列表的 Haskell 映射函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179669/

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