此功能的类型为function :: Num a => ([Char],a) -> ([Char],a)
我对此功能的输入类似于(".'*",0)
,函数找到第一个'.'
或'*'
并更新a
,向{{添加200或400 1}}的值取决于首先被替换的字符。一旦更改了某些内容,字符列表的其余部分将附加到末尾(只更改了一个字符)。如果未更改头部字符,则处理列表的其余部分,但保留头部字符。
我相信前两个保护语句是正确的,但是我不知道如何使这个功能递归,以便检查列表中的整个字符不变。
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)
非常感谢任何帮助!如果不清楚,我会澄清一下。我觉得我是以错误的方式解决这个问题。
答案 0 :(得分:9)
当你这样做时,你会忘记function :: Num a => ([Char],a) -> ([Char],a)
:
| otherwise = function(xs, a)
相反,你想要更像
的东西 | otherwise = let (xss, b) = function(xs, a)
in (x:xss, b)