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
  • LispKit-specific libraries: (lispkit datatype), (lispkit set), (lispkit heap), (lispkit prettify), 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.
  • R7RS's mechanism for declaring the features of the Scheme implementation is not yet implemented; this includes the following functions: features and cond-expand
  • Error support is incomplete; the following functions are missing: syntax-error, read-error?, file-error?
  • current-input-port, current-output-port, and current-error-port are functions (as required by R5RS) and not parameter objects (as required by R7RS)
  • The R5RS-fallback mechanism for handling symbols in a case-insensitive manner is not implemented yet; this includes support for include-ci
  • Libraries do not yet support: include, include-ci, include-library-declarations, and cond-expand.
  • Environment-support lacks the following functions: scheme-report-environment, null-environment.
  • No support for tail patterns in syntax-rules.
  • Datum comments introduced via #; do not always work as expected.