Current section
Files
Jump to
Current section
Files
src/recursive.erl
-module(recursive).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([rec/1, fix/1, fix2/1, fix3/1, fix4/1, fix5/1, use_fix/2, use_fix2/3, use_fix3/4, use_fix4/5, use_fix5/6]).
-spec rec(fun((fun(() -> FXS)) -> FXS)) -> FXS.
rec(F) ->
F(fun() -> rec(F) end).
-spec fix(fun((FXZ, fun((FXZ) -> FXY)) -> FXY)) -> fun((FXZ) -> FXY).
fix(Cb) ->
rec(
fun(F) ->
fun(A) -> Cb(A, fun(_capture) -> Cb(_capture, F()) end) end
end
).
-spec fix2(fun((FYI, FYJ, fun((FYI, FYJ) -> FYH)) -> FYH)) -> fun((FYI, FYJ) -> FYH).
fix2(Cb) ->
rec(
fun(F) ->
fun(A, B) -> Cb(A, B, fun(A@1, B@1) -> Cb(A@1, B@1, F()) end) end
end
).
-spec fix3(fun((FYU, FYV, FYW, fun((FYU, FYV, FYW) -> FYT)) -> FYT)) -> fun((FYU, FYV, FYW) -> FYT).
fix3(Cb) ->
rec(
fun(F) ->
fun(A, B, C) ->
Cb(A, B, C, fun(A@1, B@1, C@1) -> Cb(A@1, B@1, C@1, F()) end)
end
end
).
-spec fix4(fun((FZJ, FZK, FZL, FZM, fun((FZJ, FZK, FZL, FZM) -> FZI)) -> FZI)) -> fun((FZJ, FZK, FZL, FZM) -> FZI).
fix4(Cb) ->
rec(
fun(F) ->
fun(A, B, C, D) ->
Cb(
A,
B,
C,
D,
fun(A@1, B@1, C@1, D@1) -> Cb(A@1, B@1, C@1, D@1, F()) end
)
end
end
).
-spec fix5(
fun((GAB, GAC, GAD, GAE, GAF, fun((GAB, GAC, GAD, GAE, GAF) -> GAA)) -> GAA)
) -> fun((GAB, GAC, GAD, GAE, GAF) -> GAA).
fix5(Cb) ->
rec(
fun(F) ->
fun(A, B, C, D, E) ->
Cb(
A,
B,
C,
D,
E,
fun(A@1, B@1, C@1, D@1, E@1) ->
Cb(A@1, B@1, C@1, D@1, E@1, F())
end
)
end
end
).
-spec use_fix(FWS, fun((FWS, fun((FWS) -> GAH)) -> GAH)) -> GAH.
use_fix(Initial, Cb) ->
(fix(Cb))(Initial).
-spec use_fix2(FWV, FWW, fun((FWV, FWW, fun((FWV, FWW) -> GAK)) -> GAK)) -> GAK.
use_fix2(A, B, Cb) ->
(fix2(Cb))(A, B).
-spec use_fix3(
FWZ,
FXA,
FXB,
fun((FWZ, FXA, FXB, fun((FWZ, FXA, FXB) -> GAO)) -> GAO)
) -> GAO.
use_fix3(A, B, C, Cb) ->
(fix3(Cb))(A, B, C).
-spec use_fix4(
FXE,
FXF,
FXG,
FXH,
fun((FXE, FXF, FXG, FXH, fun((FXE, FXF, FXG, FXH) -> GAT)) -> GAT)
) -> GAT.
use_fix4(A, B, C, D, Cb) ->
(fix4(Cb))(A, B, C, D).
-spec use_fix5(
FXK,
FXL,
FXM,
FXN,
FXO,
fun((FXK, FXL, FXM, FXN, FXO, fun((FXK, FXL, FXM, FXN, FXO) -> GAZ)) -> GAZ)
) -> GAZ.
use_fix5(A, B, C, D, E, Cb) ->
(fix5(Cb))(A, B, C, D, E).