Skip to content
forked from tarsius/llama

Compact syntax for short lambda

License

Notifications You must be signed in to change notification settings

emacsmirror/llama

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:

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

The name ## was chosen because that allows (optionally) omitting the whitespace between it and the following symbol. It also looks similar to #'function.

Packages

No packages published

Languages

  • Emacs Lisp 92.6%
  • Makefile 7.4%
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy