Result:
Log:
log input log results
Just-in-time compilation
Features:
Proper tail-recursion
First-class continuations with even
dynamic-wind
Boolean, string, number, char, and vector data types (no
complex / rational numbers)
Limited syntax-rules
transformer (written in
Scheme; no nested ellipsis ('...') and vectors support)
Optional just-in-time compilation to javascript (does not
support continuations; library can be pre-compiled with
(compile-lib)
and inserted in init()
-
this will speed up loading in price of ~200Kb; download it )
Almost no error checking
No I/O like load
, read-char
,
open-input-file
, etc.
Limited values
support (only first value is
displayed; all continuations may receive multiple values, not only
those created with call-with-values
):
(values 1 2 3) => 1
(+ (values 1 2 3)) => 6
(list (values 1 2 3)) => (1 2 3)
(call-with-values (lambda () (values 1 2 3)) +) => 6
Predicates like =
and string>?
takes only 2 arguments, but can be extended in this way:
(define < ((lambda() (define old< <)
(lambda (x y . rest)
(if (old< x y)
(if (null? rest)
#t
(apply < y rest))
#f)))))
(< 1 2 3 4 5) => #t
(< 1 2 3 4 3) => #f
map
works on improper lists:
(map + '(1 2 . 3) '(40 20 . 10)) => (41 22 . 13)
(map + 14 9) => 23
Most of R5 RS features / library is implemented
Passes all r5rs_pitfall.scm
tests (included in
SISC)
Strings are immutable; no string-fill!
and
string-set!
begin
is a primitive language expression (same as
lambda
, if
, define
,
set!
and quote
) not derived/library as
R5 RS defines; moreover, lambda
bodies with
several statements are enclosed in begin
in internal
representation to emphasize that they express different concepts -
the first is a function and the second is an operators
sequencing
Written 23 July - 8 August, 2003
Copyright (c) 2003 by Alex Yakovlev. All rights reserved.
Can be freely redisributed under GPL terms.
Tested in IE6 and Opera7
Links:
other implementations in JS:
in Java:
Symbols: