Move move .emacs.d out of configs/shared
Moving all of my Emacs-related files into their own directory at the root of this repository.
This commit is contained in:
parent
3684adf23f
commit
578ed1ba98
190 changed files with 41 additions and 302 deletions
98
emacs/.emacs.d/wpc/enum.el
Normal file
98
emacs/.emacs.d/wpc/enum.el
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
;;; enum.el --- Enumerable protocol for Elisp -*- lexical-binding: t -*-
|
||||
;; Author: William Carroll <wpcarro@gmail.com>
|
||||
|
||||
;;; Commentary:
|
||||
;; Heavily influenced by Elixir.
|
||||
|
||||
;; I will not be implement every function in the Enum library, since I don't
|
||||
;; need every function. Some of the streaming functionality may prove difficult
|
||||
;; to write in Elisp. We shall see.
|
||||
|
||||
;; TODO: Implement the following functions:
|
||||
;; - all?/2
|
||||
;; - any?/2
|
||||
;; - at/3
|
||||
;; - chunk_by/2
|
||||
;; - chunk_every/{2,3,4}
|
||||
;; - chunk_while/4
|
||||
;; - concat/1
|
||||
;; - concat/2
|
||||
;; - count/{1,2}
|
||||
;; - dedup/1 # prefer calling this function dedupe
|
||||
;; - dedup_by/2 # same as above
|
||||
;; - drop/2
|
||||
;; - drop_every/2
|
||||
;; - drop_while/2
|
||||
;; - each/2
|
||||
;; - empty?/1
|
||||
;; - fetch/2
|
||||
;; - fetch!/2
|
||||
;; - filter/2
|
||||
;; - find/3
|
||||
;; - find_index/2
|
||||
;; - find_value/3
|
||||
;; - flat_map/2
|
||||
;; - flat_map_reduce/3
|
||||
;; - group_by/3
|
||||
;; - intersperse/2
|
||||
;; - into/{2,3}
|
||||
;; - join/2
|
||||
;; - map/2
|
||||
;; - map_every/3
|
||||
;; - map_join/3
|
||||
;; - map_reduce/3
|
||||
;; - max/2
|
||||
;; - max_by/3
|
||||
;; - member?/2 # consider calling this contains?
|
||||
;; - min/2
|
||||
;; - min_by/2
|
||||
;; - min_max/2 # This is a great function because of O(n) time.
|
||||
;; - min_max_by/3
|
||||
;; - random/1 # Consider just sample with num=1
|
||||
;; - reduce/{2,3}
|
||||
;; - reduce_while/3
|
||||
;; - reject/2
|
||||
;; - reverse/{1,2}
|
||||
;; - reverse_slice/3
|
||||
;; - scan/{2,3}
|
||||
;; - shuffle/1
|
||||
;; - slice/{2,3}
|
||||
;; - sort/{1,2}
|
||||
;; - sort/2
|
||||
;; - sort_by/3
|
||||
;; - split/2
|
||||
;; - split_while/2
|
||||
;; - split_with/2
|
||||
;; - sum/1
|
||||
;; - take/2
|
||||
;; - take_every/2
|
||||
;; - take_random/2 # prefer calling this function sample
|
||||
;; - take_while/2
|
||||
;; - to_list/1
|
||||
;; - uniq/1 # prefer calling this unique
|
||||
;; - uniq_by/2 # prefer calling this unique-by
|
||||
;; - unzip/1
|
||||
;; - with_index/2
|
||||
;; - zip/{1,2}
|
||||
|
||||
;; TODO: Consider how to handle dispatching by type.
|
||||
|
||||
;; TODO: Which types should be supported herein?
|
||||
;; - linked-lists
|
||||
;; - associative-lists
|
||||
;; - cycles
|
||||
|
||||
;; Warning: This module is a total work-in-progress, and it's quite possible
|
||||
;; that I may never even finish it.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defun enum/count (xs)
|
||||
"Return the number of elements in `XS'."
|
||||
(cond
|
||||
((alist/instance? xs) (alist/count xs))
|
||||
((list/instance? xs) (list/length xs)))
|
||||
)
|
||||
|
||||
(provide 'enum)
|
||||
;;; enum.el ends here
|
||||
Loading…
Add table
Add a link
Reference in a new issue