130 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
| <?xml version="1.0"?>
 | |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 | |
|     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 | |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 | |
|  <head>
 | |
|  <title>KUTILS: Kyle's utilities</title>
 | |
|  <link rel="stylesheet" type="text/css" href="style.css"/>
 | |
|  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 | |
| </head>
 | |
| 
 | |
| <body>
 | |
|  <div class="header">
 | |
|   <h1>KUTILS</h1>
 | |
|   <h2>Kyle's utility package for Common Lisp development</h2>
 | |
|  </div>
 | |
| 
 | |
|  <h3>Introduction</h3>
 | |
| 
 | |
|  <p>This package contains utilities that I find useful in writing
 | |
|  programs; that is, it is a collection of generally-useful functions
 | |
|  and macros. Some of these I've written, and some of these derive from
 | |
|  other sources.</p>
 | |
| 
 | |
|  <p>The utilities can be categorised as</p>
 | |
| 
 | |
|  <ul> 
 | |
|    <li>Those from <strong>On Lisp</strong>,</li>
 | |
|    <li>Those from <strong>Let Over Lambda</strong>,</li>
 | |
|    <li>The <code>hash-table</code> functions,</li>
 | |
|    <li>Miscellanea</li>
 | |
|  </ul>
 | |
| 
 | |
|  <h3>On Lisp</h3>
 | |
| 
 | |
|  <ul>
 | |
|    <li><code>mkstr</code>: concatenates its symbols and returns the printable representation
 | |
| of the result</li>
 | |
|    <li><code>symb</code>: passes its arguments to <code>mkstr</code>
 | |
|    to produce a printable representation, and returns the symbol built
 | |
|    from this result; if the symbol does not exist, it will be
 | |
|    created.</li>
 | |
|    <li><code>group</code>: takes a list as input and produces a
 | |
|    list of sublists of length n.</li>
 | |
|    <li><code>flatten</code>: Returns a list of all atoms present in
 | |
|    the provided list.</li>
 | |
|    <li><code>compose</code>: allows a number of functions with the same arity
 | |
|    to be composed together in a chain.</li>
 | |
|   </ul>
 | |
| 
 | |
|  <h3>Let Over Lambda</h3>
 | |
| 
 | |
|  <ul>
 | |
|    <li><code>defmacro!</code>: provides automatic gensyms and
 | |
|    once-only evaluation. Arguments that begin with g! will be
 | |
|    automatically <code>gensym</code>'d, and arguments that begin with
 | |
|    o! will only be evaluated once. Inside the body, the o! arguments
 | |
|    should be called as their equivalent g! argument: o!x should be
 | |
|    called in the body as g!x.
 | |
|  </ul>
 | |
| 
 | |
|  <h3>hash-table functions</h3>
 | |
|  <ul>
 | |
|    <li><code>sethash</code>: convenience function for setting a value
 | |
|    in a hash table.</li>
 | |
|    <li><code>hashkeys</code>: returns a list of all the keys in a hash
 | |
|    table.</li>
 | |
|    <li><code>hash-table-to-alist</code>: converts the hash table to an
 | |
|    alist of <code>(key . value)</code> pairs.</li>
 | |
|    <li><code>alist-to-hash-table</code>: converts an alist to a hash
 | |
|    table.</li>
 | |
|    <li><code>enable-hash-table-reader</code>: enables the reader
 | |
|    macro <code>#{}#</code> for hash tables. The resulting hash-table
 | |
|    will use #'equal for equality. For example,
 | |
| 
 | |
| <pre>
 | |
| #{:a :b :c :d}#
 | |
| </pre>
 | |
| 
 | |
| will create a hash-table with the keys <code>:a</code>
 | |
| and <code>:c</code>. <code>:a</code> stores the value <code>:b</code>,
 | |
| and <code>:c</code> stores the value <code>:d</code>.</li>
 | |
|  </ul>
 | |
| 
 | |
|  <h3>Miscellaneous</h3>
 | |
|  <ul>
 | |
|    <li><code>interpose</code>: places a separator between each element
 | |
|    of a list.</li>
 | |
|    <li><code>build-list</code>: if arg is an atom, return it as a
 | |
|    list. If it's a list, return the arg. If it's a vector, coerce it
 | |
|    to a list. Otherwise, return nil.</li>
 | |
|    <li><code>partial</code>: provides partial function application. It
 | |
|    returns a lambda that will call the function given with the intial
 | |
|    args and any additional args provided to the lambda.</li>
 | |
|    <li><code>macroexpand-n</code>: expand the macro n times.</li>
 | |
|    <li><code>mksymb</code>: creates a symbol from its arguments,
 | |
|    upcasing strings as required.</li>
 | |
|    <li><code>mkkw</code>: creates a keyword from its arguments.</li>
 | |
|    <li><code>zip</code>: join the cars of the input lists; e.g. <code>(zip
 | |
|    '(a b c) '(1 2 3))</code> will produce <code>((a 1) (b 2) (c
 | |
|    3))</code>.</li>
 | |
|    <li><code>defclass!</code>: convenience macro for quickly defining
 | |
|    a class with slots and a docstring.</li>
 | |
|  </ul>
 | |
| 
 | |
|  <h3>Quicklisp installation</h3>
 | |
| 
 | |
|  <p>Clone into your Quicklisp project's <code>local-projects/</code>
 | |
|  subdirectory, and call <code>(ql:quickload :kutils)</code>.</p>
 | |
| 
 | |
|  <p>This package does ake use of
 | |
|  the <a href="https://www.common-lisp.net/project/closer/closer-mop.html"><code>closer-mop</code></a>
 | |
|  package.</a>.
 | |
| 
 | |
|  <h3>Git</h3>
 | |
| 
 | |
|    <p>You can <a href="https://github.com/kisom/kutils">browse the
 | |
|    Github repository</a>.</p>
 | |
| 
 | |
|    <div class="footer">
 | |
|      <a href="mailto:kyle (at) metacircular (dot) net">K. Isom</a>, 2015-04-06.
 | |
|    </div>
 | |
| 
 | |
|    <div class="check">
 | |
|      <a href="http://validator.w3.org/check/referer">
 | |
|         Valid XHTML 1.0 Strict</a>
 | |
|   </div>
 | |
| 
 | |
|  </body>
 | |
| </html>
 |