Обработка "$" как приложения функции - PullRequest
0 голосов
/ 26 февраля 2019

Я сталкивался с этим примером, читая Learn You a Haskell for Great Good .

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

Я не совсем понимаю, как трактовать $ как приложение функции.Означает ли это, что $ является оператором?Но если так, то как это будет вложено в + или * в примере?Я пытался $ 3 4+, $ 4 + 3, но оба подняли parse error on input ‘$’.Как представить себе такое выражение в контексте функционального программирования?

1 Ответ

0 голосов
/ 26 февраля 2019

$ действительно оператор, определяемый как:

f $ x = f x
-- or equivalently:
($) f x = f x

Ваше выражение выше эквивалентно (по определению map):

[($ 3) (4 +), ($ 3) (10 *), ($ 3) sqrt]

Скобкив ($ 3) и (4 +) не являются обязательными.Они являются частью так называемой операторской секции .По сути, существует четыре способа использования инфиксного оператора (например, +):

  1. Между двумя аргументами:

    x + y
    
  2. Только давая первый аргумент:

    (x +)
    -- like \y -> x + y
    
  3. Только давая второй аргумент:

    (+ y)
    -- like \x -> x + y
    
  4. Без аргументов:

    (+)
    -- like \x y -> x + y
    

($ 3) f оценивается до f $ 3 оценивается до f 3.

($ 3) (4 +) оценивается до (4 +) $ 3 оценивается до (4 +) 3 оценивается до 4 + 3 оцениваетсядо 7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...