这个功能的类型是 function :: Num a => ([Char],a) -> ([Char],a)
我对此函数的输入是类似的(".'*",0)
,函数通过添加200或400 的值来查找第一个'.'
或'*'
更新a
,a
具体取决于首先替换的字符.一旦更改了某些内容,字符列表的其余部分将附加到末尾(只更改了一个字符).如果未更改头部字符,则处理列表的其余部分,但保留头部字符.
我相信前两个保护语句是正确的,但我不知道如何使这个功能递归,以检查列表中的整个字符不变.
function ([], a) = ([], a) function ((x:xs), a) | x == '.' = ('-':xs, a+200) | x =='*' = ('-':xs, a+400) | otherwise = function(xs, a) --how do I put the unchanged x before xs without processing it?
基本上,当函数到达时,我需要处理字符列表的其余部分,但是还需要返回未更改的字符.
所需输入输出的示例:
Main> function ("./-", 0) ("-/-",200)
要么
Main> function ("-/-", 0) ("-/-",0)
任何帮助是极大的赞赏!如果不清楚,我会澄清一下.我觉得我正在以错误的方式解决这个问题.
function :: Num a => ([Char],a) -> ([Char],a)
当你这样做时,你会忘记:
| otherwise = function(xs, a)
相反,你想要更像的东西
| otherwise = let (xss, b) = function(xs, a) in (x:xss, b)