- allow to call
load
with@lips
prefix #354 - add string interpolation #321
- add default repr for R7RS records
- add parenthesis matching in Node.js REPL
- fix duplicated identifiers in syntax-rules (case of SRFI-239 example implementation)
- fix
load
of absolute path in Node - fix require of LIPS package from Node
- fix transforming
syntax-rules
ellipsis that expand into #void - fix improper lists in
syntax-rules
#360 - fix handling of REPL in Emacs (
run-scheme
) - fix
promise?
predicate - fix handling of
|1|1
and|a|b|c|
symbols - fix repr of anonymous classes #361
- fix handling of escape characters in symbols
- fix processing list with nested unquote-splicing #362
- fix exception during error from eval #362
- allow to catch exceptions from eval
- fix else keyword as only expression in cond #366
- fix clash of variable named
list
in namedlet
#398 - fix Node REPL flickering
- change
get-environment-variables
andget-environment-variable
returns nil and undefined in the browser true
,false
, andNaN
are no longer parser constants #292- get rid of node polyfills from output files
eval
useinteraction-environment
stead ofcurrent-environment
by default- remove support for string argument to
read
#327 - make
null
falsy value #330 - remove
nil
parser constant #332 - replace
undefined
with#void
, andnull
with#null
- characters are again unboxed into strings by JavaScript code #329
- code that throw exception now return exit code 1
- change order of arguments in
take
(type #void)
(JavaScriptundefined
) is nowvoid
- add
vector-for-each
andvector-copy!
function from R7RS - add
string-for-each
,string-downcase
, andstring-upcase
from R7RS - add
typecheck-number
function - add
char-foldcase
andstring-foldcase
functions - add
list-set!
andnth-pair
functions - add
SRFI-61
,SRFI-139
, andSRFI-210
- add
continuations?
function - add
iterator->array
function - add immutable strings as in R7RS spec #285
- add R7RS
char<...>?
andstring<...>?
functions #298 - improve syntax-rule exception message (appending macro code)
- update
log
to accept two arguments #301 - allow to use
data-bootstrap
attribute on script tags - make
atan
work for complex numbers - save error logs in home dir
- add timestamp to error logs
- make
+inf.0
and-inf.0
parser constants - add
zip
procedure (inspired by Lodash) - add
with-input-from-string
andread-all
#327 - add
#!fold-case
and#!no-fold-case
directives #342 - add
drop
procedure - allow to use unquoted symbols in
-->
to get the function - add
regex
procedure (rename from%r
used in bootstrap.scm) - support unterminated strings in REPL #280
- expose parser and lexer instance from syntax extensions #308
- fix
let-values
to allow binding to list #281 - fix wrong strings in
string-fill!
- fix
string-set!
to mutate the string and work on any expression - fix tokenizing regex that ends with hash
- fix bookmark on SRFI-210 document #287
- fix
syntax-rules
in macrodefine-value
#290 - fix indentation of
let-values
- various fixes to
syntax-rules
- fix
procedure?
to return true for continuations - fix
lips --help
screen - fix
cond-expand
to skip not-matched symbols - fix shadowing
syntax-rules
identifiers with let #291 - fix nested syntax rules with symbols after nested ellipsis
- fix Dark Mode colors and scrolling of the page when using Bookmarklet on English Wikipedia
- remove dependencies on
cond
from-->
macro so you can use use-->
insidecond
- fix handling of recursive
flatten
syntax-rules
macro #304 - fix syntax-rules macro that manipulate code (see tests/syntax.scm and undswap macro)
- fix
(read)
in the Web REPL - fix Node REPL with
npm install
#305 - fix formatting
syntax-rules
- improve floating point representation and parsing
- fix bookmark when hovering over boolean values
- fix quoted cycle in REPL #313
- fix set-repr! on base class #314
- fix
repr
of delay expressions #315 - fix
try..catch
#317 - fix handling
^
and$
syntax extension #318 - fix mixed values in
let*-values
#322 - fix
do
macro #324 - fix
string->number
that leads to NaN #326 - fix unintentional unboxing in
iterator->array
#328 - fix
replace
with asynclambda
#319 - fix
values
without arguments #331 - improve working of REPL in Emacs
- fix
(expt +i +i)
- fix let with duplicated variables #335
- fix escape ellipsis in syntax-rules #334
- fix parsing inexact complex without real part and
inexact->exact
procedure #340 - fix Petrofsky let #341
- fix
repr
of cycles - fix parsing regex that have escaped open bracket
- fix parsing quotation without data
- fix reading syntax-extensions from input ports
- fix parsing syntax-extensions that start with
#f
or#t
#343 - fix repr of curried function (output of
curry
)
- change undocumented arguments to
lips.exec
into an object - change default export into named exports in ES Module
- add R7RS
guard
macro - add R7RS
parameterize
andmake-parameter
- add
shuffle
function - add support to ES Modules #254
- add support for
(scheme-report-environment 7)
- add a way to compare custom instances with
equal?
#270 - add support for
equal?
on records #273 - expose
lips.set_fs
function #256
- remove evaluating of async list data as first argument
- fix
number->string
for binary numbers - fix macro expand on let with more than one binding
- fix shallow
list->array
- fix resolving promises inside quoted promise realm
- fix undocumented symbol syntax extensions
- fix odd? even? on non integers
- fix object literals with null value #264
- fix version and date in executable #261
- fix error on extra close parenthesis #263
- fix
scheme-report-environment
#268 - fix writing to binary ports
- fix unboxing object literals
- throw error on comparing complex numbers #248
- make
integer?
works for normal native numbers - fix parsing newline character literal
- fix reading local files in browser #276
- fix parsing invalid expression
(1 . 2 3)
#245 - fix invalid error message for not matched
syntax-rules
#243 - fix silent error when class don't have parent #272
- fix
try..catch
#163
- chars are now not automatically unboxed to strings #233
- make bookmark REPL dockable #205
- make Strings iterators that return characters
- improve object literals #237
- better error message with exception on invalid string literal
- add non-standard
with-input-from-string
function
- fix using performance object for older version of Node
- fixing escaped symbols in CodeMirror
- fix parsing strings #193
- add proper error message to
-->
macro #200 - fix
performance.timeOrigin
on Node 12 #207 - fix string->list to handle longer code points
- fix numerator and denominator #213
- fix Map object repr
- fix parsing regular expressions #238
- fix exception when syntax-rule macro contain undefined
- fix REPL clearing stdin when using read-line #253
- add proper handling of Paste Brackets mode in REPL for NodeJS
- replace
get-script
withget-resource
that work in Node and in browser and allows to load CSS
- add
object->alist
,command-line
, andsymbol-append
procedures - add SRFI: 193
- add
get-environment-variable
andget-environment-variables
- improve bootstrapping by using same URL of the script if possible
- add
set-global!
macro - add
current-second
,current-jiffy
, andjiffies-per-second
procedures - improve error message in
-->
macro when function not found
- fix async script execution in browser #190
- fix type of
process.env
- fix module load path when load scripts from Node.js
- fix bug in
quasiquote
andunquote-splicing
#194 - fix
inexact->exact
on integers #199 - throw error on missing parentheses #198
- fix empty syntax extensions as functions
- bootstrap URL now require full URL to the file with standard library
- improve performance of
**
operator when JS support exponential operator - add alias for
string-join
andstring-split
- lists are now iterators
- add optional
=>
syntax tocond
macro (as per R7RS) - make
undefined
parser constant - compile into binary CBOR format with LZJB compression
- add support for
log
of complex, rational, and negative numbers - allow to define shorthand object literals #185
- add Buffered Output Port and
flush-output
function
- fix scoping issue in nested
syntax-rules
- fix
repr
of object that have space in key - property throw error when name is used without ellipsis
- fix using dot notation inside syntax-rules macros
- typecheck
string->symbol
andsymbol->string
- fix
parent.frame
insideInterpreter
- fix
eval
without env - fix quote as delimiter
- fix comma dot as two tokens
- fix printing symbols that have brackets or quotes
- fix resolving dot notation (e.g.
lips.LComplex.prototype.modulus
) - fix
repr
of native type prototypes (e.g.LComplex
) - fix using prototypes inside objects (e.g.
(object :foo Number.prototype)
) - fix
sqrt
of rational where numerator or denominator is float - fix
sqrt
of negative real that are like integers #175 - fix boxing NaN value
- fix
length
of nil - fix trimming spaces in
Env::set
- fix
repr
of symbols with impossible characters created withstring->symbol
- fix
eqv?
on same pairs - fix
abs
on inexact numbers that can be represented as integers #181 - fix extra newline when calling print in browser #186
- remove
zip
function that just(map list l1 l2 ...)
raise
now throws object as is (just like JSthrow
keyword)error
now throws LipsError exception as per R7RS
- R7RS datum labels
- allow to use
set-repr!
on records (record type name is now a class) - match function return
#f
instead ofnil
when fail to match (so it work incond
orif
) - new functions
complement
,always
,once
,flip
,unfold
(inspired by Ramda) - add codemirror hits for std lib symbols
- experimental compiler to JSON (not 100% ready)
- add support for
exp
on complex numbers - add R7RS
error-object?
,error-object-message
anderror-object-irritants
- make
NaN
,null
andundefined
parser constants - return proper repr of instances of
define-class
- fix
set-repr!
on classes - fix conflict with jQuery plugns in bookmark
- fix swallowing errors when printing values in Node REPL
- fix mixed quoted and normal promises in let binding #154
- fix problem were await affect quoted promise in macros (e.g.
begin
) #153 - typecheck second argument to
set-obj!
- fix
case
macro (use implementation from R7RS Errata) - fix async constructor in
define-class
- fix methods with improper lists in
define-class
- fix null inside quasiquote
env
anddir
now returns symbols instead of stringsrepr
andtype
of quoted promises now return#<promise>
andpromise
- numbers and characters properties are immutable
- create minfied std scheme file for faster bootstrap
- add
list-copy
- add
define-record-type
- add
escape-regex
function - make
apropos
accept symbol as argument - add doc strings for
**interaction-environment**
and**internal-env**
- add
letrec*
that in LIPS is exactly the same asletrec
- add
pragma->sxml
macro that definesxml
macro (default ish
) - hide
fs
in internal env - automatic bootstrapping of
fs
with BrowserFS if exists pprint
in both REPLs now print in color #33- add
nan?
,infinite?
andfinite?
functions - add
+nan.0
and-nan.0
(R7RS) - properly handle negative inexact zero
- new
environment?
function - add
current-directory
andset-...
from SRFI-170 - add gensym literals (e.g.
#:foo
) - fix pretty print of different cases of
let
- add binary input/output procedures from R7RS
- update vector functions that in R7RS get start and end arguments
- add state props and better repr to quotedPromise
- fix prism highlighting of names (for new context help)
- fix error when using help in node REPL and there are no doc string
- fix escaping regex operators when using string with
apropos
- fix typechecking of number operators #128
- fix indent of call-with- (input-file, output-file and port)
- fix eq? and type of NaN #130
- fix number predicates
- fix
real-part
function - fix parsing complex with 0 inexact imaginary part
- fix option -t --trace in Node REPL
- fix
eqv?
on exact and inexact numbers according to R7RS spec - fix
exact->inexact
on complex numbers - fix arithmetic with single complex value
- fix parsing regex that have escape slash and parenthesis (
#/( \\/)/g
) - fix parsing regex that have single slash in class brackets (
#/\/[^/]+$/
) - fix division on single argument (now
(/ n)
==(/ 1 n)
) - fix complex operation that result in real (e.g. multiplication over conjugation)
- fix
list-ref
according to R7RS errata - fix formatter (pretty print) on multiline strings and atoms
- fix formatter indent of
let*
- fix repr of vectors (arrays with empty value)
- fix promise quotation of object macro call #139
- fix unquote-splicing inside direct quasiquote vector #140
- remove repr of HTMLElement (it's now default instance of a class)
- regular expressions are now prefixed with hash like in Gauche e.g.
#/foo/
- add support for quasiquote on objects and vectors
- interning symbols mechanism #106
- new macro
quoted-promise
and syntax'>
#54 - new function await that return original promise from QuotedPromise
- bytevector functions (R7RS)
- improve detecting and repr of iterators
- add
eof
variable to global env - add
apropos
function - new incremental Lexer that allow to modify parser while it's running
- add SRFI-10 sharp-comma
- new syntax try..catch..finally
- new parallel
list*
macro - new
scheme-report-environment
function (R5RS) - update
**
to work on negative numbers
- fix resolving promises on vectors and objects
- fix context in methods of plain objects #103
- fix
equal?
on typed arrays - fix detecting user repr (when object is subclass)
- fix calling port methods (e.g. calling
get-output-string
function) - fix prism highlighting of multiple regular expression
- fix parsing chars for Unicode outside of BMP
- fix when try..catch is promise that rejects and catch throws
- fix resolving promises when apply function they are not executed in sequentially
- fix
eval
builtin function to evaluate everything
- change behavior of
and
andor
to work likeif
(#f
only falsy value) - vectors and object literals are immutable (to prevent weird sharing data bugs)
- add
promise?
function - improve
append
/append!
to work according to spec and accept multiple arguments - set
global
andwindow
to undefined when not in Node or Window respectively - add
self
as global context for Node, browser and worker - add repr of global object
- add repr of classes
- add support for creating anonymous classes
- add
do-iterator
macro - add repr of
Map
andSet
- add
digit-value
function - add
#d
prefix for decimal numbers - add
include
macro - add
--debug
option to executable (that load src file instead of dist) - add
cond-expand
syntax macro - add new
native-symbol?
function - add warning about using
’
quote, with code example to execute to enable it - add
__dirname
and__filename
variables to Node - add support for variables in method properties of classes (like in JS)
- fix load file that have shebang
- fix repr of eof object
- fix read from input-string-port #85
- fix running web worker from file generated by babel (dist)
- fix repr of lambda function (no
:lambda
as name) - fix parse complex big num (e.g.:
100e+100i
) - fix repr of scheme functions if Function.prototype.toString was modified
- fix repr of iterators
- fix access symbol properties of binded functions (LIPS internals)
- fix duplicated line in executable #89
- fix
char-numeric?
andchar-alphabetic?
to handle all unicode - fix characters with more then one code point
- fix
repr
of functions that are created byself.eval
- fix formatting strings in REPL
- fix
set!
nil
to object field - fix
lambda
indefine-class
that have improper list as arguments - throw exception when applying function to improper list
- fix
join
with nil - fix accessing JavaScript objects in syntax-rules macros
- fix write of strings with newline
- fix indent of
when
andunless
- fix usage of Drag&Drop with bookmarklet on pdf files
- fix accessing methods on pattern variables in syntax macros #83
- fix quasiquote to work like quote if not unquotes (R7RS spec)
- throw exception when calling
(-)
if
it now see #f the only falsy value to match Scheme spec
- add
let-values
,let*-values
anddefine-values
syntax macros - add
exact-integer?
andvector-append
functions - add
stderr
port andcurrent-error-port
function - add environment as second argument to
load
(according to R7RS spec)
- fix empty vector literal
- fix edge case in nested syntax-rules when variable in parent got expanded into identifier
- fix nesting unquote in quasiquote #53
- fix order of evaluation in
,,@x
- fix name collision while catching DOM exceptions #84
- fix integer? and other number type checks
- fix warnings about require while loading from Webpack
- fix unquote-splice multiple lists
- fix syntax highlighting (prism scheme syntax patching)
- fix load inside let that have global variable defined that was not undefined
- fix creating LIPS classes from SXML
- internal properties like
name
are now__name__
- add
raise
(alias forthrow
) andwith-exception-handler
(that wrapsthrow..catch
)
- fix truncate core function
- fix splice nil in quasiquote inside list #68
- fix do macro inside syntax-rules #81
- fix
string-copy
andstring-set!
- fix
error
function to work like R7RS spec - fix edge case in
syntax-rules
found when executing SRFI-26 cut macro - fix unboxing of LIPS values when calling native JavaScript functions
- fix unboxing of callback functions #76
- remove second argument from
filter
callback - change mapping
&
frommake-object
toobject
- parser is now async and parser extensions are evaluated in parse time
- new
random
procedure - string repr of all procedures and macros in REPL now have name
- add
sxml
macro
- fix write vs display of character atoms
- fix mixed case of named characters (e.g.:
#\Space
) - fix
do
macro scope according to R7RS - fix vector literals inside quoted list #79
real?
now return true on integers (bigInts)set!
throw error when variable not defined
- new
string->vector
,vector->string
,vector-map
andstring-map
(R7RS) - new
dynamic-wind
function (R7RS) - make
equal?
compare plain objects
- fix repr of HTMLElement
- fix creating LCharacter from scheme string
- fix
do
macro with let like scope for next values - fix line breaking in formatter
- fix parsing options in executable (fix for
alias lips="lips -q"
) - throw exception when evaluating
(if)
- fix
object?
andplain-object?
- throw exception when invoking syntax that shadow literal identifier
- fix parsing cons dot in
(() . foo)
- new function
make-list
(/ 0.0 0.0)
return NaN- bookmarklet always fetch latest version
case-lambda
,unless
andwhen
hygienic macros (code from R7RS)- new
boolean=?
,port?
andsquare
functions (R7RS) - new
inexact
andexact
aliases (R7RS) - rational
numerator
anddenominator
function (R5RS) - complex
imag-part
,real-part
,make-polar
,angle
andmagnitude
functions (R5RS) - new function:
radians->degree
anddegree->radians
- allow to use undefined in let
- fix function call that return NaN
- fix pretty print of syntax-rules
- add/remove-specials and add/remove-repr are now set/unset
- rename wrong
gdc
to correctgcd
- doc strings on variables
- persistent history in executable REPL
- repr of promises (from
delay
function) - allow
set!
with doted JS notation - new functions
gensym?
andprototype?
- fix Environment::has (ref) on variable that are undefined
- fix macroexpand with pprint on syntax macros
- fix formatter breaking rules definition in LIPS + (+ fix
cond
) - fix rational? on integers (bigint)
- fix parsing quoted atoms (e.g.
'#f
,'#\x
or'#xA
) - fix parsing escape slash inside strings
- don't throw exception on parse error in string->number (return false)
- fix silent accepting two big code point
#\xFFFFFF
- fix custom repr of instances created by define-class
- fix parsing R7RS hex literals in strings
- fix syntax-rules with
(a b ...)
that match single item - fix swallowed undefined from
(cons 1 undefined)
- fix identifiers in syntax-rules
- fix byte vectors
- make print and pprint always call newline
- fix escape ellipsis from R7RS
- fix unboxing values (seen with stack overflow on dir date object)
- fix broken REPL
- rename
ceil
toceiling
(like in R5RS spec) - break
let*
to work the same as in scheme (it was working likeletrec
) if
no longer require boolean as cond- change how arrays are presented, they are look like scheme vector
#(...)
- rename
string
torepr
- new API
lips.Interpreter
- for using interpreter that have different stdout/stdin - balanced_parenthesis now throw exception on broken code
- remove global env from public API (you can still access it using
env.parent
) - remove
->
function (it will collide with SRFI 197 that may be implemented in the future) every
have now same signature assome
which is(fn list)
- start implementing R5RS spec
- streams example
<
,>
,==
,<=
and>=
now have variable number of arguments- new
throw
function that throw JS exception - expose
typecheck
function that test type of the arguments and throw exception if don't match - new
gdc
andlcm
functions - new
string->number
andnumber->string
functions - new
list?
function - new
vector-ref
(same as(. v n)
but with typecheck) - new
+inf.0
and-inf.0
- new
max
,min
andtruncate
- restore
print
it's now alias for display - you can now access nested objects as symbols (e.g
(lips.LNumber 10)
) - new Number types (complex and rational)
- input/output ports + string ports
- add
letrec
macro inexact->exact
andrationalize
(thanks to Kawa/C-Gambit projects)- parsing hex, octal, binary, complex, rational numbers
- characters literals
#\A
and character and string functions - display
#t
and#f
for boolean values in terminal - new
interaction-environment
function +load
use that env by default - improve executable
- user can define string representation (with object that have
toString
lambda) - Hygienic macros:
syntax-rules
transformer macros - improve balancing parenthesis
- expose balanced method in public API (preferred name)
- optional brackets
iterator?
function and detection if iterators fromrepr
andtype
#51add-repr!
function to add string representations to objects- new
string=?
,sort
,in
,list-tail
andbound?
functions - add new
exit
function into executable interpreter - -e/eval option (help and docs will show new options, instead of -c/code but old still works)
case
macro- relative load inside load + auto .scm suffix
- new
zip
,n-ary
,binary
,unary
,take
functions - new
get-script
function
- fix list function #27
- fix
(begin (gensym))
macro that evaluate to symbol - update defstruct to export only needed functions (local functions are namespaced)
- prevent of evaluation of
(define (x . a) a)) (x 1 2 3)
(list
in scheme) - fix
LNumber::String
with radix - fix formatting of float numbers
- fix try..catch
- fix display of function/macro docs (remove white space in parser)
- fix loading modules with
require
- fix macro expand when expansion return list with macro that is data
- fix lips executable in GNU Emacs run-scheme (comint mode)
- unbox values in new
- fix named let with nil #46
- use parser code in string->number
- fix repr of native object instances (e.g.:
Uint8Array
) - fix display/write without newline in both REPLs
- fix evaluating single false value
- fix dir to not include values of
Object.prototype
- fix formatter indent
- replace
print
withdisplay
(more like scheme) - replace
lips.Symbol
withLSymbol
- replace
delay
withwait
(to allow using scheme delay/force) - change
timer
function to justsetTimeout
with expression (oldtimer
is nowwait
)
- improve
-->
macro to handle numbers and strings and symbols (quoted or not) - new function
quoted-symbol?
- allow to use else in cond (same as true - similar to scheme)
- new macro:
promise
- experimental parent.frame (inspired by R)
- add
arguments.callee
to lambdas
- fix for-each with function that use this (like print)
- fix pretty print of lisp code
- fix formatting/indent of list of full S-Expressions
- add require.resolve function
- fix stack trace on Node.js errors
- fix display of functions as values in executable
- require is defined only in Node.js
- bootstrap helpers.lips in executable
- fix auto indent and add version number to executable
- add copyright notes to binary and improve the calling it
- allow to call lips from shebang
- trim lines in functions doc strings #23
- fix list of false values #22
- fix map last value #21
- revert breaking change of read to return Array
- use proper read function in executable REPL
- fix map on empty list
- fix exception when calling error
- unbind functions before setting property with
set-obj!
- make gensyms names shorter (like in CLISP)
- fix double quasiquote + unquote unquote splice (and other quirks)
- fix setting property Descriptor on functions (to change name for preact components)
this
inside lambdas that are object created with new (same as in JS) #19string
andtype
returninstance
for objects created bynew
pprint
function #17
- fix formatter when there is newline at the newline of the code
- fix duplicated copyright notes and missing Facebook note in output from rollup and babel
- fix regenerator from babel in dist files
- fix
ignore
macro - fix
load
function in node - fix
Pair::append
andappend
functions with non pair - throw exception when more unquote then quasiquotes
- fix double unquote symbol
- throw error when unquote-splice on atom in the middle of the list
- don't create cycles in unquote-splicing
- fix cloning cycles
- fix
load
function outside of Node - return undefined from
load
function - fix formatting of lambda expressions
- fix
symbol->string
function when called with gensym symbols - improve
-->
and..
macros - quote
define-macro
arguments so they don't evaluated if inside expression
- new macro
..
- formatter rules for example
cond
macro tree->array
function__code__
inside Macrodefine-formatter-rule
macro for breaking S-Expressions in Formatter
- fix lips.Formatter pattern matching
- better toString and
string
functions (keep class names for internal objects in minified js file) - fix
__code__
on lambda expressions (that also includes(define (name . arg)
) - evaluate of symbols and promises returned from macros
- add
unset!
,add-special!
andremove-special!
functions - add
define-symbol-macro
meta macro that create parser macros (parser transformer symbol) - rewrite
help
as macro so it works with parser macros require
function for Node.js +load
work in Node usingfs.readFile
- stack trace in exception in lips binary
- parser accept strings as argument (no need to call tokenizer - but it also accept array of tokens)
- modules mechanism as macros
- pattern matching as macro
macro?
functioncond
macro
- fix white space in docs for macros
- fix two cases in parser:
`(,(list 1 2))
and`(+ ,,(list 'foo))
#12 - fix quaisquote macro (eval of single unquote in double quasiquote) #14
- add scope to exec in
load
function - fix formatting of multi line strings
- fix
object?
when called with nil and number - fix
macroexpand
macro
- new macro
begin*
that run their arguments in parallel if they async - add typecheck to rest of the functions
- new
real?
andpluck
functions - stack trace for exceptions
- fix
find
andfilter
to check if function from argument return nil - fix accessing FileReader object (try to copy read only prototype)
- fix parser error when parsing symbol macros #10
- fix undefined values in macro with missing arguments #11
- fix macroexpand #9
- fix line breaking in S-Expression Formatter
- remove
nop
(you can use(begin undefined)
)
- fix unquote-splicing on nil (e.g. processing of
`(list ,@nil)
) - cdr and car should return nil on empty list
- typecheck and process nil in c[ad]+r functions
- fix parsing special forms as literal symbols #7
- fix unquote-splicing of empty list (e.g. processing of
`(list ,@(list))
)
- Add support to list cycles
- new macro
ignore
that will swallow promises - add
try
macro - add
current-environment
function eval
LIPS function now accept environment as second argument- better toString of gensym symbols (it now shows
#gensym_1#
instead ofSymbol(#gensym)
checkmacroexpand
) - macroexpand now produce formatted LIPS code (API exposed in Formatter::break that break LIPS code into lines)
- call error in evaluate when promise returned from function is rejected
- fix errors in
map
,reduce
,fold
andfor-each
(that usemap
) - fix exception when call to match fail to match
- fix accessing props on native objects like Object function #6
- fix print that get stdout from global env not from user one + better babel fix added in 0.10.1
- fix version number in source code
- fix for babel when using for-each (weakBind was not working because babel was using
apply(void 0, ...
) - add missing
error
function used in example macros
- change order of
split
,replace
,match
,search
andinstanceof
so you can use them withcurry
append
andappend!
no require list or nil second argument- apply is no longer Macro it's now a function (so it can be used in curry)
- change
append!
from macro to function (it will work with any value as fist list argument not only with names help
function and help system inside functions. First expression after function arguments is docs.- add
pipe
,compose
,fold
andsome
functions - new function
unbind
to help write function that work with functions as objects (LIPS wrap them) - add alias for
.
asget
so you can pass it to curry, with.
LIPS will try to create pair - lambda function introspection
- hyperapp example
- better loading of code
- make
map
,filter
,find
,for-each
andreduce
sync when possible - basic type checking
- documented
unquote-splicing
andunquote
functions that throw error when used outside ofquasiquote
- allow to extend the parser (kind of reader macros)
- fix
if
it should not return false if false value is undefined - fix even and odd functions with BigInt
- fix curry
- fix when inside quasiquote there is empty list
- make
load
uselips.exec
, so it execute code sequentially - fix
append
- fix
timer
to use with expression - fix macros without arguments
- fix calling
setTimeout
#5
for-each
andmap
works as in Scheme spec (use multiple arguments and don't use index)
- better binary (options -f -c + read stdin + REPL + indent + catch exception)
- indent API function
- allow to use dots and variable names
.
function now work with multiple arguments and gets nested object value- add
undefined
to default Environment so you can use it in Lips code - add function
nop
- tokenizer with meta data now include newlines and comments (nothing is removed)
- fix offset in tokenizer
- fix assign variables from variables (e.g. function or variable aliases)
- fix return value of Math operation that should return float #1
- fix tokenizer meta data with strings outside of S-Expressions or in lonely lines
- fix print of lips Symbols (update string function)
- fix missing recursive calls to unquote in quasiquote macro
- fix major issues with quasiquote that make macros don't work quite right
- fix parser when using multiple specials (unquote, quote etc.) in a row
- fix scope when evaluating macros
- fix async issues with list values inside let, lambda and begin macros
- don't evaluate next expressions in
and
andor
macros
- use exception.code for code that triggered exception
- new nth and reverse functions
- new type checking functions null? regex? pair? string? number? symbol? array? object? boolean?
- add lips source code that threw exception in JavaScript error message
- fix lambda with rest parameter
if
now check if argument is boolean
- fix curry function
(let iter
macro that's transformation of(let* ((iter (lambda () ...
- expandable
(let iter
and(define (foo)
by macroexpand
- fix macroexpand evaluation of code
- use nil in cons when cdr is empty list
- fix reduce infinite loop
- fix invoking lambdas in dynamic scope
- fix print of Array with multi line strings and BigInts
- change api for evaluate to have object
{env, dynamic_scope, error}
- rename set to set!, set-cdr to set-cdr! and set-car to set-car!
- rename defmacro to define-macro like in scheme
- change order of arguments in env.inherit
- add bit operation functions
- add float, round and ceil functions
- add env variable to lips namespace which is alias to global_environment
- add find and for-each higher order functions
- add length function
- add new function which create instance of objects
- allow to set value using set! and dot expression that is used to get the value
- better invalid mime on script tag detection
- use ES6 symbols as names for lips symbols in gensym function
- show error when invoking trampoline in dynamic scope
- fix eq? and >= functions
- fix set! (change existing reference or create new if not existing in scope chain)
- fix return value of if macro
- fix defmacro
- fix parsing expressions that have multiple special characters in a row
- handle float calculations
- throw exception when try to execute native non function value
- fix resolving Promises when evaluating code
- don't allow regex that start with space (so it work when you have two divisions in one S-Expression)
- fix parsing float numbers that start with dot
- prevent evaluation of quoted expressions in macros
- fix macro sharing body between invocations
- fix read function
- fix parsing boolean values
- fix map, reduce and filter to handle async functions
- fix access variables that have value of undefined
- use src file for node and dist build file for unpkg
- fix version number in exported field
- use dist/lips.min.js as main for unpkg
- npm housekeeping
- fix lambda with symbol as parameters
- fix for TCO factorial using Y combinator & trampoline
- exec now return promise with array of results
- all numbers are wrapped with LNumber
- add support for new u and s regex flags
- optional dynamic scope
- add
not
,abs
,sqrt
and**
functions - wrap numbers in LNumber that use BigInt or bn.js if possible
- fix lambda with no parameters
- fix define with Promise like
(define x (let ...
- fix - with single argument
- fix for Node
- lambda with reset parameter (like in scheme)
- new functions: 1+, 1-, curry and range
- execute LIPS code from script tag with text-x/lips type attribute
- add string functions: join, split, replace, match, search
- new second parameter to
tokenize
that make it return array of extra objects{token, col, line, offset}
- Pair.flatten and lips function flatten
- fix (reduce + list)
- fix handling of empty list
- make let* handle promises
- fix evaluate of macro that return a Promise
- fix evaluating code with promises
- exec api method
- fix processing of multiple backquote and unquote
- fix build system
- Add reduce and set functions
- add while, ++ and -- macros
- ignore comments everything after ; but not inside strings and regexes
- gensym and load functions
- better string function
- Pair methods for working with ALists + Pair::reduce
- throw exception on car/cdr with non list
- fix parsing empty strings
- fix various errors catch by lint
- fix parsing ALists with list as keys and values
- fix parsing quasiquote that evaluate to single pair out if unquote
- Initial version