2017-09-27 125 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

那工作!谢谢!!!! –