Commit Graph

27 Commits

Author SHA1 Message Date
Aryadev Chavali
8bd7900946 Use := instead of = so we're not re-interning a symbol in cl-loop 2025-02-14 15:10:43 +00:00
Aryadev Chavali
a1a9ae008a Remove dependency on deploy - use ASDF's program-op instead 2025-02-14 15:10:39 +00:00
Aryadev Chavali
90ef834393 odraw -> cantedraw
Why name it something unique when this is what I'm going to be making
at the end of it all?  Just makes it more confusing for the end user.
2025-02-11 00:54:01 +00:00
Aryadev Chavali
9b3d8e471a Some dir-locals for your (my) convenience. 2025-02-11 00:42:49 +00:00
Aryadev Chavali
802c47bb9f Added build script for terminal use 2025-02-11 00:41:22 +00:00
Aryadev Chavali
bd3a17d678 Move parse-integer* 2025-02-11 00:41:00 +00:00
Aryadev Chavali
52f7db44cf main -> odraw 2025-02-11 00:41:00 +00:00
Aryadev Chavali
0b66ce5dc1 Slightly clean up the example program in main 2025-02-11 00:40:19 +00:00
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