Använda funktioner
Föregående | Kapitel 5. Grunderna i GEL | Nästa

## Använda funktioner

Syntax:

    Funktionsnamn(argument1, argument2, ...)

Exempel:

    Factorial(5)
    cos(2*pi)
    gcd(921,317)

För att evaluera en funktion, mata in funktionens namn följt av funktionens argument (om sådana finns) i parenteser. Detta kommer returnera resultatet av att tillämpa funktionen på dess argument. Antalet argument för funktionen skiljer sig förstås åt för varje funktion.

Det finns många inbyggda funktioner, som `sin`, `cos` och `tan`. Du kan använda det inbyggda kommandot `help` för att få en lista över tillgängliga funktioner, eller se Kapitel 11, Lista över GEL-funktioner för en fullständig lista.

### Använda tabbkomplettering

Du kan använda tabbkomplettering för att få Genius att komplettera funktionsnamn åt dig. Skriv in de första bokstäverna i namnet och tryck `Tabb`.

### Funktionsnamn är skiftlägeskänsliga

Namnen på funktioner är skiftlägeskänsliga. Detta betyder att funktionerna med namnen `arbeta`, `ARBETA` och `Arbeta` alla är olika funktioner.

### Definiera funktioner

Syntax:

    function <identifier>(<comma separated arguments>) = <function body>
    <identifier> = (`() = <function body>)

``` är tecknet grav accent och betecknar en anonym funktion. Genom att ställa in den till ett variabelnamn definierar du praktiskt sett en funktion.

En funktion tar noll eller fler kommaseparerade argument och returnerar resultatet av funktionskroppen. Att definiera dina egna funktioner är främst en bekvämlighetsfråga; en möjlig användning är att ha uppsättningar av funktioner definierade i GEL-filer som Genius kan läsa in för att göra dem tillgängliga. Exempel:

    function addup(a,b,c) = a+b+c

sedan `addup(1,4,9)` ger 14

### Variabla argumentlistor

Om du inkluderar `...` efter det sista argumentnamnet i funktionsdeklaration kommer Genius att tillåta ett godtyckligt antal argument att skickas istället för det argumentet. Om inga skickades så kommer det argumentet att ställas in till `null`. I andra fall kommer det vara en horisontell vektor som innehåller alla argumenten. Till exempel:

    function f(a,b...) = b

Då kommer `f(1,2,3)` att ge `[2,3]`, medan `f(1)` ger ett `null`.

### Skicka funktioner till funktioner

I Genius är det möjligt att skicka en funktion som ett argument till en annan funktion. Detta kan antingen göras med ”funktionsnoder” eller anonyma funktioner.

Om du inte matar in parenteserna efter ett funktionsnamn så kommer funktionen istället för att evalueras returneras som en ”funktionsnod”. Funktionsnoden kan sedan skickas till en annan funktion. Exempel:

    function f(a,b) = a(b)+1;
    function b(x) = x*x;
    f(b,2)

För att skicka funktioner som inte är definierade kan du använda en anonym funktion (se ”Definiera funktioner”). Det vill säga att du vill skicka en funktion utan att ge den ett namn. Syntax:

    function(<comma separated arguments>) = <function body>
    `(<comma separated arguments>) = <function body>

Exempel:

    function f(a,b) = a(b)+1;
    f(`(x) = x*x,2)

Detta kommer returnera 5.

### Operationer på funktioner

Vissa funktioner tillåter aritmetiska operationer, och vissa funktioner med ett argument som `exp` eller `ln` att operera på funktionen. Till exempel returnerar

    exp(sin*cos+4)

en funktion som tar `x` och returnerar `exp(sin(x)*cos(x)+4)`. Det är funktionellt sett ekvivalent med att skriva

    `(x) = exp(sin(x)*cos(x)+4)

Denna operation kan vara användbar då man definierar funktioner snabbt. För att till exempel skapa en funktion som kallas `f` för att utföra operationen ovan kan du helt enkelt skriva:

    f = exp(sin*cos+4)

Det kan också användas i grafritning. För att till exempel rita grafen för sinus i kvadrat kan du mata in:

    LinePlot(sin^2)

### Varning

Alla funktioner kan inte användas på detta sätt. Då du till exempel använder en binär operation måste funktionerna ta samma antal argument.

Föregående | Upp | Nästa
Använda variabler | Hem | Avskiljare