picrin/docs/lang.rst

188 lines
7.7 KiB
ReStructuredText
Raw Normal View History

2014-05-21 00:28:29 -04:00
Language
========
The language provided by picrin.
Libraries
---------
2014-05-21 01:00:29 -04:00
- ``(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``
2014-05-21 00:28:29 -04:00
Old-fashioned macro.
2014-05-21 01:00:29 -04:00
- ``make-syntactic-closure``
- ``identifier?``
- ``identifier=?``
2014-05-21 00:28:29 -04:00
Syntactic closures.
2014-05-21 01:00:29 -04:00
- ``er-macro-transformer``
- ``ir-macro-transformer``
2014-05-21 00:28:29 -04:00
Explicit renaming macro family.
2014-05-21 01:00:29 -04:00
- ``(picrin regexp)``
2014-05-21 00:28:29 -04:00
2014-05-21 01:00:29 -04:00
- ``(regexp? obj)``
- ``(regexp ptrn [flags])``
2014-05-21 00:28:29 -04:00
2014-05-21 01:00:29 -04:00
Compiles pattern string into a regexp object. A string ``flags`` may contain any of #\g, #\i, #\m.
2014-05-21 00:28:29 -04:00
2014-05-21 01:00:29 -04:00
- ``(regexp-match re input)``
2014-05-21 00:28:29 -04:00
Returns two values: a list of match strings, and a list of match indeces.
2014-05-21 01:00:29 -04:00
- ``(regexp-replace re input txt)``
- ``(regexp-split re input)``
2014-05-21 00:28:29 -04:00
2014-05-21 01:00:29 -04:00
- ``(picrin control)``
2014-05-21 00:28:29 -04:00
2014-05-21 01:00:29 -04:00
- ``(reset h)``
- ``(shift k)``
2014-05-21 00:28:29 -04:00
Delimited control operators.
2014-06-14 12:48:28 -04:00
- ``(picrin dictionary)``
Symbol to Object table. Internally it is implemented on hash-table.
Note that dictionary is not a weak map; if you are going to make a highly memory-consuming program with dictionaries, you should know that dictionaries keep their bound objects and never let them free until you explicitly deletes bindings.
- ``(dictionary)``
Returns a newly allocated empty dictionary. In the future, it is planned to extend this function to take optional arguments for initial key/values.
- ``(dictionary? obj)``
Returns ``#t`` if obj is a dictionary.
- ``(dictionary-ref dict key)``
Look up dictionary dict for a value associated with symbol key. If no object is associated with key, it will raise an error.
- ``(dictionary-set! dict key obj)``
If there is no value already associated with key, this function newly creates a binding of key with obj. Otherwise, updates the existing binding with given obj.
- ``(dictionary-delete dict key)``
Deletes the binding associated with key from dict. If no binding on dict is associated with key, an error will be raised.
- ``(dictionary-size dict)``
Returns the number of registered elements in dict.
2014-05-21 01:00:29 -04:00
- ``(picrin user)``
2014-05-21 00:28:29 -04:00
When you start the REPL, you are dropped into here.
2014-05-21 01:00:29 -04:00
- ``(srfi 1)``
2014-05-21 00:28:29 -04:00
List manipulation library.
2014-05-21 01:00:29 -04:00
- ``(srfi 26)``
2014-05-21 00:28:29 -04:00
Cut/cute macros.
2014-05-21 01:00:29 -04:00
- ``(srfi 95)``
2014-05-21 00:28:29 -04:00
Sorting and Marging.
The REPL
--------
At the REPL start-up time, some usuful built-in libraries listed below will be automatically imported.
2014-05-21 01:00:29 -04:00
- ``(scheme base)``
- ``(scheme load)``
- ``(scheme process-context)``
- ``(scheme write)``
- ``(scheme file)``
- ``(scheme inexact)``
- ``(scheme cxr)``
- ``(scheme lazy)``
- ``(scheme time)``
2014-05-25 23:22:42 -04:00
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
2014-05-27 13:36:23 -04:00
6.13.2 Input yes
2014-05-25 23:22:42 -04:00
6.13.3 Output yes
6.14 System interface yes
2014-05-25 23:23:42 -04:00
================================================ ========== ==========================================================================================================================
2014-05-25 23:22:42 -04:00
.. [#] 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.