Haskell程序从函数中返回数组


本文将帮助我们学习如何在 Haskell 中使用用户定义函数、列表推导式和递归从函数中返回数组。在第一个示例中,我们将使用 (show (getArray)) 函数,在第二个示例中,我们将使用 (getArray n = [x | x <- [1..n]])。在第三个示例中,我们将使用带有基本情况和递归情况的递归。

方法 1:从用户定义函数返回数组

在此方法中,定义了用户定义函数,其中包含函数定义,并在调用函数后返回数组。

算法

  • 步骤 1 − 通过编写其定义来定义用户定义函数,该定义将在计算后返回数组。

  • 步骤 2 − 程序执行将从主函数开始。main() 函数控制整个程序。它被写成 main = do。在主函数中,调用了用户定义函数。

  • 步骤 3 − 调用函数后,将结果数组打印到控制台。

示例

在此示例中,getArray 是一个返回整数列表 [1, 2, 3, 4, 5] 的函数。main 函数调用 getArray 并将结果打印到控制台。

getArray :: [Int]
getArray = [1, 2, 3, 4, 5]

main :: IO ()
main = do
   putStrLn (show (getArray))

输出

[1,2,3,4,5]

方法 2:使用列表推导式从用户定义函数返回数组

在此方法中,定义了用户定义函数,其中包含函数定义,并在调用函数后使用列表推导式返回数组。

算法

  • 步骤 1 − 通过编写其定义来定义用户定义函数,该定义将在计算后返回数组。要返回数组,使用列表推导式。

  • 步骤 2 − 程序执行将从主函数开始。main() 函数控制整个程序。它被写成 main = do。在主函数中,调用了用户定义函数。

  • 步骤 3 − 调用函数后,将结果数组打印到控制台。

示例 1

在此示例中,getArray 以整数 n 作为输入,并返回整数列表 [1..n]。main 函数调用 getArray 5 并将结果打印到控制台。

getArray :: Int -> [Int]
getArray n = [x | x <- [1..n]]

main :: IO ()
main = do
   putStrLn (show (getArray 5))

输出

[1,2,3,4,5]

示例 2

在此示例中,getArray 以函数 f 和列表 xs 作为输入,并返回一个新列表,该列表是将 f 应用于 xs 的每个元素的结果。main 函数调用 getArray (*2) [1, 2, 3, 4, 5],它将函数 (*2) 应用于列表 [1, 2, 3, 4, 5] 的每个元素,并将结果打印到控制台。

getArray :: (Int -> Int) -> [Int] -> [Int]
getArray f xs = map f xs

main :: IO ()
main = do
   putStrLn (show (getArray (*2) [1, 2, 3, 4, 5]))

输出

[2,4,6,8,10]

方法 3:使用递归函数从用户定义函数返回数组

在此方法中,定义了用户定义函数,其中包含函数定义,并在调用函数后使用递归函数返回数组。

算法

  • 步骤 1 − 通过编写其定义来定义用户定义函数,该定义将在计算后返回数组。要返回数组,使用递归函数。

  • 步骤 2 − 程序执行将从主函数开始。main() 函数控制整个程序。它被写成 main = do。在主函数中,调用了用户定义函数。

  • 步骤 3 − 调用函数后,将结果数组打印到控制台。

示例

在此示例中,getArray 以整数 n 作为输入,并返回整数列表 [n, n-1, ..., 1]。该函数使用递归来构建列表。基本情况是当 n 为 0 时,在这种情况下,函数返回一个空列表 []。main 函数调用 getArray 5 并将结果打印到控制台。

getArray :: Int -> [Int]
getArray 0 = []
getArray n = n : getArray (n - 1)

main :: IO ()
main = do
   putStrLn (show (getArray 5))

输出

[5,4,3,2,1]

结论

在 Haskell 中,数组是相同类型值的集合,存储在连续的内存位置中。数组可以被认为是值的序列,其中每个值都与一个索引相关联。Haskell 中的数组使用 [a] 类型表示,其中 a 是数组中元素的类型。

更新于: 2023年3月1日

432 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.