Skip to content

Latest commit

 

History

History
17 lines (11 loc) · 1.06 KB

README.md

File metadata and controls

17 lines (11 loc) · 1.06 KB

operat

Operat is an operative Lisp on top of JavaScript, based in large part on Shutt's vau calculus. At the basis of computation, unlike normal lisp, is a construct called vau, akin to a lambda which doesn't evaluate its args. Lambda, then, is a case of this where the args are evaluated. This way, all operators are first-class objects, unlike in lisp where special forms like if are unavailable and macros are tied to a reading/parsing step.

Basic definition:

($function fact (n)
  ($if (eq n 0)
    1
    (* n (fact (- n 1)))))

Compilation to JavaScript:

%% (log ($compile ($if (eq n 0) 1 (* n (fact (- n 1))))))
"this.n === 0 ? 1 : this.n * this.fact('$', this.n - 1)"

See core.operat for a very minimal and incomplete standard library and test suite. This isn't really Kernel, or Lisp for that matter, just a weird experiment and demonstration of JavaScript's flexibility. Currently, I'm exploring more object-oriented approaches to language design, so I doubt I will really come back to this.