List haskell中字符串修改和连接的组合
因此,我的问题是在haskell中获取一个字符串,并对其进行修改,这样,如果存在某些字符,它们将被更改为其他字符,我创建了一个帮助函数来实现这一点,但是有一种情况是,如果字符为“!”然后它就变成了!!!111oneone',所以我认为要做到这一点,您需要将当前字符串与'!!连接起来!!111oneone'的问题是,我的函数使用的是字符,但要做到这一点,我们需要使用字符串,您将如何组合这一点,即如果需要,请帮助修改字符,如果有“!”则执行转换 这是我到目前为止所拥有的List haskell中字符串修改和连接的组合,list,haskell,List,Haskell,因此,我的问题是在haskell中获取一个字符串,并对其进行修改,这样,如果存在某些字符,它们将被更改为其他字符,我创建了一个帮助函数来实现这一点,但是有一种情况是,如果字符为“!”然后它就变成了!!!111oneone',所以我认为要做到这一点,您需要将当前字符串与'!!连接起来!!111oneone'的问题是,我的函数使用的是字符,但要做到这一点,我们需要使用字符串,您将如何组合这一点,即如果需要,请帮助修改字符,如果有“!”则执行转换 这是我到目前为止所拥有的 convert :: Str
convert :: String -> String
convert [] = []
convert (x:xs) =
| x == '!' = !helper
| otherwise = converthelper x
假设你的助手是
helper :: Char -> String
helper '!' = "!!!111oneone"
helper c = [c]
然后可以使用concatMap
将helper
映射到字符串中的每个字符上,然后将结果连接到单个字符串中
convert :: String -> String
convert = concatMap helper
-- convert msg = concatMap helper msg
诀窍是帮助者将每个角色升级为一个角色列表;大多数字符只是成为对应的一个字符串,但是代码>变得更重要
(请注意,concatMap
构成列表的Monad
实例的基础。您还可以编写convert msg=msg>>=helper
)您可以使用+
连接字符串。如果c
是单个字符,则可以使用[c]
将其转换为字符串(如果需要)。相反,c:s
将charc
前置到字符串s
。好的,谢谢,我会尝试实现它!恭喜,你刚刚定义了一个L系统。(好的,从技术上来说,你还需要一个起始字符串。)嘿,我想我从来都不知道这个过程有一个正式的名称。(当然,在这种情况下,我们会在一轮替换后停止。)这是一个非常好的方法,但我担心对于一个不知道++
]的初学者来说,这太高了,这比concatMap更基本<代码>迭代(>>=helper)
将为您提供整个序列。