hackage.haskell.orgの基本パッケージに含まれているプレリュードは、フリップ関数が見つかるすべてのHaskellファイルに暗黙のインポートで含まれています。右側にある「ソース」をクリックすると、flipのソースコードが表示されます。
flip :: (a -> b -> c) -> b -> a -> c
flip f x y = f y x
where句では、ローカル定義、x=10
またはを使用できますy="bla"
。トップレベルの場合と同じ構文を使用して、関数をローカルで定義することもできます。add x y = x + y
以下の同等の定式化では、私は置換を行いますg = f y x
flip :: (a -> b -> c) -> b -> a -> c
flip f x y = g
where
g = f y x
現在、gはパラメータを取りません。しかし、gも定義すると、次のg a b = f b a
ようになります。
flip :: (a -> b -> c) -> b -> a -> c
flip f x y = g x y
where
g a b = f b a
いいえ、少し代数的なキャンセルを行うことはできません(数学のクラスの代数のように考えると、かなり安全になります)。焦点を当てる:
flip f x y = g x y
次の場合は、両側のyをキャンセルします。
flip f x = g x
xをキャンセルします。
flip f = g
そして今、それを完全な表現に戻すために:
flip :: (a -> b -> c) -> b -> a -> c
flip f = g
where
g a b = f b a
最後の表面的なステップとして、関数を引数名に戻すための置換a
を行うことができます。x
b
y
flip :: (a -> b -> c) -> b -> a -> c
flip f = g
where
g x y = f y x
ご覧のとおり、このフリップの定義は少し丸みを帯びており、プレリュードで開始するのは単純で、私が好む定義です。where
それがどのように機能し、Haskellコードの少し代数的な操作を行う方法を説明するのに役立つことを願っています。