Haskell程序:创建带参数但无返回值的函数


在Haskell中,我们将通过使用用户自定义函数来创建一个带参数但无返回值的函数。在本文中,我们将定义用户自定义函数,这些函数包含不返回值的函数定义,并通过向其传递一些所需参数来调用它。

在所有示例中,我们将定义用户自定义函数来执行某些不返回值的任务,但会传递参数,例如printSum、printString、printList和其他函数。

算法

  • 步骤1 − 通过编写其定义而不返回值来定义用户自定义函数。

  • 步骤2 − 程序执行将从主函数开始。main()函数控制整个程序。它写成main = do。在主函数中,通过向其传递一些所需的参数来调用用户自定义函数。

  • 步骤3 − 调用函数后,结果将打印到控制台。

示例1

在这个例子中,函数printSum接受两个Int参数x和y,并使用IO monad中的putStrLn函数将参数的和打印到控制台。printSum的返回类型是IO (),表示它是一个不返回值的IO操作。

printSum :: Int -> Int -> IO ()
printSum x y = putStrLn (show x ++ " + " ++ show y ++ " = " ++ show (x + y))
main = do
printSum 2 3

输出

2 + 3 = 5

示例2

在这个例子中,printString接受一个String参数,并使用putStrLn将其打印到控制台。

printString :: String -> IO ()
printString str = putStrLn str
main = do
printString "hello"

输出

hello

示例3

在这个例子中,printList接受一个列表作为参数并将其打印到控制台。

printList :: [Int] -> IO ()
printList xs = mapM_ print xs
main = do
printList [1..5]

输出

1
2
3
4
5

示例4

在这个例子中,concatenate接受两个String作为参数,将它们连接起来,并使用putStrLn将其打印到控制台。

concatenate :: String -> String -> IO ()
concatenate str1 str2 = putStrLn (str1 ++ str2)
main = do
concatenate "hello" "India"

输出

helloIndia

示例5

在这个例子中,printProduct接受两个整数作为参数,将它们相乘,并使用putStrLn将其乘积打印到控制台。

printProduct :: Int -> Int -> IO ()
printProduct x y = putStrLn (show x ++ " * " ++ show y ++ " = " ++ show (x * y))
main = do
printProduct 3 4

输出

3 * 4 = 12

示例6

在这个例子中,printMax接受一个整数列表作为参数,比较它们,并使用putStrLn打印最大整数到控制台。

printMax :: [Int] -> IO ()
printMax xs = putStrLn (show (maximum xs))
main = do
printMax [1,7,9,5,4]

输出

9

示例7

在这个例子中,printStringsTogether接受两个字符串作为参数,并使用putStrLn将它们并排打印到控制台。

printStringsTogether :: String -> String -> IO ()
printStringsTogether str1 str2 = putStrLn (str1 ++ " " ++ str2)
main = do
printStringsTogether "Hello" "World"

输出

Hello World

示例8

在这个例子中,printOddNumbers接受一个整数列表作为参数,比较它们,并使用putStrLn打印奇数到控制台。

printOddNumbers :: [Int] -> IO ()
printOddNumbers xs = mapM_ print (filter odd xs)
main = do
printOddNumbers [1,5,3,2,4,6,7,8]

输出

1
5
3
7

示例9

在这个例子中,printStringWithBorder接受一个字符串作为参数,并使用putStrLn打印带边框的字符串到控制台。

printStringWithBorder :: String -> IO ()
printStringWithBorder str = do
   putStrLn (replicate (length str + 4) '*')
   putStrLn ("* " ++ str ++ " *")
   putStrLn (replicate (length str + 4) '*')
main = do
printStringWithBorder "Hello"

输出

*********
* Hello *
*********

示例10

在这个例子中,printFirstCharacters接受一个字符串列表作为参数,并使用putStrLn打印列表中每个字符串的第一个字符到控制台。

printFirstCharacters :: [String] -> IO ()
printFirstCharacters strings = mapM_ (\str -> putStrLn (take 1 str)) strings
main = do
printFirstCharacters ["Hello","India"]

输出

H
I

结论

用户自定义函数是由程序员创建的用于执行特定操作的函数。用户可以根据需要定义函数,即使是传递参数并且在函数定义中不返回值。

在Haskell中,没有返回值但有参数的函数通常被称为“动作函数”。它们是执行某些操作(例如打印到屏幕、从键盘读取等)但不返回值的函数。这些函数在IO monad中定义,它们的返回类型通常是IO ()。

更新于:2023年3月1日

221 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告