Přeskočit obsah

Výrazy pro funkce¤

Přehled¤


!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.