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
				
			
		
							
								
								
									
										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) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue