Haskell程序 创建一个有参数但没有返回值的函数
在Haskell中,我们将通过使用用户定义的函数来创建一个有参数但没有返回值的函数。在这篇文章中,用户定义的函数将包含没有返回任何值的函数定义,并通过传递一些需要的参数来调用。
在所有的例子中,我们将定义用户定义的函数来执行某些任务,这些任务不返回任何值,但有参数传递,如printSum, printString , printList和其他函数。
算法
- 第1步 – 用户定义的函数是通过编写其定义而不返回任何值来定义的。
-
第2步 – 程序执行将从主函数开始。main()函数拥有整个程序的控制权。它被写成main = do。在main函数中,通过传递一些需要的参数来调用用户定义的函数。
-
第3步 – 在函数被调用后,结果被打印到控制台。
例子1
在这个例子中,函数printSum接收两个Int参数x和y,并使用IO单体中的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接受一个字符串参数,并使用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将两个字符串作为参数,将它们连接起来,并使用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单体中,其返回类型通常是IO()。