関数型プログラミング試験の勉強中に、以前の試験で次の質問に出くわしました。
t2 = (\x -> \y -> \z -> (x y, x (x z)))
t3 = t2 (take 3 . reverse) mnr mnr
t2の場合、ステートメントの最も一般的なタイプを判別するように求められます。答えは次のようです。
(a -> a) -> a -> a -> (a,a)
WinHugsにステートメントを入力することで答えを見つけることができますが、この答えはどのようにして見つけられますか?以前の投稿から、ラムダ関数と関係があることは理解していますが、それ以外は、ここで何が起こっているのかを説明するのに迷っています。
次に、質問の2番目の部分(t3)は、変数mnrの2つのインスタンスに2つの関数を適用します。mnr = [0,1,2,3,4,5,6]の場合、次のようになります。
([6,5,4],[4,5,6])
これはどのように作動しますか?関数のテイクとリバースは明確ですが、t2のラムダ関数にどのように適用されますか?