lambda

Random lambda calculus stuff

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
data Term = L Int Term
          | A Term Term
          | I Int
          deriving (Eq, Show)

sub (L var body) bvar rep = L var (sub body bvar rep)
sub (A fn arg) bvar rep = A (sub fn bvar rep) (sub arg bvar rep)
sub x bvar rep = if x == I bvar then rep else x

red (L var body) = L var (red body)
red (A fn arg) = case rfn of (L var body) -> red (sub body var arg)
                             _ -> A rfn (red arg)
    where rfn = red fn
red x = x