Haskell程序 从函数中返回数组
这篇文章将帮助我们学习如何在haskell中使用用户定义的函数以及列表理解和递归,从函数中返回一个数组。在第一个例子中,我们将使用(show (getArray))函数,在第二个例子中,我们将使用(getArray n = [x | x <\- [1..n]]
)。而在第三个例子中,我们将使用基数和递归情况的递归。
方法1:从用户定义的函数中返回一个数组
在这个方法中,定义了用户定义的函数,它将包含函数的定义,并在函数被调用后返回一个数组。
算法
- 第1步 – 通过编写用户定义函数的定义,在计算后返回一个数组。
-
第2步 – 程序的执行将从主函数开始。main()函数拥有整个程序的控制权。它被写成main = do。在main函数中,用户定义的函数正在被调用。
-
第3步 – 在函数被调用后,结果数组被打印到控制台。
例子
在这个例子中,getArray是一个返回整数列表的函数,[1, 2, 3, 4, 5]
。主函数调用 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。在main函数中,用户定义的函数被调用。
-
第3步 – 在函数被调用后,结果数组被打印到控制台。
例子1
在这个例子中,getArray接收一个整数n作为输入,并返回一个整数[1...n]
的列表。主函数调用 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 作为输入,并返回一个新的列表,该列表是对 xs 的每个元素应用 f 的结果。主函数调用 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。在main函数中,用户定义的函数正在被调用。
-
第3步 – 在函数被调用后,结果数组被打印到控制台。
例子
在这个例子中,getArray 接收一个整数 n 作为输入,并返回一个整数 [n, n-1, ..., 1]
的列表。该函数使用递归来建立这个列表。基本情况是当n为0时,在这种情况下,该函数返回一个空列表[]。主函数调用 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是数组中元素的类型。