# Language

### Features

LispPad is an IDE for the programming language Scheme. The Scheme dialect supported by LispPad is based on the [R7RS (small) standard](http://www.r7rs.org). The following features are available:

* Modules via [R7RS](http://www.r7rs.org) 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](http://www.r7rs.org)-compliant records
* [R6RS](http://www.r6rs.org)-compliant hashtables
* [R6RS](http://www.r6rs.org)-compliant enumerations
* SRFI 18-compliant multi-threading

### Incompatibilities

*LispPad* is incompatible or incomplete with respect to the following [R7RS](http://www.r7rs.org) features:

* Lists are immutable. Mutable cons-cells are supported in a way similar to [Racket](https://racket-lang.org).
* Datum comments introduced via `#;` do not always work as expected.

### Included libraries

*LispPad* supports all standard R7RS (small) libraries:

* `(scheme base)`
* `(scheme case-lambda)`
* `(scheme char)`
* `(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)`

Most of the R7RS (large) libraries from the "Red" and "Tangerine" edition are supported as well:

* `(scheme bitwise)`
* `(scheme box)`
* `(scheme charset)`
* `(scheme comparator)`
* `(scheme division)`
* `(scheme fixnum)`
* `(scheme flonum)`
* `(scheme generator)`
* `(scheme hash-table)`
* `(scheme ideque)`
* `(scheme list)`
* `(scheme mapping)`
* `(scheme rlist)`
* `(scheme set)`
* `(scheme sort)`
* `(scheme stream)`
* `(scheme text)`
* `(scheme vector)`

*LispPad* also includes all the [*LispKit* libraries](/libraries/lispkit.md).

*LispPad* comes with several [*LispPad*-specific libraries](/libraries/lisppad.md). They provide a native integration of drawings defined via `(lispkit draw)` and `(lispkit draw turtle)`, a means to script the application, an API to do geocoding, speech synthesis, etc. There is also a *LispPad*-specific logging library extending the *LispKit* logging library for usage within the IDE.

LispPad also includes many [SRFI (Scheme Request for Implementation) libraries](/libraries/srfi.md).

### Source code

The source code of the Scheme interpreter and the included libraries has been open-sourced and [published at GitHub](https://github.com/objecthub/swift-lispkit). Example code and the Scheme sources of the included libraries can be found [here](https://github.com/objecthub/swift-lispkit/tree/master/Sources/LispKit/Resources).

It is also possible to access the source code from within LispPad. On macOS, pressing *option* while opening the *File* menu will reveal a menu item "Open LispKit…" which provides access to the LispKit source code bundled with LispPad. Similarly, pressing *control* while opening the *File* menu will reveal a menu item "Open LispPad..." for accessing the LispPad-specific code, e.g like the LispPad prelude.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.lisppad.app/applications/language.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
