Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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,基本问题。。。我希望映射到一个列表,并对每个元素应用一个函数,但我希望从另一个函数执行此操作: functionOne :: Int -> Int -> Int --Add x to each element of the list functionOne element x = element + x functionTwo :: [Int] -> (Int -> Int -> Int) -> [Int] functionTwo list fOne =

基本问题。。。我希望映射到一个列表,并对每个元素应用一个函数,但我希望从另一个函数执行此操作:

functionOne :: Int -> Int -> Int --Add x to each element of the list
functionOne element x = element + x 

functionTwo :: [Int] -> (Int -> Int -> Int) -> [Int]
functionTwo list fOne = map list fOne ave --map list by applying functionOne with ave as x
   where 
     ave = ((sum list) / length list)

为什么这不起作用?

您可能想要这个:

functionTwo :: [Int] -> (Int -> Int -> Int) -> [Int]
functionTwo list fOne = map (\el -> fOne el ave) list
   where 
     ave = sum list `div` length list
上面,我们使用匿名函数
(\el->fOne el ave)
,它是将每个
el
映射到
fOne el ave
的函数。这样,我们将
fOne
的第二个参数固定为所需的值

或者

functionTwo :: [Int] -> (Int -> Int -> Int) -> [Int]
functionTwo list fOne = map (flip fOne ave) list
   where 
     ave = sum list `div` length list
注意
div
对于整数除法,
/
仅适用于浮点数

flip f
f
的函数相同,但前两个参数的顺序不同


也可能:
map(`fOne`ave)列表

您可能需要以下内容:

functionTwo :: [Int] -> (Int -> Int -> Int) -> [Int]
functionTwo list fOne = map (\el -> fOne el ave) list
   where 
     ave = sum list `div` length list
上面,我们使用匿名函数
(\el->fOne el ave)
,它是将每个
el
映射到
fOne el ave
的函数。这样,我们将
fOne
的第二个参数固定为所需的值

或者

functionTwo :: [Int] -> (Int -> Int -> Int) -> [Int]
functionTwo list fOne = map (flip fOne ave) list
   where 
     ave = sum list `div` length list
注意
div
对于整数除法,
/
仅适用于浮点数

flip f
f
的函数相同,但前两个参数的顺序不同


也可能:
map(`fOne`ave)list

您能从第一个示例中解释一下“(\el->fOne`ave)”在做什么吗?那我就可以了accept@barbrac这就是函数的语法。它是
\PARAMETER->BODY
,也就是说,在这种情况下,它是一个取值(
el
)并返回
fOne el ave
的函数。为什么要翻转?加法是可交换的,所以只要
map(fOne-ave)list
@amalloy加法就是,但我认为OP想要一般情况,因为她指定了“将ave作为x”。你能从第一个例子解释一下“(\el->fOne-el-ave)”在做什么吗?那我就可以了accept@barbrac这就是函数的语法。它是
\PARAMETER->BODY
,也就是说,在这种情况下,它是一个取值(
el
)并返回
fOne el ave
的函数。为什么要翻转?加法是可交换的,所以只需
map(fOne-ave)list
@amalloy加法是可交换的,但我认为OP想要一般情况,因为她指定了“将ave作为x”。