You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
450 lines
9.6 KiB
450 lines
9.6 KiB
\input texinfo @c -*- texinfo -*- |
|
@c %**start of header |
|
@setfilename dash.info |
|
@settitle dash |
|
@documentencoding UTF-8 |
|
@documentlanguage en |
|
@syncodeindex fn cp |
|
@dircategory Emacs |
|
@direntry |
|
* Dash: (dash.info). A modern list library for GNU Emacs |
|
@end direntry |
|
@c %**end of header |
|
|
|
@copying |
|
|
|
This manual is for @code{dash.el} version 2.12.1. |
|
|
|
Copyright © 2012-2015 Magnar Sveen |
|
|
|
@quotation |
|
This program is free software; you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation, either version 3 of the License, or |
|
(at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License |
|
along with this program. If not, see @uref{http://www.gnu.org/licenses/}. |
|
@end quotation |
|
@end copying |
|
|
|
@finalout |
|
@titlepage |
|
@title Dash |
|
@author Magnar Sveen |
|
@page |
|
@vskip 0pt plus 1filll |
|
@insertcopying |
|
@end titlepage |
|
|
|
@contents |
|
|
|
@ifnottex |
|
@node Top |
|
@top dash |
|
@insertcopying |
|
@end ifnottex |
|
|
|
@menu |
|
* Installation:: |
|
* Functions:: |
|
* Development:: |
|
* Index:: |
|
|
|
@detailmenu |
|
--- The Detailed Node Listing --- |
|
|
|
Installation |
|
|
|
* Using in a package:: |
|
* Syntax highlighting of dash functions:: |
|
|
|
Functions |
|
|
|
@c [[ function-nodes ]] |
|
|
|
Development |
|
|
|
* Contribute:: How to contribute |
|
* Changes:: List of significant changes by version |
|
* Contributors:: List of contributors |
|
@end detailmenu |
|
@end menu |
|
|
|
|
|
|
|
@node Installation |
|
@chapter Installation |
|
|
|
It's available on @uref{https://melpa.org/,Melpa}; use @code{M-x |
|
package-install}: |
|
|
|
@table @kbd |
|
@item M-x package-install @key{RET} dash |
|
Install the dash library. |
|
@end table |
|
|
|
@table @kbd |
|
@item M-x package-install @key{RET} dash-functional |
|
Optional, if you want the function combinators. |
|
@end table |
|
|
|
Alternatively, you can just dump @verb{~dash.el~} or |
|
@verb{~dash-functional.el~} in your load path somewhere. |
|
|
|
@menu |
|
* Using in a package:: |
|
* Syntax highlighting of dash functions:: |
|
@end menu |
|
|
|
@node Using in a package |
|
@section Using in a package |
|
|
|
Add this to the big comment block at the top: |
|
|
|
@lisp |
|
;; Package-Requires: ((dash "2.12.1")) |
|
@end lisp |
|
|
|
@noindent To get function combinators: |
|
|
|
@lisp |
|
;; Package-Requires: ((dash "2.12.1") (dash-functional "1.2.0") (emacs "24")) |
|
@end lisp |
|
|
|
@node Syntax highlighting of dash functions |
|
@section Syntax highlighting of dash functions |
|
|
|
Font lock of dash functions in emacs lisp buffers is now optional. |
|
Include this in your emacs settings to get syntax highlighting: |
|
|
|
@lisp |
|
(eval-after-load 'dash '(dash-enable-font-lock)) |
|
@end lisp |
|
|
|
@node Functions |
|
@chapter Functions |
|
|
|
This chapter contains reference documentation for the dash |
|
@abbr{application programming interface,API}. All functions and |
|
constructs in the library are prefixed with a dash (-). |
|
|
|
There are also anaphoric versions of functions where that makes sense, |
|
prefixed with two dashes instead of one. |
|
|
|
For instance, while @code{-map} takes a function to map over the list, |
|
one can also use the anaphoric form with double dashes - which will |
|
then be executed with @code{it} exposed as the list item. Here's an |
|
example: |
|
|
|
@lisp |
|
(-map (lambda (n) (* n n)) '(1 2 3 4)) ;; normal version |
|
|
|
(--map (* it it) '(1 2 3 4)) ;; anaphoric version |
|
@end lisp |
|
|
|
@noindent Of course, the original can also be written like |
|
|
|
@lisp |
|
(defun square (n) (* n n)) |
|
|
|
(-map 'square '(1 2 3 4)) |
|
@end lisp |
|
|
|
@noindent which demonstrates the usefulness of both versions. |
|
|
|
@menu |
|
@c [[ function-nodes ]] |
|
@end menu |
|
|
|
@c [[ function-docs ]] |
|
|
|
@node Development |
|
@chapter Development |
|
|
|
The dash repository is hosted on GitHub: |
|
@uref{https://github.com/magnars/dash.el} |
|
|
|
@menu |
|
* Contribute:: How to contribute |
|
* Changes:: List of significant changes by version |
|
* Contributors:: List of contributors |
|
@end menu |
|
|
|
@node Contribute |
|
@section Contribute |
|
|
|
Yes, please do. Pure functions in the list manipulation realm only, |
|
please. There's a suite of tests in @verb{~dev/examples.el~}, so remember to add |
|
tests for your function, or it might get broken later. |
|
|
|
Run the tests with @code{./run-tests.sh}. Create the docs with |
|
@code{./create-docs.sh}. I highly recommend that you install these as a |
|
pre-commit hook, so that the tests are always running and the docs are |
|
always in sync: |
|
|
|
@verbatim |
|
cp pre-commit.sh .git/hooks/pre-commit |
|
@end verbatim |
|
|
|
Oh, and don't edit @file{README.md} directly, it is auto-generated. |
|
Change @file{readme-template.md} or @file{examples-to-docs.el} |
|
instead. The same goes for the info manual. |
|
|
|
@node Changes |
|
@section Changes |
|
|
|
@noindent Changes in 2.10: |
|
|
|
@itemize |
|
@item |
|
Add @code{-let} destructuring to @code{-if-let} and @code{-when-let} |
|
(Fredrik Bergroth) |
|
@end itemize |
|
|
|
@noindent Changes in 2.9: |
|
|
|
@itemize |
|
@item |
|
Add @code{-let}, @code{-let*} and @code{-lambda} with destructuring |
|
@item |
|
Add @code{-tree-seq} and @code{-tree-map-nodes} |
|
@item |
|
Add @code{-non-nil} |
|
@item |
|
Add @code{-fix} |
|
@item |
|
Add @code{-fixfn} (dash-functional 1.2) |
|
@item |
|
Add @code{-copy} (Wilfred Hughes) |
|
@end itemize |
|
|
|
@noindent Changes in 2.8: |
|
|
|
@itemize |
|
@item |
|
Add @code{-butlast} |
|
@end itemize |
|
|
|
@noindent Changes in 2.7: |
|
|
|
@itemize |
|
@item |
|
@code{-zip} now supports more than two lists (Steve Lamb) |
|
@item |
|
Add @code{-cycle}, @code{-pad}, @code{-annotate}, @code{-zip-fill} |
|
(Steve Lamb) |
|
@item |
|
Add @code{-table}, @code{-table-flat} (finite cartesian product) |
|
@item |
|
Add @code{-flatten-n} |
|
@item |
|
@code{-slice} now supports "step" argument |
|
@item |
|
Add functional combinators @code{-iteratefn}, @code{-prodfn} |
|
@item |
|
Add @code{-replace}, @code{-splice}, @code{-splice-list} which |
|
generalize @code{-replace-at} and @code{-insert-at} |
|
@item |
|
Add @code{-compose}, @code{-iteratefn} and @code{-prodfn} |
|
(dash-functional 1.1) |
|
@end itemize |
|
|
|
@noindent Changes in 2.6: |
|
|
|
@itemize |
|
@item |
|
Add @code{-is-prefix-p}, @code{-is-suffix-p}, @code{-is-infix-p} |
|
(Matus Goljer) |
|
@item |
|
Add @code{-iterate}, @code{-unfold} (Matus Goljer) |
|
@item |
|
Add @code{-split-on}, @code{-split-when} (Matus Goljer) |
|
@item |
|
Add @code{-find-last-index} (Matus Goljer) |
|
@item |
|
Add @code{-list} (Johan Andersson) |
|
@end itemize |
|
|
|
@noindent Changes in 2.5: |
|
|
|
@itemize |
|
@item |
|
Add @code{-same-items?} (Johan Andersson) |
|
@item |
|
A few bugfixes |
|
@end itemize |
|
|
|
@noindent Changes in 2.4: |
|
|
|
@itemize |
|
@item |
|
Add @code{-snoc} (Matus Goljer) |
|
@item |
|
Add @code{-replace-at}, @code{-update-at}, @code{-remove-at}, and |
|
@code{-remove-at-indices} (Matus Goljer) |
|
@end itemize |
|
|
|
@noindent Changes in 2.3: |
|
|
|
@itemize |
|
@item |
|
Add tree operations (Matus Goljer) |
|
@item |
|
Make font-lock optional |
|
@end itemize |
|
|
|
@noindent Changes in 2.2: |
|
|
|
@itemize |
|
@item |
|
Add @code{-compose} (Christina Whyte) |
|
@end itemize |
|
|
|
@noindent Changes in 2.1: |
|
|
|
@itemize |
|
@item |
|
Add indexing operations (Matus Goljer) |
|
@end itemize |
|
|
|
@noindent Changes in 2.0: |
|
|
|
@itemize |
|
@item |
|
Split out @code{dash-functional.el} (Matus Goljer) |
|
@item |
|
Add @code{-andfn}, @code{-orfn}, @code{-not}, @code{-cut}, |
|
@code{-const}, @code{-flip} and @code{-on}. (Matus Goljer) |
|
@item |
|
Fix @code{-min}, @code{-max}, @code{-min-by} and @code{-max-by} (Matus |
|
Goljer) |
|
@end itemize |
|
|
|
@noindent Changes in 1.8: |
|
|
|
@itemize |
|
@item |
|
Add @code{-first-item} and @code{-last-item} (Wilfred Hughes) |
|
@end itemize |
|
|
|
@noindent Changes in 1.7: |
|
|
|
@itemize |
|
@item |
|
Add @code{-rotate} (Matus Goljer) |
|
@end itemize |
|
|
|
@noindent Changes in 1.6: |
|
|
|
@itemize |
|
@item |
|
Add @code{-min}, @code{-max}, @code{-min-by} and @code{-max-by} (Johan |
|
Andersson) |
|
@end itemize |
|
|
|
@noindent Changes in 1.5: |
|
|
|
@itemize |
|
@item |
|
Add @code{-sum} and @code{-product} (Johan Andersson) |
|
@end itemize |
|
|
|
@noindent Changes in 1.4: |
|
|
|
@itemize |
|
@item |
|
Add @code{-sort} |
|
@item |
|
Add @code{-reduce-r} (Matus Goljer) |
|
@item |
|
Add @code{-reduce-r-from} (Matus Goljer) |
|
@end itemize |
|
|
|
@noindent Changes in 1.3: |
|
|
|
@itemize |
|
@item |
|
Add @code{-partition-in-steps} |
|
@item |
|
Add @code{-partition-all-in-steps} |
|
@end itemize |
|
|
|
@noindent Changes in 1.2: |
|
|
|
@itemize |
|
@item |
|
Add @code{-last} (Matus Goljer) |
|
@item |
|
Add @code{-insert-at} (Emanuel Evans) |
|
@item |
|
Add @code{-when-let} and @code{-if-let} (Emanuel Evans) |
|
@item |
|
Add @code{-when-let*} and @code{-if-let*} (Emanuel Evans) |
|
@item |
|
Some bugfixes |
|
@end itemize |
|
|
|
@node Contributors |
|
@section Contributors |
|
|
|
@itemize |
|
@item |
|
@uref{https://github.com/Fuco1,Matus Goljer} contributed lots of |
|
features and functions. |
|
@item |
|
@uref{https://github.com/tkf,Takafumi Arakaki} contributed |
|
@code{-group-by}. |
|
@item |
|
@uref{https://github.com/tali713,tali713} is the author of |
|
@code{-applify}. |
|
@item |
|
@uref{https://github.com/vemv,Víctor M. Valenzuela} contributed |
|
@code{-repeat}. |
|
@item |
|
@uref{https://github.com/nicferrier,Nic Ferrier} contributed |
|
@code{-cons*}. |
|
@item |
|
@uref{https://github.com/Wilfred,Wilfred Hughes} contributed |
|
@code{-slice}, @code{-first-item} and @code{-last-item}. |
|
@item |
|
@uref{https://github.com/shosti,Emanuel Evans} contributed |
|
@code{-if-let}, @code{-when-let} and @code{-insert-at}. |
|
@item |
|
@uref{https://github.com/rejeep,Johan Andersson} contributed |
|
@code{-sum}, @code{-product} and @code{-same-items?} |
|
@item |
|
@uref{https://github.com/kurisuwhyte,Christina Whyte} contributed |
|
@code{-compose} |
|
@item |
|
@uref{https://github.com/steventlamb,Steve Lamb} contributed |
|
@code{-cycle}, @code{-pad}, @code{-annotate}, @code{-zip-fill} and an |
|
n-ary version of @code{-zip}. |
|
@item |
|
@uref{https://github.com/fbergroth,Fredrik Bergroth} made the |
|
@code{-if-let} family use @code{-let} destructuring and improved |
|
script for generating documentation. |
|
@item |
|
@uref{https://github.com/holomorph,Mark Oteiza} contributed the |
|
script to create an info manual. |
|
@item |
|
@uref{https://github.com/wasamasa,Vasilij Schneidermann} contributed |
|
@code{-some}. |
|
@item |
|
@uref{https://github.com/occidens,William West} made @code{-fixfn} |
|
more robust at handling floats. |
|
@end itemize |
|
|
|
Thanks! |
|
|
|
@node Index |
|
@unnumbered Index |
|
|
|
@printindex cp |
|
|
|
@bye
|
|
|