2017-09-27 27 views
-2

我的問題是關於在Haskell中傳遞數據。這是我的代碼:在haskell中傳遞數據

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

有沒有人知道爲什麼這不起作用?

如何將數據從一種方法傳遞給另一種方法?

回答

2

爲了詳細說明蒂洛的回答是:在Haskell,f x y解析爲像f (x y),而不是它實際上解析爲(f x) y。這似乎乍一看沒什麼意義,但實際上它是完全合理的 - 該技術被稱爲Currying。當您處理高階函數時,其優勢將變得明顯。

通常情況下,您不必擔心這一點 - 只要從不在函數參數列表的周圍放置圓括號。當它們是需要封裝的表達式時,僅在單個參數中加上括號。

  • 不要:

    sin (x) 
    

    (儘管這在原則上完全合法的)你:

    sin x 
    
  • 不要:

    max (7 5) 
    

    這將被解析爲應用功能7的論點5 ......顯然是無稽之談。不要:

    max 7 5 
    
  • 不要:

    sin pi*x 
    

    這將被解析爲(sin pi) * x,又名0。這樣做:

    sin (pi*x) 
    

    ,或者preferrably除非它需要把周圍的整個事情額外的括號,

    sin $ pi*x 
    
+0

現在更有意義。謝謝 :) –

2

與其他語言不同,您不要使用括號中的參數列表調用Haskell函數。

如果您需要將其嵌入到更大的表達式中,它應該只是c1 x y - 或(c1 x y)

c1 (x y)將被稱爲c1x(函數本身!)的結果被稱爲參數y

+0

那工作!謝謝!!!! –