Suche…


Syntax

  • (Definiere (Namensargumente ...) Körper)

  • (Funktionsargumente ...)

Einfache Funktionsaufrufe

Sie können eine Funktion in Racket aufrufen, indem Sie sie mit den Argumenten hinterher in Klammern einschließen. Das sieht so aus (function argument ...) .

> (define (f x) x)
> (f 1)
1
> (f "salmon")
"salmon"
> (define (g x y) (string-append x y))
> (g "large" "salmon")
"largesalmon"
> (g "large " "salmon")
"large salmon"

Operationen wie + und * sind ebenfalls Funktionen und verwenden dieselbe Syntax wie der Aufruf von f oder g .

> (+ 1 2)
3
> (* 3 4)
12
> (+ (* 3 3) (* 4 4))
25

Weitere Informationen und Beispiele finden Sie unter Funktionsaufrufe im Racket Guide.

Keyword-Argumente

Racketfunktionen können auch Schlüsselwortargumente enthalten , die mit einem Schlüsselwort gefolgt vom Argumentausdruck angegeben werden. Ein Schlüsselwort beginnt mit den Zeichen #: #:keyword arg-expr sieht ein Schlüsselwortargument wie #:keyword arg-expr . Innerhalb eines Funktionsaufrufs sieht dies folgendermaßen aus (function #:keyword arg-expr) .

> (define (hello #:name n)
    (string-append "Hello " n))
> (hello #:name "John")
"Hello John"
> (hello #:name "Sarah")
"Hello Sarah"
> (define (kinetic-energy #:mass m #:velocity v)
    (* 1/2 m (sqr v)))
> (kinetic-energy #:mass 2 #:velocity 1)
1
> (kinetic-energy #:mass 6 #:velocity 2)
12

Weitere Informationen und Beispiele finden Sie unter Keyword-Argumente im Racket-Handbuch.

Die `Apply'-Funktion

Wenn Sie eine Liste haben und die Elemente dieser Liste als Argumente für eine Funktion verwenden möchten, gilt apply :

> (apply string-append (list "hello" " " "and hi" " " "are both words"))
"hello and hi are both words"
> (apply + (list 1 2 3 4))
10
> (apply append (list (list "a" "b" "c") (list 1 2 3) (list "do" "re" "mi")))
(list "a" "b" "c" 1 2 3 "do" "re" "me")

apply erfordert zwei Argumente. Das erste Argument ist die anzuwendende Funktion und das zweite Argument ist die Liste mit den Argumenten.

Eine apply Aufruf wie

(apply + (list 1 2 3 4))

Ist äquivalent zu

(+ 1 2 3 4)

Der Hauptvorteil von apply ist, dass es auf beliebig berechneten Listen funktioniert, einschließlich angehängter Listen und Listen, die aus Funktionsargumenten stammen.

> (apply + (append (list 1 2 3 4) (list 2 3 4)))
19
> (define (sum lst)
    (apply + lst))
> (sum (list 1 2 3 4))
10
> (sum (append (list 1 2 3 4) (list 2 3 4)))
19

Weitere Informationen und Beispiele finden Sie unter Die apply Funktion im Racket Guide.

Funktionsdefinitionen

Funktionen in Racket können mit dem lambda Formular erstellt werden. Das Formular enthält eine Liste von Argumenten und einen Hauptteil.

(lambda (x y) (* x y))

Im obigen Beispiel nimmt die Funktion zwei Argumente auf und gibt das Ergebnis ihrer Multiplikation zurück.

> ((lambda (x y) (* x y)) 4 4)
16
> ((lambda (x y) (* x y)) 3 2)
6

Es ist langwierig, die Funktion und ihren Körper jedes Mal neu zu schreiben, wenn wir zwei Zahlen multiplizieren möchten. Geben wir ihr also einen Namen. Um ihm einen Namen zu geben, verwenden Sie das define . Dadurch werden Funktionen an einen Namen gebunden.

(define multiply (lambda (x y) (* x y)))

Jetzt können wir uns auf unsere Funktion beziehen, indem wir multiply aufrufen

> (multiply 5 2)
10

Da es sehr üblich ist, Prozeduren an Namen zu binden, bietet Racket eine Abkürzung, um Funktionen mithilfe des Definitionsformulars zu definieren.

(define (multiply x y) (* x y))

Weitere Informationen und Beispiele finden Sie unter Funktionen: Lambda im Racket Guide.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow