branch: elpa/llama commit 22a7cc20944f679eb4dafc52c5cc53e92b4deeae Author: Jonas Bernoulli <jo...@bernoul.li> Commit: Jonas Bernoulli <jo...@bernoul.li>
Convert readme to org --- README.md | 65 ------------------------------------------------------------ README.org | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md deleted file mode 100644 index 0b80e4f149..0000000000 --- a/README.md +++ /dev/null @@ -1,65 +0,0 @@ -This package implements the macro `##`, which provides compact -syntax for short `lambda`, without actually being new syntax, -which would be difficult to get merged into Emacs. Past attempts -to add syntax were met with determined pushback and the use of a -macro was suggested as an alternative. - -The `##` macro, whose signature is `(## FN &rest BODY)`, expands -to a `lambda` expression, which wraps around these arguments. - -This `lambda` expression calls the function FN with arguments -BODY and returns its value. Its own arguments are derived from -symbols found in BODY. - -Each symbol from `%1` through `%9`, which appears in BODY, -specifies an argument. Each symbol from `&1` through `&9`, which -appears in BODY, specifies an optional argument. All arguments -following an optional argument have to be optional as well, thus -their names have to begin with `&`. Symbol `&*` specifies extra -(`&rest`) arguments. - -Instead of `%1`, the shorthand `%` can be used; but that should -only be done if it is the only argument, and using both `%1` and -`%` is not allowed. Likewise `&` can be substituted for `&1`. - -Instead of: - -```elisp -(lambda (a _ &optional c &rest d) - (foo a (bar c) d)) -``` - -you can use this macro and write: - -```elisp -(##foo %1 (bar &3) &*) -``` - -which expands to: - -```elisp -(lambda (%1 &optional _&2 &3 &rest &*) - (foo %1 (bar &3) &*)) -``` - -Unused trailing arguments and mandatory unused arguments at the -border between mandatory and optional arguments are also supported: - -```elisp -(##list %1 _%3 &5 _&6) -``` - -becomes: - -```elisp -(lambda (%1 _%2 _%3 &optional _&4 &5 _&6) - (list %1 &5)) -``` - -Note how `_%3` and `_&6` are removed from the body, because their -names begin with an underscore. Also note that `_&4` is optional, -unlike the explicitly specified `_%3`. - -The name `##` was chosen because that allows (optionally) -omitting the whitespace between it and the following symbol. -It also looks similar to `#'function`. diff --git a/README.org b/README.org new file mode 100644 index 0000000000..47478d72d5 --- /dev/null +++ b/README.org @@ -0,0 +1,67 @@ +* Llama — Compact syntax for short lambda + +This package implements the macro ~##~, which provides compact +syntax for short ~lambda~, without actually being new syntax, +which would be difficult to get merged into Emacs. Past attempts +to add syntax were met with determined pushback and the use of a +macro was suggested as an alternative. + +The ~##~ macro, whose signature is ~(## FN &rest BODY)~, expands +to a ~lambda~ expression, which wraps around these arguments. + +This ~lambda~ expression calls the function FN with arguments +BODY and returns its value. Its own arguments are derived from +symbols found in BODY. + +Each symbol from ~%1~ through ~%9~, which appears in BODY, +specifies an argument. Each symbol from ~&1~ through ~&9~, which +appears in BODY, specifies an optional argument. All arguments +following an optional argument have to be optional as well, thus +their names have to begin with ~&~. Symbol ~&*~ specifies extra +(~&rest~) arguments. + +Instead of ~%1~, the shorthand ~%~ can be used; but that should +only be done if it is the only argument, and using both ~%1~ and +~%~ is not allowed. Likewise ~&~ can be substituted for ~&1~. + +Instead of: + +#+begin_src emacs-lisp + (lambda (a _ &optional c &rest d) + (foo a (bar c) d)) +#+end_src + +you can use this macro and write: + +#+begin_src emacs-lisp + (##foo %1 (bar &3) &*) +#+end_src + +which expands to: + +#+begin_src emacs-lisp + (lambda (%1 &optional _&2 &3 &rest &*) + (foo %1 (bar &3) &*)) +#+end_src + +Unused trailing arguments and mandatory unused arguments at the +border between mandatory and optional arguments are also supported: + +#+begin_src emacs-lisp + (##list %1 _%3 &5 _&6) +#+end_src + +becomes: + +#+begin_src emacs-lisp + (lambda (%1 _%2 _%3 &optional _&4 &5 _&6) + (list %1 &5)) +#+end_src + +Note how ~_%3~ and ~_&6~ are removed from the body, because their +names begin with an underscore. Also note that ~_&4~ is optional, +unlike the explicitly specified ~_%3~. + +The name ~##~ was chosen because that allows (optionally) +omitting the whitespace between it and the following symbol. +It also looks similar to ~#'function~.