123456789101112131415161718192021222324252627282930313233343536373839404142 |
- discard """
- output: "02468101214161820\n15"
- """
- proc filter[T](list: seq[T], f: proc (item: T): bool {.closure.}): seq[T] =
- result = @[]
- for i in items(list):
- if f(i):
- result.add(i)
- let nums = @[0, 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
- when true:
- let nums2 = filter(nums,
- (proc (item: int): bool =
- result = (item mod 2) == 0)
- )
- proc outer =
- # lets use a proper closure this time:
- var modulo = 2
- let nums2 = filter(nums,
- (proc (item: int): bool = result = (item mod modulo) == 0)
- )
- for n in nums2: stdout.write(n)
- stdout.write("\n")
- outer()
- import math
- proc compose[T](f1, f2: proc (x: T): T {.closure.}): proc (x: T): T {.closure.} =
- result = (proc (x: T): T =
- result = f1(f2(x)))
- proc add5(x: int): int = result = x + 5
- var test = compose(add5, add5)
- echo test(5)
|