私は Haskell プログラミング コースで古い試験を復習していますが、この関数について頭を悩ませているようには見えません (与えられた情報が少なすぎると思います)。
与えられたコードは
myId x = x
function n f
| n > 0 = f . function (n-1) f
| otherwise = myId
たとえば、 input2 (*2)
で関数を呼び出すと、結果として関数が得られることを知っています。そして、それを呼び出すと(-2) (*2) 1
、結果が得られ1
ます。
方法がわからないだけですか?また、関数の型キャストに頭を悩ませることもできません。
これら 2 つのオプションが正しいことはわかっていますが、その理由がわかりません (おそらく、現時点では括弧が混乱している可能性があります)。
function :: (Num a, Ord a) => a -> (a -> a) -> a -> a
function :: (Num a, Ord b) => a -> (b -> b) -> b -> b
この関数を「読む」方法と、型キャストがどのように機能するかを理解する方法を明確にできる人は誰でも(HaskellのプログラミングとHaskellの学習から私のプログラミングを読んでいますが、数日間サークルに参加しています)。