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

ナビゲーションに移動 検索に移動
保護ページ編集依頼 による: モジュール:Math/sandbox 2016年3月30日 (水) 12:11 (UTC) の版から複製
template>Rxy
(「モジュール:Math」を保護しました: 影響が特に大きいテンプレート: 現時点で 124149 ページからの読み込み ([編集=管理者のみに許可] (無期限) [移動=管理者のみに許可] (無期限)))
preffff>Frozen-mikan
(保護ページ編集依頼 による: モジュール:Math/sandbox 2016年3月30日 (水) 12:11 (UTC) の版から複製)
49行目: 49行目:
end
end


local function applyFuncToArgs(func, ...)
local function fold(func, ...)
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- and must return a number as an output. This number is then supplied as input to the next function call.
-- and must return a number as an output. This number is then supplied as input to the next function call.
63行目: 63行目:
end
end
return ret, count
return ret, count
end
--[[
Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value).
]]
local function binary_fold(func, ...)
local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...)
return value
end
end


190行目: 198行目:
return result
return result
end
end


--[[
--[[
207行目: 216行目:


function p._max(...)
function p._max(...)
local function maxOfTwo(a, b)
local max_value = binary_fold((function(a, b) return a > b end), ...)
if a > b then
return a
else
return b
end
end
local max_value = applyFuncToArgs(maxOfTwo, ...)
if max_value then
if max_value then
return max_value
return max_value
239行目: 241行目:


function p._min(...)
function p._min(...)
local function minOfTwo(a, b)
local min_value = binary_fold((function(a, b) return a < b end), ...)
if a < b then
return a
else
return b
end
end
local min_value = applyFuncToArgs(minOfTwo, ...)
if min_value then
if min_value then
return min_value
return min_value
270行目: 265行目:


function p._average(...)
function p._average(...)
local function getSum(a, b)
local sum, count = fold((function(a, b) return a + b end), ...)
return a + b
end
local sum, count = applyFuncToArgs(getSum, ...)
if not sum then
if not sum then
return 0
return 0
362行目: 354行目:
return oldr
return oldr
end
end
local result, count = applyFuncToArgs(findGcd, ...)
local result, count = fold(findGcd, ...)
return result
return result
end
end
匿名利用者

案内メニュー