当前位置:  开发笔记 > 程序员 > 正文

在Haskell中,如何递归操作元组并将字符预先添加到元组中的第一个元素?

如何解决《在Haskell中,如何递归操作元组并将字符预先添加到元组中的第一个元素?》经验,为你挑选了1个好方法。

这个功能的类型是 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)

任何帮助是极大的赞赏!如果不清楚,我会澄清一下.我觉得我正在以错误的方式解决这个问题.



1> Artelius..:

function :: Num a => ([Char],a) -> ([Char],a)当你这样做时,你会忘记:

    | otherwise = function(xs, a)

相反,你想要更像的东西

    | otherwise = let (xss, b) = function(xs, a)
                              in (x:xss, b)

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有