如何在haskell中访问returnvalue的listelements?

时间:2018-05-01 09:25:23

标签: list haskell

我在访问函数的返回值时遇到了一些问题。 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?

1 个答案:

答案 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)