2
私は、この関数の型プロファイルを定義する必要があります。この関数の型プロファイルを定義する方法は?
twice f x = f (f x);
結果は以下でなければなりませんが、私は本当に、なぜ得ることはありません。
('a -> 'a) -> 'a -> 'a
私は、この関数の型プロファイルを定義する必要があります。この関数の型プロファイルを定義する方法は?
twice f x = f (f x);
結果は以下でなければなりませんが、私は本当に、なぜ得ることはありません。
('a -> 'a) -> 'a -> 'a
(a -> a) -> a -> a
が正しい答えです。なぜそれを見つけるために断片に分割してみましょう。言って、これらの引数の最初の
a -> c -> d
は単項関数である - - 署名は三つの部分がありますので、
f
とx
を取るa = (a -> b)
を作る(a
は、任意の種類のことを覚えておいてください、限り、それは署名に一度だけ表示されます)と署名がtwice
の(a -> b) -> c -> d
d = b
と署名を行い(a -> b) -> c -> b
f
引数としてtwice
の第2引数を取る - これはc = a
なり、署名は次のようになり:(a -> b) -> a -> b
twice
はa = b
ことを意味し、それ自身の出力に適用されている - これは、最終的な署名(a -> a) -> a -> a
明確なexplantionのおかげで、私はそれを理解した! :) – mlhack
を行いますあなたは、高次関数、または数学のGoFを使用しています。タイプ:タイプを表示するにはtを押します。本を参照 - Haskellを学ぶ – RicardoVallejo
何も入力せずに、自分で定義する必要があります。 – mlhack
私はHaskellの "ステートメント"の最後にセミコロンを使用している最近のいくつかの質問を見てきました。必要なものではなく、典型的なハスケルではないので、あなたが選んだ本/学習リソースは何ですか? – ErikR