这涉及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 :(得分: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 :(得分:1)
operator $调用函数,该函数是其右手参数的左手参数。在使用示例时,它将值“放置”为列表
中各节的附加参数因此($ 3) (4+)
是(4+3)
。类似地($ 2) (4/)
是(4/2)
使用常规算术运算更容易掌握部分的使用。例如:(/2) 4
与4/2
相同,因此2