Lint tuple.el
- add Version, URL, Package-Requires sections - prefer `tuple-` prefix to `tuple/`
This commit is contained in:
		
							parent
							
								
									9661a3ff36
								
							
						
					
					
						commit
						1aa4b3a547
					
				
					 1 changed files with 31 additions and 23 deletions
				
			
		|  | @ -1,5 +1,9 @@ | |||
| ;;; tuple.el --- Tuple API for Elisp -*- lexical-binding: t -*- | ||||
| 
 | ||||
| ;; Author: William Carroll <wpcarro@gmail.com> | ||||
| ;; Version: 0.0.1 | ||||
| ;; URL: https://git.wpcarro.dev/wpcarro/briefcase | ||||
| ;; Package-Requires: ((emacs "25.1")) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;; Work with cons cells with two elements with a familiar API for those who have | ||||
|  | @ -7,78 +11,82 @@ | |||
| 
 | ||||
| ;;; Code: | ||||
| 
 | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ;; Library | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| 
 | ||||
| (cl-defstruct tuple first second) | ||||
| 
 | ||||
| ;; Create | ||||
| (defun tuple/new () | ||||
| (defun tuple-new () | ||||
|   "Return an empty tuple." | ||||
|   (make-tuple :first nil | ||||
|               :second nil)) | ||||
| 
 | ||||
| (defun tuple/from (a b) | ||||
| (defun tuple-from (a b) | ||||
|   "Return a new tuple from A and B." | ||||
|   (make-tuple :first a | ||||
|               :second b)) | ||||
| 
 | ||||
| (defun tuple/from-dotted (dp) | ||||
| (defun tuple-from-dotted (dp) | ||||
|   "Convert dotted pair, DP, into a tuple." | ||||
|   (tuple/from (car dp) (cdr dp))) | ||||
|   (tuple-from (car dp) (cdr dp))) | ||||
| 
 | ||||
| ;; Read | ||||
| (defun tuple/first (pair) | ||||
| (defun tuple-first (pair) | ||||
|   "Return the first element of PAIR." | ||||
|   (tuple-first pair)) | ||||
| 
 | ||||
| (defun tuple/second (pair) | ||||
| (defun tuple-second (pair) | ||||
|   "Return the second element of PAIR." | ||||
|   (tuple-second pair)) | ||||
| 
 | ||||
| ;; Update | ||||
| (defun tuple/map-each (f g pair) | ||||
| (defun tuple-map-each (f g pair) | ||||
|   "Apply F to first, G to second in PAIR." | ||||
|   (->> pair | ||||
|        (tuple/map-first f) | ||||
|        (tuple/map-second g))) | ||||
|        (tuple-map-first f) | ||||
|        (tuple-map-second g))) | ||||
| 
 | ||||
| (defun tuple/map (f pair) | ||||
| (defun tuple-map (f pair) | ||||
|   "Apply F to PAIR." | ||||
|   (let ((pair-copy (copy-tuple pair))) | ||||
|     (funcall f pair-copy))) | ||||
| 
 | ||||
| (defun tuple/map-first (f pair) | ||||
| (defun tuple-map-first (f pair) | ||||
|   "Apply function F to the first element of PAIR." | ||||
|   (let ((pair-copy (copy-tuple pair))) | ||||
|     (setf (tuple-first pair-copy) (funcall f (tuple/first pair-copy))) | ||||
|     (setf (tuple-first pair-copy) (funcall f (tuple-first pair-copy))) | ||||
|     pair-copy)) | ||||
| 
 | ||||
| (defun tuple/map-second (f pair) | ||||
| (defun tuple-map-second (f pair) | ||||
|   "Apply function F to the second element of PAIR." | ||||
|   (let ((pair-copy (copy-tuple pair))) | ||||
|     (setf (tuple-second pair-copy) (funcall f (tuple/second pair-copy))) | ||||
|     (setf (tuple-second pair-copy) (funcall f (tuple-second pair-copy))) | ||||
|     pair-copy)) | ||||
| 
 | ||||
| (defun tuple/set-first (a pair) | ||||
| (defun tuple-set-first (a pair) | ||||
|   "Return a new tuple with the first element set as A in PAIR." | ||||
|   (tuple/map-first (lambda (_) a) pair)) | ||||
|   (tuple-map-first (lambda (_) a) pair)) | ||||
| 
 | ||||
| (defun tuple/set-second (b pair) | ||||
| (defun tuple-set-second (b pair) | ||||
|   "Return a new tuple with the second element set as B in PAIR." | ||||
|   (tuple/map-second (lambda (_) b) pair)) | ||||
|   (tuple-map-second (lambda (_) b) pair)) | ||||
| 
 | ||||
| ;; Delete | ||||
| (defun tuple/delete-first (pair) | ||||
| (defun tuple-delete-first (pair) | ||||
|   "Return PAIR with the first element set to nil." | ||||
|   (tuple/set-first nil pair)) | ||||
|   (tuple-set-first nil pair)) | ||||
| 
 | ||||
| (defun tuple/delete-second (pair) | ||||
| (defun tuple-delete-second (pair) | ||||
|   "Return PAIR with the second element set to nil." | ||||
|   (tuple/set-second nil pair)) | ||||
|   (tuple-set-second nil pair)) | ||||
| 
 | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ;; Predicates | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| 
 | ||||
| (defun tuple/instance? (x) | ||||
| (defun tuple-instance? (x) | ||||
|   "Return t if X is a tuple." | ||||
|   (tuple-p x)) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue