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”。