通过组合和部分应用添加一个值 haskell
adding a value with composition and partial application haskell
我正在尝试使用 Haskell 编写此应用组合和部分应用的函数:
function m n = (m^2) + n
我尝试过:
function m = (m^2).(+)
该方法的问题在于 (+)
是一个二元运算符。因为你把它放在点 .
的右边,所以它不会应用于左边的操作数。所以你写了:
function :: Num a => a -> a -> a
function m = (.) (m^2) (+) -- wrong
这是以下简称:
function m = \n -> ((m^2) ((+) n))
所以这意味着 (+) n
将产生一个函数 (n+)
,我们将该函数应用于 (m^2)
的结果,这没有多大意义。
但是您可以简单地使用:
function :: Num a => a -> a -> a
function m = (+) (m^2)
或:
function :: Num a => a -> a -> a
function m = ((m^2) +)
给定 function m = (+) (m^2)
,如果我们在该函数上应用 n
,我们将获得:
((+) (m^2)) n
-> (+) (m^2) n
-> (m^2) + n
您可以进一步修改 function
并删除 m
参数,其中:
function :: Num a => a -> a -> a
function = (+) . (^ 2)
语法糖用于:
function :: Num a => a -> a -> a
function = (.) (+) (^2)
如果我们现在在函数上应用 m
,它将计算为:
((.) (+) (^2)) m
-> (\x -> (+) ((^2) x)) m
-> (+) ((^2) m)
-> (+) (m^2)
所以我们像前面的命令一样获取状态。
我正在尝试使用 Haskell 编写此应用组合和部分应用的函数:
function m n = (m^2) + n
我尝试过:
function m = (m^2).(+)
该方法的问题在于 (+)
是一个二元运算符。因为你把它放在点 .
的右边,所以它不会应用于左边的操作数。所以你写了:
function :: Num a => a -> a -> a
function m = (.) (m^2) (+) -- wrong
这是以下简称:
function m = \n -> ((m^2) ((+) n))
所以这意味着 (+) n
将产生一个函数 (n+)
,我们将该函数应用于 (m^2)
的结果,这没有多大意义。
但是您可以简单地使用:
function :: Num a => a -> a -> a
function m = (+) (m^2)
或:
function :: Num a => a -> a -> a
function m = ((m^2) +)
给定 function m = (+) (m^2)
,如果我们在该函数上应用 n
,我们将获得:
((+) (m^2)) n
-> (+) (m^2) n
-> (m^2) + n
您可以进一步修改 function
并删除 m
参数,其中:
function :: Num a => a -> a -> a
function = (+) . (^ 2)
语法糖用于:
function :: Num a => a -> a -> a
function = (.) (+) (^2)
如果我们现在在函数上应用 m
,它将计算为:
((.) (+) (^2)) m
-> (\x -> (+) ((^2) x)) m
-> (+) ((^2) m)
-> (+) (m^2)
所以我们像前面的命令一样获取状态。