Commit Graph

69 Commits

Author SHA1 Message Date
Aryadev Chavali
82875e22d3 Import lib.functions in main 2025-02-11 00:40:19 +00:00
Aryadev Chavali
ae5cc7141d Rework rev-map to use ->> and to make LIST cdrs rather than CONS 2025-02-11 00:40:19 +00:00
Aryadev Chavali
de653b67fb Rework $ operator to work like applicative in Haskell
f $ g $ h -> f(g(h)) whereas previous implementation ($ f g h) was
h(g(f)).
2025-02-11 00:40:19 +00:00
Aryadev Chavali
cb7dacccfa rev-map function
Given an indicator function (A->B) and a list of items of A, return
an association list associating B to the elements that map to it;
essentially the inverse map of the indicator.
2025-02-11 00:40:19 +00:00
Aryadev Chavali
3e6da6b0f4 Macro (alist-val) to access the actual value of a key in an alist 2025-02-11 00:40:19 +00:00
Aryadev Chavali
5c6d444c2e Reworked build.lisp and load.lisp into bob.lisp
bob.lisp quickloads the dependencies necessary and defines functions
which I can just call from my REPL to load or build the project.
Better than loading the file over and over again.  Affectionately
named after "Bob The Builder".
2025-02-11 00:40:19 +00:00
Aryadev Chavali
279437cb81 Implement split function.
Given a list and index into that list, return a cons where the car is
all elements up to that index (exclusive) and the cdr is the rest of
the list.
2025-02-11 00:40:19 +00:00
Aryadev Chavali
2d49ed25ac Implement a "take" function to read subsequences of a list
Basically a wrapper over subseq but for when using `->>` as the list
is the last parameter.
2025-02-11 00:40:19 +00:00
Aryadev Chavali
b29855047b Implement $ operator, second class version of the applicative operator
The `$` operator takes a sequence of FORMS and returns a unary
function which applies the input through that sequence via the `->>`
operator.

For example, consider the predicate "not null".  `null` is built into
Common Lisp but "not null" requires writing a
function (lambda (x) (not (null x))).  Now, using this operator, you
can write ($ not null) which returns the same lambda as above while
being more concise.
2025-02-11 00:40:19 +00:00
Aryadev Chavali
c5d9888641 functions -> forms in lib.macros 2025-02-11 00:40:19 +00:00
Aryadev Chavali
ef572b992b Introduce lib.functions which includes helper functions
Splitting macros and functions into different packages and source code
makes it easier to look at.   Functions currently implemented:
- range: like Python's range
- parse-integer*: parse-integer but junk-allowed is set to t.
2025-02-11 00:40:19 +00:00
Aryadev Chavali
5a48b66dd6 Extract parsing logic from read-integers into parse-integers 2025-02-11 00:40:19 +00:00
Aryadev Chavali
6b60c5065b Re-implement all functions in main via fn macro. 2025-02-11 00:40:19 +00:00
Aryadev Chavali
bbde84c7d7 Add type alias for function and macro for defining functions with type specifier
`fn' is a convenience macro for defining functions with a type
specifier.  Only really matters for `sbcl` and other hard-optimising
Lisp interpreters which actually take these seriously.
2025-02-11 00:40:19 +00:00
Aryadev Chavali
bd47029bd8 Implement a program that reads some integers then prints their sum
Allows junk, and doesn't crash horribly.
2025-02-11 00:40:19 +00:00
Aryadev Chavali
4977b427d8 Implement a `while' macro. 2025-02-11 00:40:19 +00:00
Aryadev Chavali
e5253472a0 Rewrite entrypoint to prompt for a name, then print it 2025-02-11 00:40:19 +00:00
Aryadev Chavali
c069917170 Implement threading macros and make package lib.macros to hold them. 2025-02-11 00:40:19 +00:00
Aryadev Chavali
19b68fa49c Initial commit.
Setup boilerplate for system/package management.  In particular, setup
an entry-point and Shinmera's "deploy" to build executables.

Also write some scripts to easily load or build the project without
Emacs - just `sbcl --load <x>.lisp`.
2025-02-11 00:40:19 +00:00