A functional, flexible and concise Lisp inspired by Haskell and APL, among others. A ground-up rewrite.
Useful links:
You need Java17 JDK or newer installed to build KamilaLisp yourself.
git clone https://github.com/iczelia/kamilalisp
cd kamilalisp
mvn package
Alternatively, you could download a pre-compiled JAR file for use with Java 17 or newer:
export VERSION=0.3.0.1
mkdir kamilalisp && cd kamilalisp
# Download the KamilaLisp JAR
curl -L -O https://github.com/iczelia/kamilalisp/releases/download/v$VERSION/kamilalisp-$VERSION.jar
# Verify the signature
curl -L -O https://github.com/iczelia/kamilalisp/releases/download/v$VERSION/kamilalisp-$VERSION.jar.asc
curl https://palaiologos.rocks/pub.pgp | gpg --import # Or alternatively: gpg --recv-keys C868F0B6DE38409D
gpg --verify kamilalisp-$VERSION.jar.asc kamilalisp-$VERSION.jar
KamilaLisp allows for actor programming, concurrent programming, imperative programming, functional programming, array programming, pure functional programming, object-oriented programming, rudimentary logic programming, mathematical programming, backend development, numerical and scientific computation, scripting and system administration, symbolic computation (real and complex analysis), tacit (point-free) programming, concurrent programming and event-driven programming. In more detail:
$(foldl + 0)%[1] \outer-product * A \matrix:transpose A.sh:process) - manipulating input/output streams, etc...net:fetch, net:wget).net:client, net:server and their SSL counterparts).sh:ls, sh:glob, sh:mv, sh:basename, etc... - all usable from the REPL and from code, as they return plain data structures, launching and manipulating external processes).SKI calculus:
; SKI calculus
(defun SKI x
(match x
((((S 'x) 'y) 'z) (tie (tie x z) (tie y z)))
(((K 'x) 'y) x)
((I 'x) x)
(('x 'y) (tie (SKI x) (SKI y)))
('x x)))
converge SKI '(((S I) I) K)
List operations and point-free programming:
; Take numbers from 0 to 9999, sum the resulting list and its reverse,
; then take the amount of unique items, and verify if it equals one.
= 1 \⍴∘⊙∘[+ #0 ⌽] \⍳ 10000
; In Haskell:
; (==1) . length . nub $ zipWith (+) <$> id <*> reverse $ [0..10000]
; In APL:
; 1=⍴∪(⊢+⌽)⍳10000
KamilaLisp is distributed under the GNU General Public License v3. See LICENSE for details.
Every KamilaLisp v0.3 release will be signed with PGP and package maintainers are advised to verify the signature. Every release will be tagged as 0.3.x.y where a bump of x signifies a breaking change, while the bump of y signifies a non-breaking change.
Java
99.9%
A functional, flexible and concise Lisp inspired by Haskell and APL, among others. A ground-up rewrite.
Useful links:
You need Java17 JDK or newer installed to build KamilaLisp yourself.
git clone https://github.com/iczelia/kamilalisp
cd kamilalisp
mvn package
Alternatively, you could download a pre-compiled JAR file for use with Java 17 or newer:
export VERSION=0.3.0.1
mkdir kamilalisp && cd kamilalisp
# Download the KamilaLisp JAR
curl -L -O https://github.com/iczelia/kamilalisp/releases/download/v$VERSION/kamilalisp-$VERSION.jar
# Verify the signature
curl -L -O https://github.com/iczelia/kamilalisp/releases/download/v$VERSION/kamilalisp-$VERSION.jar.asc
curl https://palaiologos.rocks/pub.pgp | gpg --import # Or alternatively: gpg --recv-keys C868F0B6DE38409D
gpg --verify kamilalisp-$VERSION.jar.asc kamilalisp-$VERSION.jar
KamilaLisp allows for actor programming, concurrent programming, imperative programming, functional programming, array programming, pure functional programming, object-oriented programming, rudimentary logic programming, mathematical programming, backend development, numerical and scientific computation, scripting and system administration, symbolic computation (real and complex analysis), tacit (point-free) programming, concurrent programming and event-driven programming. In more detail:
$(foldl + 0)%[1] \outer-product * A \matrix:transpose A.sh:process) - manipulating input/output streams, etc...net:fetch, net:wget).net:client, net:server and their SSL counterparts).sh:ls, sh:glob, sh:mv, sh:basename, etc... - all usable from the REPL and from code, as they return plain data structures, launching and manipulating external processes).SKI calculus:
; SKI calculus
(defun SKI x
(match x
((((S 'x) 'y) 'z) (tie (tie x z) (tie y z)))
(((K 'x) 'y) x)
((I 'x) x)
(('x 'y) (tie (SKI x) (SKI y)))
('x x)))
converge SKI '(((S I) I) K)
List operations and point-free programming:
; Take numbers from 0 to 9999, sum the resulting list and its reverse,
; then take the amount of unique items, and verify if it equals one.
= 1 \⍴∘⊙∘[+ #0 ⌽] \⍳ 10000
; In Haskell:
; (==1) . length . nub $ zipWith (+) <$> id <*> reverse $ [0..10000]
; In APL:
; 1=⍴∪(⊢+⌽)⍳10000
KamilaLisp is distributed under the GNU General Public License v3. See LICENSE for details.
Every KamilaLisp v0.3 release will be signed with PGP and package maintainers are advised to verify the signature. Every release will be tagged as 0.3.x.y where a bump of x signifies a breaking change, while the bump of y signifies a non-breaking change.
Java
99.9%