Använda funktioner
Prev | Chapter 5. Grunderna i GEL | Next

## 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 Chapter 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 <identifierare>(<kommaseparerade argument>) = <funktionskropp>
    <identifierare> = (`() = <funktionskropp>)

``` är tecknet grav accent och betecknar en anonym funktion. Genom att sätta 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

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

### Variabla argumentlistor

Om du inkluderar `...` efter det sista argumentnamnet i funktionsdeklarationen kommer Genius att tillåta ett godtyckligt antal argument att skickas i stä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 i stä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 the section called “Definiera funktioner”). Det vill säga att du vill skicka en funktion utan att ge den ett namn. Syntax:

    function(<kommaseparerade argument>) = <funktionskropp>
    `(<kommaseparerade argument>) = <funktionskropp>

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)

### Warning

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.

Prev | Up | Next
Använda variabler | Home | Avskiljare