私は現在Haskellをいじっていますが、私の人生では、次のことがなぜ機能するのかわかりません.....
square :: (Num a) => a -> a
square x = x * x
dx = 0.0000001
deriv1 :: (Fractional a) => (a -> a) -> (a -> a)
deriv1 g = (\x -> ((g (x + 2) - (g x)) / 0.0000001 ))
main = printf "res==%g %g\n" (square 5.12::Double) ((deriv1 square) 2::Float)
しかし、これはそうではありません....
square :: (Num a) => a -> a
square x = x * x
dx = 0.0000001
deriv1 :: (Fractional a) => (a -> a) -> (a -> a)
deriv1 g = (\x -> ((g (x + 2) - (g x)) / dx ))
main = printf "res==%g %g\n" (square 5.12::Double) ((deriv1 square) 2::Float)
dx
今回はderv1関数で使用したことに注意してください。私は Haskell を初めて使用するので、型に関する詳細な議論は、すぐに私を通り過ぎてしまい、ぐるぐる回って死ぬでしょう。必須の答えに似たものを持っていることが必須です。そうしないと、Haskell でのキャリアの早い段階でほぼ確実に失われてしまいます。
私が得ているエラーメッセージは次のとおりです。
Inferred type is less polymorphic than expected
Quantified type variable `a' is mentioned in the environment:
dx :: a (bound at sicp-1.40.hs:12:0)
When trying to generalise the type inferred for `deriv1'
Signature type: forall a. (Fractional a) => (a -> a) -> a -> a
Type to generalise: (a -> a) -> a -> a
In the type signature for `deriv1'
When generalising the type(s) for `deriv1'