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.
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
.
Namnen på funktioner är skiftlägeskänsliga. Detta betyder att funktionerna med namnen arbeta
, ARBETA
och Arbeta
alla är olika 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
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
.
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.
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)
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.