92 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
| 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 [#]_
 | |
| 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
 | |
| ================================================ ========== ==========================================================================================================================
 | |
| 
 | |
| .. [#] Picrin provides hygienic macros in addition to so-called legacy macro (``define-macro``), such as syntactic closure, explicit renaming macro, and implicit renaming macro.
 |