157 lines
6.6 KiB
ReStructuredText
157 lines
6.6 KiB
ReStructuredText
Language
|
|
========
|
|
|
|
The language provided by picrin.
|
|
|
|
Libraries
|
|
---------
|
|
|
|
- ``(scheme base)``
|
|
- ``(scheme write)``
|
|
- ``(scheme cxr)``
|
|
- ``(scheme file)``
|
|
- ``(scheme inexact)``
|
|
- ``(scheme time)``
|
|
- ``(scheme process-context)``
|
|
- ``(scheme load)``
|
|
- ``(scheme lazy)``
|
|
- ``(picrin macro)``
|
|
|
|
- ``define-macro``
|
|
- ``gensym``
|
|
- ``macroexpand``
|
|
|
|
Old-fashioned macro.
|
|
|
|
- ``make-syntactic-closure``
|
|
- ``identifier?``
|
|
- ``identifier=?``
|
|
|
|
Syntactic closures.
|
|
|
|
- ``er-macro-transformer``
|
|
- ``ir-macro-transformer``
|
|
|
|
Explicit renaming macro family.
|
|
|
|
- ``(picrin regexp)``
|
|
|
|
- ``(regexp? obj)``
|
|
- ``(regexp ptrn [flags])``
|
|
|
|
Compiles pattern string into a regexp object. A string ``flags`` may contain any of #\g, #\i, #\m.
|
|
|
|
- ``(regexp-match re input)``
|
|
|
|
Returns two values: a list of match strings, and a list of match indeces.
|
|
|
|
- ``(regexp-replace re input txt)``
|
|
- ``(regexp-split re input)``
|
|
|
|
- ``(picrin control)``
|
|
|
|
- ``(reset h)``
|
|
- ``(shift k)``
|
|
|
|
Delimited control operators.
|
|
|
|
- ``(picrin user)``
|
|
|
|
When you start the REPL, you are dropped into here.
|
|
|
|
- ``(srfi 1)``
|
|
|
|
List manipulation library.
|
|
|
|
- ``(srfi 26)``
|
|
|
|
Cut/cute macros.
|
|
|
|
- ``(srfi 95)``
|
|
|
|
Sorting and Marging.
|
|
|
|
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)``
|
|
|
|
Compiliance 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``. TODO: Once ``read`` is implemented rewrite ``include`` macro with it.
|
|
4.2.1 Conditionals incomplete TODO: ``cond-expand``
|
|
4.2.2 Binding constructs yes
|
|
4.2.3 Sequencing yes
|
|
4.2.4 Iteration yes
|
|
4.2.5 Delayed evaluation N/A
|
|
4.2.6 Dynamic bindings yes
|
|
4.2.7 Exception handling no ``guard`` syntax.
|
|
4.2.8 Quasiquotation yes can be safely nested. TODO: multiple argument for unquote
|
|
4.2.9 Case-lambda N/A
|
|
4.3.1 Bindings constructs for syntactic keywords incomplete [#]_
|
|
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 incomplete only simple import declarations, no support for import with renaming.
|
|
5.3.1 Top level definitions yes
|
|
5.3.2 Internal definitions yes TODO: interreferential definitions
|
|
5.3.3 Multiple-value definitions yes
|
|
5.4 Syntax definitions yes TODO: internal macro definition is not supported.
|
|
5.5 Recored-type definitions yes
|
|
5.6.1 Library Syntax incomplete 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 TODO: equal? must terminate if circular structure is given
|
|
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 incomplete only partial support supplied.
|
|
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 ``raise-continuable`` is not supported
|
|
6.12 Environments and evaluation N/A
|
|
6.13.1 Ports yes
|
|
6.13.2 Input incomplete TODO: binary input
|
|
6.13.3 Output yes
|
|
6.14 System interface yes
|
|
================================================ ========== ==========================================================================================================================
|
|
|
|
.. [#] Picrin provides hygienic macros in addition to so-called legacy macro (``define-macro``), such as syntactic closure, explicit renaming macro, and implicit renaming macro. As of now let-syntax and letrec-syntax are not provided.
|