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