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编程语言中生成乘法表的程序。

更新于:2022年11月24日

浏览量:290

开启你的职业生涯

完成课程获得认证

开始学习
广告