29 lines
No EOL
763 B
Markdown
29 lines
No EOL
763 B
Markdown
---
|
|
title: First Class Functions
|
|
---
|
|
|
|
# First Class Functions
|
|
|
|
Nim supports closures as well as passing functions. Two different syntaxes available for closures, proc syntax, which is identical to regular procedure syntax, and "do notation", which is a bit shorter.
|
|
|
|
``` nimrod
|
|
import sequtils
|
|
|
|
let powersOfTwo = @[1, 2, 4, 8, 16, 32, 64, 128, 256]
|
|
|
|
echo powersOfTwo.filter do (x: int) -> bool : x > 32
|
|
echo powersOfTwo.filter(proc (x: int): bool = x > 32)
|
|
```
|
|
``` console
|
|
$ nim c -r filterclosure.nim
|
|
@[64, 128, 256]
|
|
@[64, 128, 256]
|
|
```
|
|
|
|
Existing procedures can also be passed as functions, but only if they are annotated with the `{.procvar.}` pragma.
|
|
|
|
``` nimrod
|
|
proc greaterThan32(x: int): bool {.procvar.} = x > 32
|
|
|
|
echo powersOfTwo.filter(greaterThan32)
|
|
``` |