Module: Klam::CompilationStages::SimplifyBooleanOperations

Included in:
Klam::Compiler
Defined in:
lib/klam/compilation_stages/simplify_boolean_operations.rb

Overview

Simplify Boolean Operations

Kl defines four special forms for boolean operations: if, or, and, and cond. Having if or cond alone is sufficient for implementing the complete set. This compilation stages recasts or, and, and cond in terms of if.

Instance Method Summary collapse

Instance Method Details

#simplify_boolean_operations(sexp) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/klam/compilation_stages/simplify_boolean_operations.rb', line 9

def simplify_boolean_operations(sexp)
  if sexp.instance_of?(Array)
    case sexp[0]
    when :and
      simplify_and(sexp)
    when :cond
      simplify_cond(sexp)
    when :or
      simplify_or(sexp)
    else
      sexp.map { |form| simplify_boolean_operations(form) }
    end
  else
    sexp
  end
end