Features


LispPad's Scheme language provides support for the following core language features, many of which are derived from the R7RS (small) Scheme standard:

  • Modules via R7RS libraries
  • Hygienic macros based on the syntax-rules standard
  • First-class environments
  • call/cc, dynamic-wind and exceptions
  • Dynamically-scoped paramaters
  • Multiple return values
  • Delayed execution via promises and streams
  • Support for the full numerical tower consisting of arbitrary size integers, rationals, real numbers, and inexact complex numbers.
  • Unicode strings and characters
  • Vectors and bytevectors
  • Text and binary ports
  • R7RS-compliant records
  • R6RS-compliant hashtables
  • R6RS-compliant enumerations
  • All R7RS libraries: (scheme base), (scheme case-lambda), (scheme complex), (scheme cxr), (scheme eval), (scheme file), (scheme inexact), (scheme lazy), (scheme load), (scheme process-context), (scheme read), (scheme repl), (scheme time), (scheme write), (scheme r5rs)
  • LispKit-specific libraries: (lispkit test), (lispkit datatype), (lispkit object), (lispkit enum), (lispkit logic), (lispkit iteration), (lispkit set), (lispkit stack), (lispkit queue), (lispkit heap), (lispkit wt-tree), (lispkit prettify), (lispkit json), and (lispkit pdf)

Incompatibilities


LispPad is incompatible or incomplete with respect to the following R7RS features:

  • Lists are immutable. Mutable cons-cells are supported in a way similar to Racket.
  • current-input-port, current-output-port, and current-error-port are functions (as required by R5RS) and not parameter objects (as required by R7RS)
  • Datum comments introduced via #; do not always work as expected.

Included Libraries


LispPad supports all standard R7RS libraries:

  • (scheme base)
  • (scheme case-lambda)
  • (scheme complex)
  • (scheme cxr),
  • (scheme eval)
  • (scheme file)
  • (scheme inexact)
  • (scheme lazy)
  • (scheme load)
  • (scheme process-context)
  • (scheme read)
  • (scheme repl)
  • (scheme time)
  • (scheme write)
  • (scheme r5rs)

LispPad also includes all the LispKit libraries:

  • (lispkit test)
  • (lispkit datatype)
  • (lispkit object)
  • (lispkit enum)
  • (lispkit logic)
  • (lispkit iteration)
  • (lispkit set)
  • (lispkit stack)
  • (lispkit queue)
  • (lispkit heap),
  • (lispkit wt-tree)
  • (lispkit prettify)
  • (lispkit json)
  • (lispkit pdf)

The following SRFI (Scheme Request for Implementation) libraries have been ported to LispPad and are included in the latest LispPad distribution:

The source code of the Scheme interpreter and the included libraries has been open-sourced and published at GitHub. Example code and the sources of the included libraries can be found here.