假设我有一个多行字符串multiStr
:
line 1
line 2
x.tally: 10
line 4
line 5
我怎么能写一个函数
f :: Integer -> String -> String -> String
f n lineMatcher multiStr = ...
找到以lineMatcher
开头的第一个匹配行,并将n
添加到其末尾的数字。
例如,在这种情况下,我们将f 5 "x.tally" multiStr
评估为
line 1
line 2
x.tally: 15
line 4
line 5
答案 0 :(得分:1)
我不想破坏解决这个问题的乐趣,因此我只会就如何解决这个问题给出一些建议。
首先,我希望您了解两个函数words
和unwords
,其中一个用于将String
拆分为[String]
,另一个则相反 - 即加入一个[String]
将两个元素分开一个' '
。你还应该知道函数lines
和unlines
做了类似的事情 - 我希望你可以用他们的名字来猜测他们做了什么。
接下来我要尝试的是构建一个(辅助)转换函数,通过添加String
来转换n
。提示:函数show
可能派上用场。
h :: Int -> String -> String
h n str = let m = read str
in ...
如果您可以使用之前的辅助函数将["x.tally:", "10"]
转换为["x.tally:", "15"]
并将每个其他列表映射到自身,那么您几乎已经完成了,我希望您可以将我的所有建议拼接在一起你想要的功能。