RosettaCodeData/Task/Partial-function-application/Nim/partial-function-applicatio...

29 lines
587 B
Nim

import sequtils
type
Func = proc(n: int): int
FuncS = proc(f: Func; s: seq[int]): seq[int]
proc fs(f: Func; s: seq[int]): seq[int] = s.map(f)
proc partial(fs: FuncS; f: Func): auto =
result = proc(s: seq[int]): seq[int] = fs(f, s)
proc f1(n: int): int = 2 * n
proc f2(n: int): int = n * n
when isMainModule:
const Seqs = @[@[0, 1, 2, 3], @[2, 4, 6, 8]]
let fsf1 = partial(fs, f1)
let fsf2 = partial(fs, f2)
for s in Seqs:
echo fs(f1, s) # Normal.
echo fsf1(s) # Partial.
echo fs(f2, s) # Normal.
echo fsf2(s) # Partial.
echo ""