Function: ##

## is a function alias for llama, defined in llama.el.

Signature

(\#\# FN &rest BODY)

Documentation

Expand to a lambda expression that wraps around FN and BODY.

This macro provides a compact way to write short lambda expressions. It expands to a lambda expression, which calls the function FN with arguments BODY and returns its value. The arguments of the lambda expression are derived from symbols found in BODY.

Each symbol from %1 through %9, which appears in an unquoted part of BODY, specifies a mandatory argument. Each symbol from &1 through
&9, which appears in an unquoted part of BODY, specifies an optional
argument. The symbol &* specifies extra (&rest) arguments.

The shorter symbol % can be used instead of %1, but using both in the same expression is not allowed. Likewise & can be used instead of &1. These shorthands are not recognized in function position.

To support binding forms that use a vector as VARLIST (such as -let from the dash package), argument symbols are also detected inside of vectors.

The space between ## and FN can be omitted because ## is read-syntax for the symbol whose name is the empty string. If you prefer you can place a space there anyway, and if you prefer to not use this somewhat magical symbol at all, you can instead use the alternative name llama.

Instead of:

  (lambda (a &optional _ c &rest d)
    (foo a (bar c) d))

you can use this macro and write:

  (##foo %1 (bar &3) &*)

which expands to:

  (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:

  (##list %1 _%3 &5 _&6)

becomes:

  (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.

Consider enabling llama-fontify-mode(var)/llama-fontify-mode(fun) to highlight ## and its special arguments.

View in manual

Aliases

##