1

重複の可能性:
なぜそのような関数定義が haskell で許可されないのですか?

良い一日!

任意の有限サイズのリストを次のような関数引数に変換する関数 g を作成/検索しようとしています

    g k [a,b,c,d] = k a b c d
    g f [a,b,c] = f a b c = ((((f) $ a) $ b) $ c)

構文的には のようg = foldl ($) fに見えますが、コンパイラは合理的にその関数の適用に失敗し、次のように答えます。

     ghci> let (><) f = foldl ($) f
     <interactive>:1:19:
     Occurs check: cannot construct the infinite type: b = b1 -> b
     Probable cause: `$' is applied to too many arguments
     In the first argument of `foldl', namely `($)'
     In the expression: foldl ($) f

そのため、実用的な実装を作成できません。あなたはなにか考えはありますか?前もって感謝します!

4

0 に答える 0