代码之家  ›  专栏  ›  技术社区  ›  devoured elysium

Haskell中的模式匹配等价变量,如Prolog中的

  •  9
  • devoured elysium  · 技术社区  · 14 年前

    在prolog中,我们可以执行如下操作:

    myFunction a (a:xs) = ...
    

    这是,当 myFunction ... .

    我认为Prolog的模式匹配比Haskell的更具表现力。我一直试图在Haskell中编写这种代码,但我遇到了麻烦——要么我使用了无效语法,要么上面的技巧根本做不到。

    3 回复  |  直到 14 年前
        1
  •  13
  •   porges    14 年前

    Haskell不做这种“变量匹配”。你必须明确地防范:

    myFunction a (x:xs)
        | x == a = ...
    
        2
  •  12
  •   Don Stewart    14 年前

    哈斯克尔没有 就像Prolog一样。作为 Haskell 98 report 说,

    当然,您可以命名变量,并声明它们也必须相等:

    f a (b:_) | a == b = ...
    

    有趣的是,Agda允许信息在这样的模式中流动,并引入了一个特殊的符号 f x (.x:_) x 一定是那个 .

        3
  •  8
  •   Tom Crockett    14 年前

    myFunction a (b:xs) | a == b = ...