Initial draft of first class functions

This commit is contained in:
flaviut 2014-07-16 19:47:06 -04:00
commit a6043ffef4
2 changed files with 29 additions and 5 deletions

View file

@ -1,5 +0,0 @@
---
title: First Class Functions
---
# First Class Functions

29
content/procvars.md Normal file
View file

@ -0,0 +1,29 @@
---
title: First Class Functions
---
# First Class Functions
Nimrod 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
``` 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
$ nimrod 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)
```