在haskell中将具有多个参数的函数解析为mapM_uu
我开始学习Haskell,想知道如何将列表中的元素打印成一个带有定义空格字符的串联字符串。我在下面的脚本中实现了这一点 但是,我希望编写putStrSep函数,以便将分隔符指定为参数。而不是在下面的示例中硬编码在haskell中将具有多个参数的函数解析为mapM_uu,haskell,Haskell,我开始学习Haskell,想知道如何将列表中的元素打印成一个带有定义空格字符的串联字符串。我在下面的脚本中实现了这一点 但是,我希望编写putStrSep函数,以便将分隔符指定为参数。而不是在下面的示例中硬编码 #/usr/bin/env runghc import System.Environment --for the getArgs function -- Concatenate my own string putStrSep :: String -> IO() putStr
#/usr/bin/env runghc
import System.Environment --for the getArgs function
-- Concatenate my own string
putStrSep :: String -> IO()
putStrSep x = putStr (x ++ " ")
--Prints the list of arguments
main = do
putStrLn "Usage: helloworld.hs your full name"
args <- getArgs --returns you a list of string
putStr "Your name is: "
mapM_ putStrSp args
putStrLn "\nGood bye!"
#/usr/bin/env runghc
导入System.Environment——用于getArgs函数
--连接我自己的字符串
putStrSep::String->IO()
putStrSep x=putStr(x++)
--打印参数列表
main=do
putStrLn“用法:helloworld.hs您的全名”
args您可以像这样实现您的putStrSep
putStrSep :: Char -> String -> IO ()
putStrSep sep str = putStr (str ++ [sep])
注意:您的mapM_…
需要替换为类似mapM_(putStrSep'\t')的参数
或者您可以使用插入
(从数据.列表
),并用
putStrLn $ intercalate " " args
或
sep
是分隔符。您可以像这样实现putStrSep
putStrSep :: Char -> String -> IO ()
putStrSep sep str = putStr (str ++ [sep])
注意:您的mapM_…
需要替换为类似mapM_(putStrSep'\t')的参数
或者您可以使用插入
(从数据.列表
),并用
putStrLn $ intercalate " " args
或
sep
是分隔符。intersperse
不会连接字符串。您希望插入,
。@rjanJohansen被忽略了。非常感谢。答案已更新。感谢插入建议,它起作用了。我还尝试将建议的putStrSep函数与mapM_umapM_u\putStrSep“\t”args一起使用,但没有work@altimit像这样使用:mapM(putstrsp'\t')args
@altimit或者更好,putStrLn$interlate['\t']args
如答案所示。interspose
不连接字符串。您希望插入,
。@rjanJohansen被忽略了。非常感谢。答案已更新。感谢插入建议,它起作用了。我还尝试将建议的putStrSep函数与mapM_umapM_u\putStrSep“\t”args一起使用,但没有work@altimit像这样使用:mapM(putstrsp'\t')args
@altimit或者更好,putStrLn$interlate['\t']args
如答案所示。最好尽可能避免IO,将putStrSep'::String->[String]->IO()
替换为strSep::String->[String]->String
,因为这样可以更灵活地处理输出,而不是直接在屏幕上弹出。(当您将程序从命令行界面切换到GUI时,您会感谢我-将UI从处理中分离出来。)但是,您也可以使用插入::[a]->[[a]]->[a]
从数据。List
因为类型字符串=[Char]
无论如何,就像直接在main
中一样。如果可以,最好避免IO,将putStrSep'::String->[String]->IO()
替换为strSep::String->[String]->String
,因为它使您能够更灵活地处理输出,而不是直接在屏幕上弹出。(当您将程序从命令行界面切换到GUI时,您会感谢我-将UI从处理中分离出来。)但您也可以使用插入::[a]->[[a]->[a]->[a]
fromData.List
,因为类型字符串=[Char]
无论如何,就像直接在main
中一样。