10

アリティ > 1 の合成関数がわかりません。ghci 7.4.1 で次のように入力しました。

((*).succ) 3 4
> 16

数学変換を完全には理解していませんが、同じであることは明らかです

(*) (succ 3) 4

しかし、私がするとき:

( (\x y z -> x).(\a b -> a*b) ) 2 3 4 5
> 10
( (\x y z -> y).(\a b -> a*b) ) 2 3 4 5
> No instance for (Num (a0 -> t0))

そして今、私は完全に迷っています。誰が何が起こるか説明できますか?ps。Haskell のすべてのパラメータが 1 つしかないことは知っていますが、実際には役に立ちません :)

4

5 に答える 5

0

( (\x y z -> x).(\a b -> a*b) ) 2 3 4 5
  1. 彼らは最初に (\ab -> a*b) 2 を評価し、結果として次のような関数になります (\b -> 2*b)
  2. 次に、(\xyz -> x) (\b -> 2*b) 3 4 を評価すると、関数が 3 を取り、4 を取り、次のような関数を返します: ((\b -> 2* b) 3 4 -> (\b -> 2*b))
  3. (\b -> 2*b) 5 のみが残り、2*5 = 10 となります

しかし

( (\x y z -> y).(\a b -> a*b) ) 2 3 4 5

2 番目の評価では、この ((\b -> 2*b) 3 4 -> 3) 残り 3 5 となり、エラーが発生します。

于 2013-09-20T01:54:34.690 に答える