Haskell生成乘法表程序
在本教程中,我们将讨论如何编写一个在Haskell编程语言中生成乘法表的程序。
示例
12的乘法表(乘到10):
12 * 1 = 12 12 * 2 = 24 12 * 3 = 36 12 * 4 = 48 12 * 5 = 60 12 * 6 = 72 12 * 7 = 84 12 * 8 = 96 12 * 9 = 108 12 * 10 = 120
在本教程中,我们将学习:
生成一个数字的乘法表程序(乘到常量范围10,尾递归)。
生成一个数字的乘法表程序(乘到变量范围,头递归)。
注意 −
尾递归是指递归调用作为最后一个表达式的递归函数。
头递归是指递归调用作为第一个表达式的递归函数。
算法步骤
声明或输入要生成乘法表的数字。
实现生成乘法表的程序。
打印或显示乘法表。
示例1
生成一个数字的乘法表程序(乘到10)
-- function declaration for function generate generate :: Int->Int->IO() -- function definition for function generate -- base case generate n 10 = do putStrLn (show n ++ " * " ++ show 10++" = " ++ show (n*10)) generate n i = do putStrLn (show n ++ " * " ++ show i++" = " ++ show (n*i)) generate n (i+1) -- function declaration for function generateTable generateTable :: Int->IO() -- function definition for function generateTable generateTable n = generate n 1 main :: IO() main = do -- declaring and initializing a variable for the number let num = 12 -- invoking the generateTable function putStrLn ("The multiplication table of " ++ show num ++ " is:") generateTable num
输出
The multiplication table of 12 is: 12 * 1 = 12 12 * 2 = 24 12 * 3 = 36 12 * 4 = 48 12 * 5 = 60 12 * 6 = 72 12 * 7 = 84 12 * 8 = 96 12 * 9 = 108 12 * 10 = 120
注意 −
“++”是用于连接字符串的操作符。
putStrLn 是一个函数,用于在控制台上显示输出,并在末尾添加一个换行符(‘
’)。Show 是一个函数,它接受一个数字作为参数,并通过将其解析为字符串来返回它们。
在上面的程序中,
我们声明了一个函数generate,它接受两个整数参数并返回一个IO操作。在其函数定义中,该函数接受两个整数参数n和i。该函数以某种格式打印这两个参数的乘积,并通过递增第二个参数来递归调用自身,直到第二个参数等于10。
也就是说,函数generate打印从‘i’到10的数字的乘法表。
我们声明了一个函数generateTable,它接受一个整数作为参数并返回一个IO操作。在其函数定义中,我们接受一个整数n作为参数,并调用函数generate,参数为n和1。
函数generateTable是一个辅助函数,可以用单个参数调用,该函数调用generate函数,第二个参数为'1',返回一个打印数字n的乘法表的IO操作。
在main函数中,我们声明并初始化一个变量num,最后我们通过调用带有参数num的函数generateTable来打印乘法表。
示例2
生成一个数字的乘法表程序(乘到变量范围)。
-- function declaration for function generateTable generateTable :: Int->Int->IO() -- function definition for function generateTable -- base case generateTable n 1 = do putStrLn (show n ++ " * " ++ show 1++" = " ++ show (n*1)) generateTable n i = do generateTable n (i-1) putStrLn (show n ++ " * " ++ show i++" = " ++ show (n*i)) main :: IO() main = do -- declaring and initializing a variable for the number let num = 12 let len = 20 -- invoking the generateTable function putStrLn ("The multiplication table of " ++ show num ++ " upto length " ++ show len ++ " is:") generateTable num len
输出
The multiplication table of 12 upto length 20 is: 12 * 1 = 12 12 * 2 = 24 12 * 3 = 36 12 * 4 = 48 12 * 5 = 60 12 * 6 = 72 12 * 7 = 84 12 * 8 = 96 12 * 9 = 108 12 * 10 = 120 12 * 11 = 132 12 * 12 = 144 12 * 13 = 156 12 * 14 = 168 12 * 15 = 180 12 * 16 = 192 12 * 17 = 204 12 * 18 = 216 12 * 19 = 228 12 * 20 = 240
在上面的程序中,
我们声明了一个函数generateTable,它接受两个整数并返回一个IO操作。在其函数定义中,我们接受两个整数n和i作为参数,它们自身递归调用,参数为n和i-1,直到第二个参数i等于1。我们使用头递归技术,直到达到基本情况,函数调用存储在堆栈中。由于函数中的最后一个调用是打印参数乘积的记录,因此即使我们从n开始,表也按从1到n的逆序打印。此技术是头递归的应用。
上述函数打印数字num的乘法表(乘到范围i)。
在main函数中,我们声明并初始化了数字和范围的值,最后通过调用函数generateTable来打印乘法表。
结论
在本教程中,我们讨论了两种不同的方法来实现一个在Haskell编程语言中生成乘法表的程序。