我在访问函数的返回值时遇到了一些问题。 returnvalue是一个列表,我希望能够访问这两个列表元素:
这是工作代码:
f1 = f2 1 2
f2 a b = [a,b]
main :: IO ()
main = do
print(f1)
为了表明这个想法,这就是我想做的事情(该代码不起作用):
f1 = [x,y] = f2 1 2
if x == 42 then y * 23 else x
f2 a b = [a,b]
main :: IO ()
main = do
print(f1)
如何在f1中访问x和y?
答案 0 :(得分:2)
我认为这更像是错误的语法问题:您为=
使用了两个f1
令牌,并且似乎以命令式方式编写它。
我们可以使用 let
子句:
f1 = let [x,y] = f2 1 2 in if x == 42 then y * 23 else x
或者我们可以使用 where
子句:
f1 = if x == 42 then y * 23 else x
where [x,y] = f2 1 2
请注意,上述模式匹配相当不安全:列表无法保证其大小。通常在大小固定的情况下,元组是更好的选择。因此,我们可以用以下元组重新实现它:
-- with tuples
f1 = let (x, y) = f2 1 2 in if x == 42 then y * 23 else x
f2 a b = (a, b)