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

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告