Language¶
Picrin’s core language is the R7RS scheme with some powerful extensions. Please visit http://r7rs.org/ for the information of R7RS’s design and underlying thoughts.
The REPL¶
At the REPL start-up time, some usuful built-in libraries listed below will be automatically imported.
(scheme base)
(scheme load)
(scheme process-context)
(scheme write)
(scheme file)
(scheme inexact)
(scheme cxr)
(scheme lazy)
(scheme time)
(scheme case-lambda)
(scheme read)
(scheme eval)
Compliance with R7RS¶
section | status | comments |
---|---|---|
2.2 Whitespace and comments | yes | |
2.3 Other notations | incomplete | #e #i #b #o #d #x |
2.4 Datum labels | yes | |
3.1 Variables, syntactic keywords, and regions | ||
3.2 Disjointness of types | yes | |
3.3 External representations | ||
3.4 Storage model | yes | |
3.5 Proper tail recursion | yes | As the report specifies, apply , call/cc , and call-with-values perform tail calls |
4.1.1 Variable references | yes | |
4.1.2 Literal expressions | yes | |
4.1.3 Procedure calls | yes | In picrin () is self-evaluating |
4.1.4 Procedures | yes | |
4.1.5 Conditionals | yes | In picrin (if #f #f) returns #f |
4.1.6 Assignments | yes | |
4.1.7 Inclusion | incomplete | include-ci |
4.2.1 Conditionals | yes | |
4.2.2 Binding constructs | yes | |
4.2.3 Sequencing | yes | |
4.2.4 Iteration | yes | |
4.2.5 Delayed evaluation | yes | |
4.2.6 Dynamic bindings | yes | |
4.2.7 Exception handling | yes | guard syntax. |
4.2.8 Quasiquotation | yes | can be safely nested. TODO: multiple argument for unquote |
4.2.9 Case-lambda | yes | |
4.3.1 Bindings constructs for syntactic keywords | yes [1] | |
4.3.2 Pattern language | yes | syntax-rules |
4.3.3 Signaling errors in macro transformers | yes | |
5.1 Programs | yes | |
5.2 Import declarations | yes | |
5.3.1 Top level definitions | yes | |
5.3.2 Internal definitions | yes | |
5.3.3 Multiple-value definitions | yes | |
5.4 Syntax definitions | yes | |
5.5 Recored-type definitions | yes | |
5.6.1 Library Syntax | yes | In picrin, libraries can be reopend and can be nested. |
5.6.2 Library example | N/A | |
5.7 The REPL | yes | |
6.1 Equivalence predicates | yes | |
6.2.1 Numerical types | yes | picrin has only two types of internal representation of numbers: fixnum and double float. It still comforms the R7RS spec. |
6.2.2 Exactness | yes | |
6.2.3 Implementation restrictions | yes | |
6.2.4 Implementation extensions | yes | |
6.2.5 Syntax of numerical constants | yes | |
6.2.6 Numerical operations | yes | denominator , numerator , and rationalize are not supported for now. Also, picrin does not provide complex library procedures. |
6.2.7 Numerical input and output | yes | |
6.3 Booleans | yes | |
6.4 Pairs and lists | yes | list? is safe for using against circular list. |
6.5 Symbols | yes | |
6.6 Characters | yes | |
6.7 Strings | yes | |
6.8 Vectors | yes | |
6.9 Bytevectors | yes | |
6.10 Control features | yes | |
6.11 Exceptions | yes | |
6.12 Environments and evaluation | yes | |
6.13.1 Ports | yes | |
6.13.2 Input | yes | |
6.13.3 Output | yes | |
6.14 System interface | yes |
[1] | Picrin provides hygienic macros in addition to so-called legacy macro (define-macro ), such as syntactic closure, explicit renaming macro, and implicit renaming macro. |