Výrazy pro funkce¤
Přehled¤
!ARGUMENT
,!ARG
: Získá argument funkce.!FUNCTION
,!FN
: Definuje novou funkci.!SELF
: Aplikuje aktuální funkci, používá se pro rekurzi.
!ARGUMENT
, !ARG
¤
Umožňuje přístup k argumentu name
.
Typ: Scalar.
Synopsis:
!ARGUMENT name
nebo
!ARG name
Tip
!ARG
je zkrácená verze !ARGUMENT
.
!FUNCTION
, !FN
¤
Výraz !FUNCTION
definuje novou funkci.
Obvykle se používá jako top-level expression.
Typ: Mapping.
Info
Výrazy SP-Lang jsou implicitně umístěné definice funkcí.
To znamená, že ve většině případů lze !FUNCTION
přeskočit a je uvedena pouze sekce do
.
Synopsis:
!FUNCTION
name: <název funkce>
arguments:
arg1: <typ>
arg2: <typ>
...
returns: <typ>
schemas: <slovník schémat>
do:
<výraz>
Tip
!FN
je zkrácená verze !FUNCTION
.
Example
!FUNCTION
arguments:
a: si64
b: si32
c: si32
d: si32
returns: fp64
do:
!MUL
- !ARGUMENT a
- !ARGUMENT b
- !ARGUMENT c
- !ARGUMENT d
Tento výraz definuje funkci, která přijímá čtyři argumenty (a
, b
, c
a d
) s příslušnými datovými typy (si64
, si32
, si32
a si32
) a vrací výsledek typu fp64
.
Funkce vynásobí čtyři vstupní argumenty (a
, b
, c
a d
) a vrátí součin jako číslo s desetinou čárkou (fp64
).
!SELF
¤
Příkaz !SELF
umožňuje rekurzivně použít "self" alias aktuální funkci.
Typ: Mapping.
Synopsis:
!SELF
arg1: <hodnota>
arg2: <hodnota>
...
Note
Výraz !SELF
je tzv. Y kombinátor.
Example
!FUNCTION
arguments: {x: int}
returns: int
do:
!IF # hodnota <= 1
test: !GT [!ARG x, 1]
then: !MUL [!SELF {x: !SUB [!ARG x, 1]}, !ARG x]
else: 1
Tento výraz definuje rekurzivní funkci, která přijímá jeden celočíselný argument x
a vrací celočíselný výsledek.
Funkce vypočítá faktoriál vstupního argumentu x
pomocí příkazu if-else.
Pokud je vstupní hodnota x
větší než 1, funkce vynásobí x
faktoriálem (x
- 1), který vypočítá rekurzivním voláním sebe sama.
Pokud je vstupní hodnota x
menší nebo rovna 1, funkce vrátí 1.