subtree(users/wpcarro): docking briefcase at '24f5a642'
git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
This commit is contained in:
commit
019f8fd211
766 changed files with 175420 additions and 0 deletions
16
users/wpcarro/lisp/README.md
Normal file
16
users/wpcarro/lisp/README.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# Common Lisp
|
||||
|
||||
Things that I like about Common Lisp:
|
||||
- It's an S-expression based language.
|
||||
- It has a powerful macro system
|
||||
- It has a unique way of handling-errors
|
||||
- It is highly introspectible
|
||||
- The tooling integration with Emacs is the best I have ever seen for any language
|
||||
|
||||
Things that I don't like about Common Lisp:
|
||||
- I find its standard libraries difficult to use and -- compared to modern
|
||||
libraries -- like Golang's or Elixir's standard libraries, Common Lisp's
|
||||
libraries are clunky
|
||||
|
||||
As such, I would like to modernize CL's libraries to resemble other libraries
|
||||
with which I am more familiar and, therefore, productive.
|
||||
5
users/wpcarro/lisp/f/README.md
Normal file
5
users/wpcarro/lisp/f/README.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# f.lisp
|
||||
|
||||
In this project, I'm attempting to port the Elisp library [`f.el`][1] to Common Lisp.
|
||||
|
||||
[1]: https://github.com/rejeep/f.el
|
||||
11
users/wpcarro/lisp/f/default.nix
Normal file
11
users/wpcarro/lisp/f/default.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{ depot, briefcase, ... }:
|
||||
|
||||
depot.nix.buildLisp.library {
|
||||
name = "f";
|
||||
deps = with briefcase.lisp; [
|
||||
prelude
|
||||
];
|
||||
srcs = [
|
||||
./main.lisp
|
||||
];
|
||||
}
|
||||
48
users/wpcarro/lisp/f/main.lisp
Normal file
48
users/wpcarro/lisp/f/main.lisp
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
(in-package #:cl-user)
|
||||
(defpackage #:main
|
||||
(:documentation "Modern API for working with files and directories.")
|
||||
(:use #:cl)
|
||||
(:shadow #:type))
|
||||
(in-package #:main)
|
||||
|
||||
;; Common Lisp distinguishes between `namestrings` and `pathnames` as two types
|
||||
;; of filename representations.
|
||||
;;
|
||||
;; A `pathname` is a structured representation of the name of a file, which
|
||||
;; consists of six parts:
|
||||
;; 1. host
|
||||
;; 2. device
|
||||
;; 3. directory
|
||||
;; 4. name
|
||||
;; 5. type
|
||||
;; 6. version
|
||||
|
||||
;; TODO: Should I be using `string` as a type or `namestring`?
|
||||
|
||||
(defmacro type (name in out)
|
||||
`(declaim (ftype (function ,in ,out) ,name)))
|
||||
|
||||
(type join (&rest namestring) pathname)
|
||||
(defun join (&rest args)
|
||||
"Join ARGS to a single path."
|
||||
(apply #'merge-pathnames args))
|
||||
|
||||
(type ext (pathname) string)
|
||||
(defun ext (path)
|
||||
"Return the file extension of PATH."
|
||||
(pathname-type path))
|
||||
|
||||
;; TODO: Define these tests elsewhere.
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Tests
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; join
|
||||
(string= (join "path") "path")
|
||||
(string= (join "path" "to") "path/to")
|
||||
(string= (join "/" "path" "to" "heaven") "/path/to/heaven")
|
||||
|
||||
;; ext
|
||||
(string= (ext #p"path/to/file.ext") "ext")
|
||||
(string= (ext #p"path/to/directory") nil)
|
||||
14
users/wpcarro/lisp/prelude.lisp
Normal file
14
users/wpcarro/lisp/prelude.lisp
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
(in-package #:cl-user)
|
||||
(defpackage #:prelude
|
||||
(:documentation "Supporting miscellaneous utility functions and macros.")
|
||||
(:use #:cl)
|
||||
(:shadow #:type)
|
||||
(:export #:type #:comment))
|
||||
(in-package #:prelude)
|
||||
|
||||
;; TODO: Add documentation to these macros.
|
||||
|
||||
(defmacro type (name in out)
|
||||
`(declaim (ftype (function ,in ,out) ,name)))
|
||||
|
||||
(defmacro comment (&rest _forms) nil)
|
||||
8
users/wpcarro/lisp/prelude.nix
Normal file
8
users/wpcarro/lisp/prelude.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{ depot, ... }:
|
||||
|
||||
depot.nix.buildLisp.library {
|
||||
name = "prelude";
|
||||
srcs = [
|
||||
./prelude.lisp
|
||||
];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue