LoLi is a LISP Dialect.
Image from the internet
I'm a LOLICON! LOLI is the JUSTICE!
I intended to implement a Lisp dialect that combines the features of both Lisp - 1 and Lisp - 2 that means, LoLi will have one name space like in Scheme but data with the same names can exist at the same time like in Common Lisp and the interpreter will choose which one to eval according to the context, for example:
(get-func 'foo)
=> #<PROCEDURE> ;;(def foo (x) (+ 1 x))
(get-sym 'foo)
=> '(foo . 1)
(foo foo)
=> 2
and other features like the interpreter itself can eval an expression without getting into the REPL:
& ./loli --eval “(+ 1 2)”
3
and even more complicated:
& ./loli --eval “(def foo (x) (.\ (y) (+ y x))) (def bar (foo 2)) (bar 3)”
5
Also, LoLi contains some features from other language, for example, the .. operator from Haskell:
(.. 1 5)
=>'(1 2 3 4 5)
(.. 1 5 2)
=>'(1 3 5)
LoLi even has a fault tolerance mechanism that makes life easier:
(+ 1 "a" 5)
=>6
If you are not satisfied with current Lisp dialects, or if you have some great ideas want to make them into a programming language, then just fork and send me a pull request, any help is appreciated.