A függvények olyan kódrészletek, melyek újrahasználhatók a számukra eltérő paraméterek megadásával. Formálisabban fogalmazva, a függvények olyan relációs operátorok, amik paraméterekhez kapcsolódnak, melyek lehetnek véges vagy végtelen paraméterek egyaránt. Az alábbi példa egy általános függvénydefiníciót mutat be:
A function kulcsszóval deklaráljuk a függvényeket és az end kulcsszóval zárulnak le, melyet a függvény neve követ, majd 2 zárójel, melyek között adhatjuk meg a paramétereket. Ebben az esetben nincs visszatérési érték, de ez valójában egy illúzió. Igaz, hogy nincs valódi visszatérési érték, de ebben az esetben a nil speciális értékkel tér vissza a függvény. A függvények szeparáltan helyezkednek el a kódban, de összevegyíteni és szétszórtan elhelyezni is van lehetőségünk őket. Tehát a függvényeket a használatuk után is deklarálhatjuk, mint az alábbi példában is ez látható:
Minden esetben nagyon fontos, hogy vizuálisan is gyorsan észlelhessük, hogy hol van a "valódi program", ezért szükséges a szeparálás.
Ugyanez fordított elhelyezkedésben:
Ahogy az már más helyen is ismert, itt is van lehetőség egy soros statement-eket használni. A nyelv ezt a kettőspont operátorral valósítja meg.
A visszatérési értéket a return kulcsszóval tudjuk megadni, a más nyelveknél ismert módon. Példák ezekre:
Ugyanez kettőspontokkal:
A return parancsra hirtelen kilépünk az utasításból, visszaadjuk a megfelelő értéket, és az irányítás visszatér a hívó részhez. Például:
Ha egy kész függvényt meghívunk, de valamelyik paramétert nem töltjük ki, akkor az üres paraméter automatikusan nil-ként fog kiértékelődni. Tehát nem is szükséges épp ezen okból mindig kitölteni minden paraméter helyét.
A nyelv támogatja a rekurziót, mely olyan függvényeket jelent, melyek önmagukat hívják meg a visszatérési lépésként, így egy látszólag végtelen lánc alakul ki, mely a kilépési feltétel teljesülésekor áll le.
Lokális és globális változók egyaránt rendelkezésünkre állnak, használatuk a többi nyelvvel megegyező módon történik, ugyanúgy elfedik egymást, és minden ugyanúgy érvényes rájuk.
A globális változók függvények segítségével is elérhetők, de normál esetben nem felülírhatók. Például:
Néha az is hasznos lehet, ha egy külső változót akarunk megváltoztatni egy függvényből annak paraméterei nélkül. Ilyenkor a külső változó importálásához a global kulcsszót használjuk. Például:
A falcon nyelvben lehetőség van statikus inicializációra, mely során amitiylen módon inicializáltunk, egyszer kiértékelődik és a memóriában marad későbbi használat esetére. Ugyanúgy megoldhatók azok a problémák melyekhez statikus inicializációt használnánk globális deklarációval, azonban az nagyon veszélyes és egyáltalán nem elegáns megoldás.
Ahogy az imént is láthattuk, a static-end blokk segítségével valósítható meg. A blokk beljesében deklaráltak mind static-ok lesznek.
Normál esetben a függvények top-level statement-ek. Egy függvény szülője csak egy falcon modul lehet. Az innerfunc kulcsóval lehet beágyazott függvényt definiálni egy függvényen belül. Egy lokális vagy globális változó értékeként definiálhatjuk a beágyazott függvényeket, és az end kulcsszóval zárul le a blokk. Példák:
A névtelen függvény lehet beágyazott függvény is. Például:
A névtelen függvények az automatizált folyamatok tervezéséhez nagyon szükségesek. Folyamatok által is képezhetünk automatikusan névtelen függvényeket, és minden névtelen függvényt ugyanúgy használhatunk szinte úgy, mint egy átlagos függvényt, kivéve hogy változón keresztül hívhatóak meg.
Az end kulcsszó segítségével lehetséges a függvények lezárása. Egy end csak a hozzá lokálisan tartozó blokkot zárhatja le, a felette álló magasabb rendűt nem.
A belső és névtelen függvények ebben az esetben csak kifejezések, az első példa ilyen formában írva:
Vegyük észre, hogy itt jelen van a sorok végén egy extra pontosvessző, mivel egy nyitott zárójel esetében a sorvég nem tekinthető lezáróként többé, ezért van szükség pontosvesszőre. Ugyanez egy sorba írva:
A kódblokkok legfőképp a névtelen függvények segítségére vannak, különösen azokéra, amiknek szüksége van egy kifejezésre, és visszaadja annak az értékét. A lambda kifejezés formális deklarációja:
ahol p1...pn egy opcionális listája a paramétereknek. Az aktuális paraméterértékeket a függvényhívó operátorokon keresztül "táplálhatjuk". Például számok összegét jóval bonyolultabb módon is kiírathatjuk:
A kódblokkok több mint egy egyszerű kifejezést tartalamznak, és ezek teljesen megegyeznek a névtelen függvényekkel. Ugyanúgy mint a névtelen függvények, itt is szükség van visszatérési értékre, hogy láthatóvá tegyük a hívó részére azt. Például:
Amikor egy tömb első eleme egy függvény, a tömb hívhatóvá válik. A függvényt így a tömb első elemeként érhetjük el, ugyanúgy, mint ahogy az normál esetben egy teljesen átlagos elem lenne. A tömb első utáni elemei ez esetben a függvény paraméterei, illetve a függvény paraméterezésében is megadhatjuk a függvény elemeit.
Még egy érdekes használata a tömbök függvényként való használatának az előre cache-elt paraméterek. Ezeket előre tároljuk a tömbben referencia alapján, és így használhatóak fel későbbi műveletekhez.
Itt a $i az i értékhez tartozó referencia.