2016-02-13 104 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