lpeg.Cf
Lua function

lpeg.Cf

Summary

Creates a fold capture

Prototype

lpeg.Cf (patt, func)



Description

If patt produces a list of captures C1 C2 ... Cn, this capture will produce the value func(...func(func(C1, C2), C3)..., Cn), that is, it will fold (or accumulate, or reduce) the captures from patt using function func.

This capture assumes that patt should produce at least one capture with at least one value (of any type), which becomes the initial value of an accumulator. (If you need a specific initial value, you may prefix a constant capture to patt.) For each subsequent capture LPeg calls func with this accumulator as the first argument and all values produced by the capture as extra arguments; the value returned by this call becomes the new value for the accumulator. The final value of the accumulator becomes the captured value.

As an example, the following pattern matches a list of numbers separated by commas and returns their addition:

-- matches a numeral and captures its value
number = lpeg.R"09"^1 / tonumber

-- matches a list of numbers, captures their values
list = number * ("," * number)^0

-- auxiliary function to add two numbers
function add (acc, newvalue) return acc + newvalue end

-- folds the list of numbers adding them
sum = lpeg.Cf(list, add)

-- example of use
print(sum:match("10,30,43")) --> 83



See Also ...

Topics

DOC_lua_bc Lua bc (big number) functions
DOC_lua_bit Lua bit manipulation functions
DOC_lua_lpeg Lua LPEG library
DOC_lua_package Lua package functions
DOC_lua_rex Lua PCRE regular expression functions
DOC_lua Lua script extensions
DOC_lua_string Lua string functions
DOC_lua_tables Lua table functions
DOC_lua_utils Lua utilities
DOC_regexp Regular Expressions
DOC_scripting Scripting

Lua functions

LUA_lpeg.C lpeg.C (Creates a simple capture)
LUA_lpeg.Carg lpeg.Carg (Creates an argument capture)
LUA_lpeg.Cb lpeg.Cb (Creates a back capture)
LUA_lpeg.Cc lpeg.Cc (Creates a constant capture)
LUA_lpeg.Cg lpeg.Cg (Creates a group capture)
LUA_lpeg.Cmt lpeg.Cmt (Creates a match-time capture)
LUA_lpeg.Cp lpeg.Cp (Creates a position capture)
LUA_lpeg.Cs lpeg.Cs (Creates a substitution capture)
LUA_lpeg.Ct lpeg.Ct (Creates a table capture)
LUA_lpeg.locale lpeg.locale (Returns a table of patterns matching the current locale)
LUA_lpeg.match lpeg.match (Matches a pattern against a string)
LUA_lpeg.P lpeg.P (Converts a value into a pattern)
LUA_lpeg.print lpeg.print (Outputs debugging information to stdout)
LUA_lpeg.R lpeg.R (Returns a pattern that matches a range of characters)
LUA_lpeg.S lpeg.S (Returns a pattern that matches a set of characters)
LUA_lpeg.type lpeg.type (Tests if a value is a pattern)
LUA_lpeg.V lpeg.V (Creates a non-terminal variable for a grammar)
LUA_lpeg.version lpeg.version (Returns the LPeg version)

(Help topic: lua=lpeg.Cf)

DOC_contents Documentation contents page