tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

d61f2de7b3dce93c9b8914fb980224437d0ea4207787caab9098041cf5bfe896.tri (779B)


      1 !import base *
      2 !export *
      3 
      4 -- Ordered predicate/action rows. Each row is exactly [predicate action].
      5 -- First match wins; no match or a malformed reached row returns Leaf.
      6 -- Unselected actions and subsequent rows are not evaluated.
      7 match value rules = (let rec
      8   walk remaining = case remaining of
      9     [rule | rest] = (case rule of
     10       [test action] = (case test value of
     11         t = walk rest
     12         _ = action value)
     13       _ = t)
     14     _ = t
     15   in walk rules)
     16 
     17 otherwise = const true
     18 
     19 -- guard stores thunks, rather than a predicate/action on a shared value.
     20 cond rules = (let rec
     21   walk remaining = case remaining of
     22     [(testK, actionK) | rest] = (case testK t of
     23       t = walk rest
     24       _ = actionK t)
     25     _ = t
     26   in walk rules)
     27 
     28 guard testK actionK = pair testK actionK