私はちょうど、この機能がどのような種類の最適化の結果として下の中間表現であるかに関する好奇心から、知りたいですか?私は$が実際には1つの引数だけで提供される関数であることを理解しています。何らかの形で、この関数を 'map'によって提供されるリストからの関数に適用することによって、 '$'関数が正確に関数に欠けていることを管理します。この最適化の動作は、 '$'を使用した関数アプリケーション固有のものですか?なぜなら、私はそれがどのような価値を持っているのか、それが「地図」と「$」の関数定義からどのように続くのかを見ることができないからです。
最初から、 '$ 3'は関数式の前に出現するはずですが、そのような式はコンパイラで評価されないようです。ここでは、最適化の拡大仲介式があり、それは一見行われている:
[(4+) $3, (10*) $3, (^2) $3, sqrt $3]
定義を - $
($) :: (a -> b) -> a -> b
f $ x = f x
定義 - 地図
map :: (a -> b) -> [a] -> [b]
map _ [] = []
map f (x:xs) = f x : map f xs
例は
map ($ 3) [(4+), (10*), (^2), sqrt]
を使用しました
結果
[7.0,30.0,9.0,1.7320508075688772]
ありがとうございました!それは上のスポットです! –
と説明には賢明な優雅さがあります。本当にありがとうございます。 –