Een Lisp voor V, met staartaanroepen die echt gratis zijn

Een klein Lisp-dialect op een expliciete CEK-machine. Een aanroep in staartpositie hergebruikt zijn frame in plaats van er een te stapelen, dus een lus is een lus en geen stapel die groeit tot hij sterft.

Lees de documentatie Broncode

Dit onderdeel is nog niet in uw taal vertaald en wordt in het Engels getoond. Vertalingen zijn welkom.

A taste

(define (fib n)
  (if (< n 2)
      n
      (+ (fib (- n 1))
         (fib (- n 2)))))

(fib 20)          ;=> 6765

Dit onderdeel is nog niet in uw taal vertaald en wordt in het Engels getoond. Vertalingen zijn welkom.

Wat het is

Real tail calls

A quarter of a million iterations end with an empty continuation stack. Mutual recursion tail-calls too, which is the part most trampolines skip.

An explicit machine

Evaluation is a data structure you can inspect, not a recursive function you have to trust. Every step is counted, and every limit is a field you can set.

Embeddable by shape

The machine is a library with no global state. print output is collected into a field, so a host can capture it rather than fight it.

Dit onderdeel is nog niet in uw taal vertaald en wordt in het Engels getoond. Vertalingen zijn welkom.

Where it stands

Working: the reader, closures, arithmetic, branching, loop, dotimes, letrec, cond, case, and proper tail calls including mutual recursion.

Not yet: let*, rest parameters, callable keywords, modules, and macros. Each one is named in the repository rather than quietly missing.