Der*_*rek 1 recursion haskell tuples
这个功能的类型是 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?
Run Code Online (Sandbox Code Playgroud)
基本上,当函数到达时,我需要处理字符列表的其余部分,但是还需要返回未更改的字符.
所需输入输出的示例:
Main> function ("./-", 0)
("-/-",200)
Run Code Online (Sandbox Code Playgroud)
要么
Main> function ("-/-", 0)
("-/-",0)
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏!如果不清楚,我会澄清一下.我觉得我正在以错误的方式解决这个问题.
function :: Num a => ([Char],a) -> ([Char],a)当你这样做时,你会忘记:
| otherwise = function(xs, a)
Run Code Online (Sandbox Code Playgroud)
相反,你想要更像的东西
| otherwise = let (xss, b) = function(xs, a)
in (x:xss, b)
Run Code Online (Sandbox Code Playgroud)