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, func/1, func2/1, func3/1, func4/1, func5/1, block/2, block2/3, block3/4, block4/5, block5/6]).
-spec rec(fun((fun(() -> FXS)) -> FXS)) -> FXS.
rec(F) ->
F(fun() -> rec(F) end).
-spec func(fun((FXZ, fun((FXZ) -> FXY)) -> FXY)) -> fun((FXZ) -> FXY).
func(Cb) ->
rec(
fun(F) ->
fun(A) -> Cb(A, fun(_capture) -> Cb(_capture, F()) end) end
end
).
-spec func2(fun((FYI, FYJ, fun((FYI, FYJ) -> FYH)) -> FYH)) -> fun((FYI, FYJ) -> FYH).
func2(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 func3(fun((FYU, FYV, FYW, fun((FYU, FYV, FYW) -> FYT)) -> FYT)) -> fun((FYU, FYV, FYW) -> FYT).
func3(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 func4(fun((FZJ, FZK, FZL, FZM, fun((FZJ, FZK, FZL, FZM) -> FZI)) -> FZI)) -> fun((FZJ, FZK, FZL, FZM) -> FZI).
func4(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 func5(
fun((GAB, GAC, GAD, GAE, GAF, fun((GAB, GAC, GAD, GAE, GAF) -> GAA)) -> GAA)
) -> fun((GAB, GAC, GAD, GAE, GAF) -> GAA).
func5(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 block(FWS, fun((FWS, fun((FWS) -> GAH)) -> GAH)) -> GAH.
block(Initial, Cb) ->
(func(Cb))(Initial).
-spec block2(FWV, FWW, fun((FWV, FWW, fun((FWV, FWW) -> GAK)) -> GAK)) -> GAK.
block2(A, B, Cb) ->
(func2(Cb))(A, B).
-spec block3(
FWZ,
FXA,
FXB,
fun((FWZ, FXA, FXB, fun((FWZ, FXA, FXB) -> GAO)) -> GAO)
) -> GAO.
block3(A, B, C, Cb) ->
(func3(Cb))(A, B, C).
-spec block4(
FXE,
FXF,
FXG,
FXH,
fun((FXE, FXF, FXG, FXH, fun((FXE, FXF, FXG, FXH) -> GAT)) -> GAT)
) -> GAT.
block4(A, B, C, D, Cb) ->
(func4(Cb))(A, B, C, D).
-spec block5(
FXK,
FXL,
FXM,
FXN,
FXO,
fun((FXK, FXL, FXM, FXN, FXO, fun((FXK, FXL, FXM, FXN, FXO) -> GAZ)) -> GAZ)
) -> GAZ.
block5(A, B, C, D, E, Cb) ->
(func5(Cb))(A, B, C, D, E).