Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell映射函数到列表_Haskell - Fatal编程技术网

Haskell映射函数到列表

Haskell映射函数到列表,haskell,Haskell,我是Haskell的新手,我有以下问题。我必须创建一个数字列表[f1、f2、f3…],其中fix=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]] 因此,如果我把列表=[1,2,3],输出是[1,1,1,1][2,4,8,16],[3,9,27,81],而不是[1,4,27] 你能告诉我哪里出了问

我是Haskell的新手,我有以下问题。我必须创建一个数字列表[f1、f2、f3…],其中
fix=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]]
因此,如果我把列表=[1,2,3],输出是[1,1,1,1][2,4,8,16],[3,9,27,81],而不是[1,4,27]


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

你的
匹配
是另一个名字的标准函数。您需要改为使用(您可以将其视为并排在两个列表上的映射)


这是家庭作业吗?

您当前正在为每个输入值创建一个列表。 您需要做的是递归地计算适当的 每个输入值的功率,如下所示:

match f [] = []
match f (x:xs) y = (f x y) : (match f xs y+1)
然后,您可以将其称为
match pow[1,2,3]1

这相当于使用并提供所需的函数(
pow
)、输入列表(
[1,2,3]
)和指数列表(从一到无穷大的惰性列表)作为参数。

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

powers = [(^y) | y <- [1..4]]
($)
将其左(第一)参数应用于右(第二)参数

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

zipWith ($) powers [1,2,3] -- returns [1,4,27]
powers = [(^y) | y <- [1..]]

不,这不是家庭作业。我在哈斯凯尔寻找练习,我找到了,我想我可以试试,因为我正在努力学习哈斯凯尔。我会试试zipWith谢谢。嘿——这就是我模仿OP设计的结果
powers = [(^y) | y <- [1..]]
zipWith (^) [1,2,3] [1..] -- returns [1,4,27]