2017-09-27 1 views
-2

私の質問は、Haskellでデータを渡すことです。これは私のコードです:haskellでデータを渡す

c1 x y = x^y 
c3 x y = let 
    z1 = c1(x y) 
    in (z1) 

これはなぜ動作しないのですか?

あるメソッドから別のメソッドにデータを渡すにはどうすればよいですか?

答えて

2

:ハスケル、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 
    
+0

これは今より意味があります。ありがとうございました :) –

2

他の言語とは異なり、かっこ内にパラメータリストを含むHaskell関数を呼び出さないでください。

より大きな表現に埋め込む必要がある場合は、ちょうどc1 x y - または(c1 x y)にする必要があります。

c1 (x y)は、(関数自体!)という結果をyで呼び出すと、c1が呼び出されていました。ティロの答えについては詳しく説明し

+0

!!!:やりますありがとうございました!!!! –