SIOF is an interpreter for the Scheme programming language.
SIOF is mostly compatible with R7RS-small standard, but it has the following known limitations and deviations from the standard:
Some features of the R7RS-Small standard are not yet implemented or implemented in a simplified or non-conforming way:
read
procedure is always case-sensitive (all ports operate in no-fold-case mode)#!fold-case
and #!no-fold-case
directives are not supportedinclude
and include-ci
forms are not supportedget-environment-variable
is implemented, but get-environment-variables
is notcurrent-jiffy
and jiffies-per-second
return inexact integerscurrent-second
is defined as C difftime(time(0), 0)+37
_
as a regular identifier, not match-all pattern(... escaped)
pattern escapesHere are some details on SIOF's interactive Read-Eval-Print-Loop (REPL) and evaluation/libraries support:
read
supports R7RS notation for circular structures, but both eval
and load
reject them(sharpf base)
library-L
command-line option extends library search path; initial path is ./
cond-expand
checks against (features)
and available librariesenvironment
dynamically fetches library definitions from .sld
filesexpand
is available (macroexpands the argument)eval
, load
, and expand
accept optional environment argumentimport
and define-library
forms can be entered interactively into REPLfeatures
procedure returns (r7rs exact-closed siof siof-1.0.2)
Please note that SIOF's interaction environment exposes bindings for all supported R7RS-small procedures and syntax forms directly, so there is no need to use import
. In order to use import
forms and environment
procedure with R7RS-small libraries, you will need to copy the scheme
folder with .sld files for the libraries from here to your local file system and make sure SIOF can locate it (its library search path contains current directory by default and can be extended with the help of -L
command line option).
SIOF's original code is written in #F, a language for building Scheme-like systems. Please see SIOF github repository for more information about the project.