Module: Klam::CompilationStages::MakeAbstractionsVariadic

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

Overview

Make Abstractions Variadic

Kl’s lambda special form only accepts a single parameter for the abstraction. It is useful internally, however, to allow abstractions to have zero or more parameters.

Instance Method Summary collapse

Instance Method Details

#make_abstractions_variadic(sexp) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/klam/compilation_stages/make_abstractions_variadic.rb', line 9

def make_abstractions_variadic(sexp)
  if sexp.instance_of?(Array)
    if sexp[0] == :lambda
      rator, param, form = sexp
      [rator, [param], make_abstractions_variadic(form)]
    else
      sexp.map { |form| make_abstractions_variadic(form) }
    end
  else
    sexp
  end
end