2016-02-13 59 views
1

这涉及在Learn you a Haskell for Great Good遇到的,即这一个例子:

ghci> map ($ 3) [(4+), (10*), (^2), sqrt] 

我想了解它,但它是没有意义的我。当然,函数列表将应用于输入(编号3),但我不明白$操作员如何提供帮助。我试图追踪事物的应用顺序(如果有一个haskell IDE与步骤通过编译器,请让我知道),并不能理解如何$是正确的联想,允许翻转功能应用程序,即当我看到map像这

map fun [1, 2 .. n] 

我想象下面发生的事情形成输出列表

fun 1 
fun 2 
. 
. 
fun n 

,但手头的例子,怎么会是这个意思的:

$3 4+ 
+0

你的直觉是相当不错的,但它更像是'($ 3) (4 +)'。那么也许'($)::(a - > b) - > a - > b'会帮助你理解。 –

回答

6

是怎么意思是:

$3 4+ 

这并不是真正意义的,确实如此。但这不是它简化到的!它简化了

($3) (4+) 

这些东西都是操作部分

($ 3) ≡ \x -> x $ 3 
(4+) ≡ \x -> 4 + x 
(10*) ≡ \x -> 10*x 
(^2) ≡ \x -> x^2 

所以

($3) (4+) ≡ (\f -> f $ 3) (\y -> 4 + y) 
      ≡ (\y -> 4 + y) $ 3 
      ≡ (\y -> 4 + y) 3 
      ≡ 4 + 3 

也许是更容易,如果你想象的“孔”明白:

map (□ $ 3) [(4+□), (10*□), (□^2), sqrt □] 
≡ [(4+□) $ 3, (10*□) $ 3, (□^2) $ 3, (sqrt □) $ 3] 
≡ [(4+3), (10*3), (3^2), (sqrt 3)] 
1

运算符$调用作为其右手参数值的左手参数的函数。在使用示例中,它将值3“放”作为列表中的部分的附加参数

因此($ 3) (4+)(4+3)。类似($ 2) (4/)(4/2)

使用正常的算术运算可以更容易地掌握章节的使用。例如:(/2) 4相同4/2,因此2