次の方程式はMiranda Syntaxで書かれていますが、MirandaとHaskellの類似点のために、私はHaskellのプログラマが理解するはずです。関数型プログラミングにおける関数の型の決定
次の関数を定義する場合:
rc v g i = g (v:i)
rn x = x
rh g = hd (g [])
f [] y = y
f (x:xs) y = f xs (rc x y)
g [] y = y
g (x:xs) y = g xs (x:y)
あなたは機能の種類を仕事はどうすればよいですか?私はf、g、rnの仕組みを理解していると思いますが、部分的なアプリケーション部分については混乱しています。
rnがあることを行っている* - > *(か何か - >何でも、私はそれがだと思う - Haskellでは> A?)、fとgの場合
関数型の両方です[*] - > * - > *?
私はrcとrhの型を探す方法には不明です。 rcでは、gは変数iに部分的に適用されているので、これがiの型を制約すると推測しています[*]。 rcの定義に適用されるrcとgの順序は何ですか? gはiに適用され、結果関数はrcの引数として使用されますか?あるいは、rcはv、g、iの3つの別々のパラメータを取るか?私は本当に混乱しています..どんな助けもありがとう!みんなありがとう。
申し訳ありませんが、そのHDを追加するのを忘れリストのための標準的なヘッド機能であり、以下のように定義されています。型はすでにタイプで知られており、どのように表現が定義で使用されているものから推測される
hd :: [*] -> *
hd (a:x) = a
hd [] = error "hd []"
この宿題はありますか? –
いいえ、私は今試験の準備をしています。それはMiranda試験の古い試験問題です。 – user1058210
'hd'関数の種類は何ですか? –