总的来说,我对编程和 Haskell 还比较陌生。我正在读一本关于该语言的书,其中一个练习要求以下内容:
fst使用和填写以下函数的定义snd:
f :: (a, b) -> (c, d) -> ((b, d), (a, c))
f = undefined
Run Code Online (Sandbox Code Playgroud)
我很困惑这个函数签名对于如何定义实际函数以及该定义中的操作顺序意味着什么。用通俗的语言来说,这就是“取一个元组,另一个元组,然后输出最终的混合元组”吗?或者它是在说“获取一个元组,修改该元组,然后将修改后的元组与原始元组混合”?
我的问题是,如何编写函数定义,以便fst和snd可以生成新元组?我知道我不应该使用很多括号,但在我看来,我想通过仅使用括号创建一个单行函数来简单地划分操作顺序来解决问题,例如:
f x y = (,) ((,) snd x snd y) ((,) fst x fst y)
Run Code Online (Sandbox Code Playgroud)
但编译器返回错误。我是否把这件事过于复杂化了?x和分别y绑定到(a,b)和(c,d),所以我不应该能够访问它们并返回一个元组的新元组,其顺序与我用括号进行的操作顺序相同吗?