「モジュール:Utils」の版間の差分

ページの作成:「local get_args = require("Module:Arguments").getArgs local p = {} -- check if a table contains x function p.table_contains(tbl, x) for i = 1, #tbl do if x == tbl[i] t…」
 
最新版をコピー
 
1行目: 1行目:
local p = {}
local get_args = require("Module:Arguments").getArgs
local get_args = require("Module:Arguments").getArgs
local p = {}
local yesno = require("Module:Yesno")
 
-- TODO??? Enforce rule for prefixing module-callable functions with an
-- underscore, regardless of whether a wrapper is needed or can be made????
 
-- Trim a string (remove leading and trailing, but not interior, whitespace)
function p.trim(s)
  return s:match("^%s*(.-)%s*$")
end
 
-- Wrapper function for template access to [[Module:Yesno]]
function p._yesno(frame)
return yesno(frame.args["input"], frame.args["default"])
end
 
-- Clamp function
-- Underscore-prefixed in case a wrapper for a template is ever needed
function p._clamp(val, min_val, max_val)
return math.min(math.max(value, min_val), max_val)
end


-- check if a table contains x
-- Check if a table contains the given value
function p.table_contains(tbl, x)
-- Accepts an optional comparison function that accepts two tables, returning
for i = 1, #tbl do
-- true if value and tbl[i] have the same value.
if x == tbl[i] then
function p.table_contains(tbl, value, compare_func)
return true
if compare_func ~= nil then
-- Use compare function
for i = 1, #tbl do
if compare_func(value, tbl[i]) then
return true
end
end
else
-- No compare function
for i = 1, #tbl do
if value == tbl[i] then
return true
end
end
end
end
end
12行目: 45行目:
end
end


-- return the first index with the given value (or nil if not found)
-- Return the first index with the given value (or nil if not found)
function p.index_of(array, value)
-- Accepts an optional comparison function that accepts two tables, returning
for i, v in ipairs(array) do
-- true if value and v have the same value.
if v == value then
function p.index_of(array, value, compare_func)
return i
if compare_func ~= nil then
-- Use compare function
for i, v in ipairs(array) do
if compare_func(v, value) then
return i
end
end
else
-- No compare function
for i, v in ipairs(array) do
if v == value then
return i
end
end
end
end
end
22行目: 67行目:
end
end


-- check whether the input is a non-empty string
-- Check whether the input is a non-empty string
function p.value_provided(s)
function p.value_provided(s)
return type(s) == "string" and #s > 0
return type(s) == "string" and #s > 0
end
end


-- evaluate input on error use default; cannot be used with {{#invoke:}}
-- Evaluate input on error use default; cannot be used with {{#invoke:}}
function p.eval_num_arg(input, def_value)
function p.eval_num_arg(input, def_value)
local result = input
local result = input
33行目: 78行目:
result = def_value
result = def_value
if type(input) == "string" then
if type(input) == "string" then
-- check for fraction notation
-- Check for fraction notation
if input:match("/") == "/" then
if input:match("/") == "/" then
local numerator, denominator = input:match("^%s*([0-9]+)[/?]([0-9]+)%s*$")
local numerator, denominator = input:match("^%s*([0-9]+)[/?]([0-9]+)%s*$")
result = (tonumber(numerator) or def_value) / (tonumber(denominator) or 1)
result = (tonumber(numerator) or def_value) / (tonumber(denominator) or 1)
else
else
input = input:match("^%s*(.-)%s*$")
result = tonumber(input)
result = tonumber(input)
end
end
46行目: 90行目:
end
end


-- return logarithm base b of x
-- Return logarithm base b of x
function p.log(frame)
function p.log(frame)
local args = get_args(frame)
local args = get_args(frame)
53行目: 97行目:


local LN_2 = math.log(2)
local LN_2 = math.log(2)
-- return logarithm base 2 of x
-- Return logarithm base 2 of x
function p.log2(x)
function p.log2(x)
return math.log(x) / LN_2
return math.log(x) / LN_2
66行目: 110行目:
end
end


-- return greatest common divisor of a and b
-- Return greatest common divisor of a and b
function p.gcd(frame)
function p.gcd(frame)
local args = get_args(frame)
local args = get_args(frame)
80行目: 124行目:
end
end


-- return x rounded to places decimal places
-- Return x rounded to places decimal places
function p.round_dec(frame)
function p.round_dec(frame)
local args = get_args(frame)
local args = get_args(frame)
94行目: 138行目:
end
end


-- return x rounded to a precision of prec significant figures
-- Return x rounded to a precision of prec significant figures
function p.round(frame)
function p.round(frame)
local args = get_args(frame)
local args = get_args(frame)
112行目: 156行目:
end
end


-- cached list of primes for is_prime
-- Cached list of primes for is_prime
local primes_cache = {
local primes_cache = {
[0] = false,
[0] = false,
118行目: 162行目:
}
}


-- returns true if integer n is prime; cannot be used with {{#invoke:}}
-- Returns true if integer n is prime; cannot be used with {{#invoke:}}
function p.is_prime(n)
function p.is_prime(n)
local cached = primes_cache[n]
local cached = primes_cache[n]
134行目: 178行目:
end
end


-- returns prime factorization of integer n > 1; cannot be used with {{#invoke:}}
-- Returns prime factorization of integer n > 1; cannot be used with {{#invoke:}}
-- note: the order of keys is not specified for Lua tables
-- Note: the order of keys is not specified for Lua tables
function p.prime_factorization_raw(n)
function p.prime_factorization_raw(n)
local factors = {}
local factors = {}
155行目: 199行目:
end
end


-- returns prime factorization of integer n > 2 (with wiki markup for exponents)
-- Returns prime factorization of integer n > 2 (with wiki markup for exponents)
function p.prime_factorization(frame)
function p.prime_factorization(frame)
local args = get_args(frame)
local args = get_args(frame)
190行目: 234行目:
end
end


-- returns signum(x); cannot be used with {{#invoke:}}
-- Returns signum(x); cannot be used with {{#invoke:}}
function p.signum(x)
function p.signum(x)
if type(x) ~= "number" then
if type(x) ~= "number" then
204行目: 248行目:
end
end


-- returns the next Young diagram of the same size or nil; cannot be used with {{#invoke:}}
-- Returns the next Young diagram of the same size or nil; cannot be used with {{#invoke:}}
-- modifies the input table
-- Modifies the input table
function p.next_young_diagram(d)
function p.next_young_diagram(d)
if #d == 0 then
if #d == 0 then