代码之家  ›  专栏  ›  技术社区  ›  kirill fedorov

Haskell作为模式,将变量绑定到常量

  •  0
  • kirill fedorov  · 技术社区  · 6 年前

    import Data.List
    
    elemIndex1 xss@(x:xs) = 
        if (x == ' ') 
        then (elemIndex x xss) 
        else (elemIndex1 xs)
    

    所以我希望这个函数给出:

    elemIndex1 "qwe asd zxc"
    Just 3
    

    elemIndex1 "qwe asd zxc"
    Just 0
    

    据我所知,在else子句中xss实际上变成了xs。

    0 回复  |  直到 6 年前
        1
  •  5
  •   cole    6 年前

    你好像在等你 xss@(x:xs) 如下所示:

    • xss 起初的
      • x
      • xs :任意调用的其余字符

    xss = "qwe asd zxc"
    x = ' '
    xs = "asd zxe"
    

    这不是模式匹配的工作方式。 实际上等于 x:xs ,所以在这个例子中 " asd zxc" .

    weirdElemIndex str = weirdElemIndex' str
      where
        weirdElemIndex' ""     = Nothing
        weirdElemIndex' (x:xs) =
          if x == ' ' 
            then elemIndex ' ' str
            else weirdElemIndex' xs
    

    注意 str helper函数体中的I引用在其调用中将是一个常量。

    不管它的价值,你人为的例子似乎相当于 elemIndex ' ' Nothing .

    推荐文章