From 27d6efb5f5a076f825fe2da1875e0cabaf02b4e7 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 17 Nov 2021 23:03:07 +0800 Subject: + LuaMacro --- Tools/LuaMacro/macro/lambda.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Tools/LuaMacro/macro/lambda.lua (limited to 'Tools/LuaMacro/macro/lambda.lua') diff --git a/Tools/LuaMacro/macro/lambda.lua b/Tools/LuaMacro/macro/lambda.lua new file mode 100644 index 0000000..677f997 --- /dev/null +++ b/Tools/LuaMacro/macro/lambda.lua @@ -0,0 +1,22 @@ +--- Short anonymous functions (lambdas). +-- This syntax is suited +-- to any naive token-processor because the payload is always inside parens. +-- It is an example of a macro associated with a 'operator' character. +-- +-- Syntax is `\()` +-- +-- `\x(x+10)` is short for +-- `function(x) return x+10 end`. There may be a number of formal argumets, +-- e.g. `\x,y(x+y)` or there may be none, e.g. `\(somefun())`. Such functions +-- may return multiple values, e.g `\x(x+1,x-1)`. +-- +-- @module macro.lambda + +local M = require 'macro' + +M.define ('\\',function(get,put) + local args, body = get:idens('('), get:list() + return put:keyword 'function' '(' : idens(args) ')' : + keyword 'return' : list(body) : space() : keyword 'end' +end) + -- cgit v1.1-26-g67d0