代码之家  ›  专栏  ›  技术社区  ›  Bercovici Adrian

递归分析字符串不起作用

  •  0
  • Bercovici Adrian  · 技术社区  · 6 年前

    我正在努力解决以下问题:

    鉴于:
    类型 data T=AA | BB | CC deriving (Show)
    输入 一串 str
    我正在尝试查找给定字符串中出现的所有数据构造函数,并将它们附加到输出:

    例子 以下内容:

    输入: "AABCC"
    输出: [AA,CC] 基本上,我尝试解析字符串,如果前缀匹配,我会将元组的第二个元素附加到结果中,并从输入字符串中截断长度。否则,我将截断1个元素,然后重试。

    titles = [("AA",AA),("BB",BB),("CC",CC)]
    
    rds::String->[T]
    rds str = go  str  where  
              go []=[]
              go (x:xs)=case filter ((isPrefixOf str).fst) titles of
                             (name,value):_ ->value:go (drop (length name) (x:xs))
                             [] -> go xs
    

    该方法仅适用于1个元素,例如: "AA" .当尝试更大的输入时,我得到 [] 结果。

    我想这与我没有将结果绑定到 go 是吗?做 必须将结果作为其参数,例如: go [] str;go result []=result ; go result (x:xs)=.... 是吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Daniel Wagner    6 年前

    go (x:xs) = case filter ((isPrefixOf str).fst) titles of ...
    

    你可能想要 (`isPrefixOf` (x:xs)) 相反。