use*_*517 2 haskell functional-programming
我有一个以下形式的值([(Int, Int, Int)], Int, Int)
我需要一个以以下形式获取数据([(Int, Int, Int)], Int, Int)并返回的函数[[(Int, Int, Int)]]
假设我的列表名为it. 当我跑步时fst it
我收到这个错误
* Couldn't match expected type `(a, b0)'
with actual type `([(Int, Int, Int)], Int, Int)'
* In the first argument of `fst', namely `it'
In the expression: fst it
In an equation for `it': it = fst it
* Relevant bindings include it :: a (bound at <interactive>:9:1)
Run Code Online (Sandbox Code Playgroud)
我很难理解我做错了什么。有人可以帮我吗。我想获取it其中的第一个值是列表的列表。
就像签名指定的那样,fst :: (a, b) -> a返回2元组的第一项。所以不是 3 元组(或任何n ≠ 2的n元组)。
对于 3 元组(及更高元组),通常使用模式匹配(例如在 lambda 表达式中)。例如:
\(x, _, _) -> x
Run Code Online (Sandbox Code Playgroud)
是获取 3 元组第一项的 lambda 表达式。
或者您可以定义一个执行此模式匹配的函数,例如:
fst3 :: (a, b, c) -> a
fst3 (x, _, _) = x
Run Code Online (Sandbox Code Playgroud)