Haskell 当用作map函数的参数时,`$`是什么意思?
我知道$运算符用于避免使用括号。之后出现的任何事物都将优先于之前出现的任何事物 我试图理解它在这种情况下的含义:Haskell 当用作map函数的参数时,`$`是什么意思?,haskell,functional-programming,Haskell,Functional Programming,我知道$运算符用于避免使用括号。之后出现的任何事物都将优先于之前出现的任何事物 我试图理解它在这种情况下的含义: map ($ 3) [(+),(-),(/),(*)] 使用以下代码: instance Show (a -> b) where show a = function main = putStrLn $ show $ map ($ 3) [(+),(-),(/),(*)] 输出是 ["function", "function", "function", "functio
map ($ 3) [(+),(-),(/),(*)]
使用以下代码:
instance Show (a -> b) where
show a = function
main = putStrLn $ show $ map ($ 3) [(+),(-),(/),(*)]
输出是
["function", "function", "function", "function"]
这并不能帮助我理解这里美元的含义。
如何显示更有用的输出?是一个函数,它将函数作为第一个参数,将值作为第二个参数,并返回应用于该函数的值
例如:
Prelude> (1+) $ 2
3
表达式$3是。$的一个示例3是\f->f$3的缩写,或更简单的\f->f$3。因此,它是一个接受函数并将3应用于该函数的函数
对于你的表达:
map ($ 3) [(+),(-),(/),(*)]
因此,输出相当于:
[(3+), (3-), (3/), (3*)] :: Fractional a => [a -> a]
因为+,-,*::Num a=>a->a->a与属于Num typeclass的类型一起工作,并且/::fractal a=>a->a->a与属于fractal type类的类型一起工作,并且所有的fractal类型也都是Num类型,3在这里是一个fractal类型,因此,该列表包含的函数都是a->a类型,其中a的成员为fractal
如何显示更有用的输出
编译器不会跟踪上的Haskell wiki页面中指定的表达式
Haskell编译器不会维护表达式的原样,而是将其转换为机器代码或其他一些低级表示。函数\x->x-x+x::Int->Int可能已优化为\x->x::Int->Int。如果在任何地方使用,它可能已内联并优化为零。变量名x未存储在任何位置
因此,我们不能查看函数内部并导出人类可读的表达式。是一个函数,它将函数作为第一个参数,将值作为第二个参数,并返回应用于该函数的值
例如:
Prelude> (1+) $ 2
3
表达式$3是。$的一个示例3是\f->f$3的缩写,或更简单的\f->f$3。因此,它是一个接受函数并将3应用于该函数的函数
对于你的表达:
map ($ 3) [(+),(-),(/),(*)]
因此,输出相当于:
[(3+), (3-), (3/), (3*)] :: Fractional a => [a -> a]
因为+,-,*::Num a=>a->a->a与属于Num typeclass的类型一起工作,并且/::fractal a=>a->a->a与属于fractal type类的类型一起工作,并且所有的fractal类型也都是Num类型,3在这里是一个fractal类型,因此,该列表包含的函数都是a->a类型,其中a的成员为fractal
如何显示更有用的输出
编译器不会跟踪上的Haskell wiki页面中指定的表达式
Haskell编译器不会维护表达式的原样,而是将其转换为机器代码或其他一些低级表示。函数\x->x-x+x::Int->Int可能已优化为\x->x::Int->Int。如果在任何地方使用,它可能已内联并优化为零。变量名x未存储在任何位置
因此,我们无法查看函数内部并派生出一个人类可读的表达式。此代码甚至不会编译,我假设您所说的函数是指函数。虽然这是有效的代码,但请在运算符及其操作数之间留空格,putStrLn$show$map比putStrLn$show$map更难在精神上解析。这段代码甚至不会编译,我假设您所说的函数是指函数。虽然它是有效代码,但请在运算符及其操作数之间留空格,putstrn$show$map比putstrn$show$map更难进行精神分析