Skip to content

malleusinferni/breve

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Breve

A sketch of a Lisp dialect. Nothing interesting or original. Cons cells and environments are refcounted, not actually garbage collected. Forms are bytecode-compiled before evaluation. Native functions can be used in all the same places as interpreted functions.

Closure over lexical environments:

(def foo (n)
  (fn () n))

(call (foo 5)) ; => 5

Separate namespaces for functions and values:

(def fac (n)
  (apply #'* (iota n)))

(map #'fac (iota 10)) ; => (1 2 6 24 120 720 5040 40320 362880 3628800)

Locally scoped functions introduced with label:

(def fib (n)
  (label iter (i a b)
    (if (> i 1)
      (iter (- i 1) (+ a b) a)
      a))
  (iter n 1 0))

(map #'fib (iota 10)) ; => (1 1 2 3 5 8 13 21 34 55)

Destructuring let-bindings:

(def last (xs)
  (let (car & cdr) xs) ; Cons syntax uses & instead of .
  (if cdr
    (last cdr)
    car))

(last '(1 2 3 4 5)) ; => 5

Strings, and text IO, are not yet implemented.

I have no plans to finish this.

About

Bytecode-compiled Lisp dialect

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages