繁体   English   中英

输出元组在Haskell中的功能如何?

[英]How fst on function that output tuples works in Haskell?

我试图找出元组在Haskell中如何工作,以及如何从元组中获取某些数据值。

我有以下代码,这运行正常,并打印出我期望的元组输出:

test :: Integer -> (Integer, Integer)
test c =  function(1, c)

但是,当我尝试从元组中获取第一个值时,如下所示,

test :: Integer -> Integer
test c = fst function(1, c)

我收到以下错误

  • 无法匹配预期类型'((整数,整数) - >整数,b0)'与实际类型'(整数,整数) - >(整数,整数)'

任何帮助或建议将不胜感激。 提前致谢。

你只是弄错了语法。

fx表示“ 将(调用)函数f应用于参数x ”。

类似地, fxy表示“将函数f应用于参数xy ”。

您的示例function(1, c)表示“ 将函数function应用于参数(1, c) ”。 不要让开头之前没有空格让你愚弄: (1, c)并不意味着“ 用两个参数调用函数 ”(就像在C或Java中那样),它意味着“ 做一对有两个组成部分, 1c “。 然后将该对用作function的单个参数。

现在,下一个表达式, fst function (1, c)意味着“ 将函数fst应用于两个参数 - function(1, c) ”。 这显然不是你的意思。 相反,你打算先用参数(1, c)调用function ,然后将结果作为参数传递给fst 要表达这一点,您可以使用括号:

test c = fst (function (1, c))

但当然现在这个括号太多了。 为避免额外的对,您可以使用无处不在的运算符$

test c = fst $ function (1, c)

这个运算符并没有真正做任何有趣的事情,它只是将左边的函数应用到右边的参数:

f $ x = f x

此运算符的值是,它使函数应用程序不具有最高优先级,从而省去了额外的括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM