Zelda Wiki

Want to contribute to this wiki?
Sign up for an account, and get started!

Come join the Zelda Wiki community Discord server!

READ MORE

Zelda Wiki
No edit summary
mNo edit summary
Line 20: Line 20:
 
end
 
end
   
-- @args {fn1, fn2, ..., fnN}
 
-- @returns A single function whose arguments are passed to fn1. Output of fn1 is passed to fn2, and so on.
 
-- Similar to https://lodash.com/docs/#flow
 
 
function p.pipe(...)
 
function p.pipe(...)
local functions = {...}
+
local state = {...}
return function(...)
+
return function(functions)
local state = {...}
 
 
for _, fn in ipairs(functions) do
 
for _, fn in ipairs(functions) do
 
state = {fn(unpack(state))}
 
state = {fn(unpack(state))}

Revision as of 17:19, 25 April 2020

The functions in this module return other functions, namely iterators. It also contains utility functions for functional programming. Lua error in Module:Documentation/Module at line 618: attempt to call field 'memoize' (a nil value).


local p = {}

function p.identity(...)
	return ...
end

function p.negate(fn)
	return function(...)
		return not fn(...)
	end
end

function p.noop() 
	return nil
end

function p.peek(tbl)
	mw.logObject(tbl)
	return tbl
end

function p.pipe(...)
	local state = {...}
	return function(functions)
		for _, fn in ipairs(functions) do
			state = {fn(unpack(state))}
		end
		return unpack(state)
	end
end

-- http://lua-users.org/wiki/RangeIterator
function p.range(a, b, step)
  if not b then
    b = a
    a = 1
  end
  step = step or 1
  local f =
    step > 0 and
      function(_, lastvalue)
        local nextvalue = lastvalue + step
        if nextvalue <= b then return nextvalue end
      end or
    step < 0 and
      function(_, lastvalue)
        local nextvalue = lastvalue + step
        if nextvalue >= b then return nextvalue end
      end or
      function(_, lastvalue) return lastvalue end
  return f, nil, a - step
end

return p