私は過去2時間にわたり、Haskellのカリングについて読んできましたが、複数のパラメータを持つ関数が実際に他の関数をどのように返しているのか、その定義はどうなっているのでしょうか? 。Haskell Currying
私たちは機能を定義してみましょう:
myFunc :: (Num a) => a -> a -> a
myFunc x y = x * 2 + x * y
:t (myFunc 2)
印刷Num a => a -> a
、数をとり、また数を出力する、すなわち機能。しかし、(myFunc 2)
によって返される関数の定義はどのように見えますか?コンパイラはのようになり、定義内でx
を置き換えますか?
再帰処理はどのように処理されますか?私は、関数を定義した場合
replicate' :: (Integral i, Ord i) => i -> a -> [a]
replicate' n x
| n <= 0 = []
| otherwise = x : replicate' (n - 1) x
、どのような関数は、コンテキスト(replicate 3) 'a'
に(replicate' 3)
によって返されますか?
あなたは '\ x - > x:replicate '2 x'は何を意味するのかを教えてください。また、私が推測したように、コンパイラは 'myFunc'を扱いますか? –
ええと、ラムダ関数の仕組みは分かりますよね?さもなければ、これはそれらを読んでよい時間であり、彼らは非常に重要である。 – leftaroundabout