[cfe-commits] [PATCH] Implements hasAncestor.

Sean Silva reviews at llvm-reviews.chandlerc.com
Wed Sep 5 11:05:27 PDT 2012


  If you weren't aware of this (I wasn't until a couple days ago), there
  is actually a whole subfield of computer science dedicated to pattern
  matching. You may find some big inspiration by browsing the
  literature.

  I mention this because I recently stumbled upon the existence of this
  subfield in the context of the Mathematica programming language, and
  this hasAncestor match is extremely similar to something that happens
  in the Mathematica programming language when an "upvalue" is matched,
  although upvalues are much more general. In Mathematica, for example,
  you can do:

  g /: g[x_] + g[y_] := gplus[x, y]

  which roughly means "whenever you see `g` as you traverse the
  expression tree, check if the expression tree structure surrounding it
  looks like g[<arbitrary expression to be bound to `x`>] + g[<arbitrary
  expression to be bound to `y`>], and if it does, then rewrite that
  subtree to be `gplus[x,y]`". The behavior needed to perform such
  matching efficiently seems to be highly relevant to hasAncestor.

  --Sean Silva

http://llvm-reviews.chandlerc.com/D36



More information about the cfe-commits mailing list