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程式語言中生成乘法表的程式。