Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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 当用作map函数的参数时,`$`是什么意思?_Haskell_Functional Programming - Fatal编程技术网

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更难进行精神分析