Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在haskell中将具有多个参数的函数解析为mapM_uu_Haskell - Fatal编程技术网

在haskell中将具有多个参数的函数解析为mapM_uu

在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

我开始学习Haskell,想知道如何将列表中的元素打印成一个带有定义空格字符的串联字符串。我在下面的脚本中实现了这一点

但是,我希望编写putStrSep函数,以便将分隔符指定为参数。而不是在下面的示例中硬编码

#/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_u
mapM_u\putStrSep“\t”args一起使用,但没有work@altimit像这样使用:
mapM(putstrsp'\t')args
@altimit或者更好,
putStrLn$interlate['\t']args
如答案所示。
interspose
不连接字符串。您希望插入
。@rjanJohansen被忽略了。非常感谢。答案已更新。感谢插入建议,它起作用了。我还尝试将建议的putStrSep函数与mapM_u
mapM_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]
from
Data.List
,因为
类型字符串=[Char]
无论如何,就像直接在
main
中一样。