私の質問は、Haskellでデータを渡すことです。これは私のコードです:haskellでデータを渡す
c1 x y = x^y
c3 x y = let
z1 = c1(x y)
in (z1)
これはなぜ動作しないのですか?
あるメソッドから別のメソッドにデータを渡すにはどうすればよいですか?
私の質問は、Haskellでデータを渡すことです。これは私のコードです:haskellでデータを渡す
c1 x y = x^y
c3 x y = let
z1 = c1(x y)
in (z1)
これはなぜ動作しないのですか?
あるメソッドから別のメソッドにデータを渡すにはどうすればよいですか?
:ハスケル、f x y
にはf (x y)
のようなものではなく、それは実際に(f x) y
として解析だとして解析されないです。一見したところではほとんど意味がないようですが、実際は完全に合理的です。その技術はCurryingと呼ばれています。その利点は、高次関数を扱っているときに明らかになります。
通常、これについて心配する必要はありません。ちょうどは、関数の引数一覧の周りにかっこを入れません。カプセル化する必要がある式の場合は、単一の引数のまわりに括弧を入れます。
ないでください:
sin (x)
(。それは、原理的には完全に合法だけど)行います
sin x
はいない:
だろうmax (7 5)
を関数012のアプリケーションとして解析される引数にはが5
...明らかにナンセンスです。実行します。
max 7 5
しないでください:0
別名、(sin pi) * x
として解析されるだろう
sin pi*x
。
sin (pi*x)
をか、それは全体の事を中心に余分な括弧を置く必要ができれない限り、働い
sin $ pi*x
他の言語とは異なり、かっこ内にパラメータリストを含むHaskell関数を呼び出さないでください。
より大きな表現に埋め込む必要がある場合は、ちょうどc1 x y
- または(c1 x y)
にする必要があります。
c1 (x y)
は、(関数自体!)という結果をy
で呼び出すと、c1
が呼び出されていました。ティロの答えについては詳しく説明し
!!!:やりますありがとうございました!!!! –
これは今より意味があります。ありがとうございました :) –