Ricerca…


Sintassi

  • (definire (nome argomenti ...) corpo)

  • (argomenti della funzione ...)

Chiamate di funzioni semplici

Puoi chiamare una funzione in Racket avvolgendola tra parentesi con gli argomenti dopo di essa. Sembra (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"

Anche le operazioni come + e * sono funzioni, e usano la stessa sintassi del chiamare f o g .

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

Per ulteriori informazioni ed esempi, vedere Chiamate di funzione nella Guida alla racchetta.

Argomenti della parola chiave

Le funzioni della racchetta possono anche avere argomenti di parole chiave , che sono specificati con una parola chiave seguita dall'espressione argomento. Una parola chiave inizia con i caratteri #: quindi un argomento di parole chiave assomiglia a #:keyword arg-expr . All'interno di una chiamata di funzione questo appare (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

Per ulteriori informazioni ed esempi, consultare Argomenti della parola chiave nella Guida della racchetta.

La funzione `apply`

Se si dispone di un elenco e si desidera utilizzare gli elementi di tale elenco come argomenti per una funzione, si apply ciò che si desidera:

> (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 prende due argomenti. Il primo argomento è la funzione da applicare e il secondo argomento è la lista che contiene gli argomenti.

apply chiamata come

(apply + (list 1 2 3 4))

È equivalente a

(+ 1 2 3 4)

Il vantaggio principale di apply è che funziona su liste calcolate arbitrarie, compresi gli elenchi e gli elenchi aggiunti che provengono da argomenti di funzione.

> (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

Per ulteriori informazioni ed esempi, consultare la funzione apply nella Guida alla racchetta.

Definizioni di funzione

Le funzioni in Racket possono essere create con il modulo lambda . Il modulo accetta un elenco di argomenti e un corpo.

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

Nell'esempio sopra, la funzione accetta due argomenti e restituisce il risultato della loro moltiplicazione.

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

È noioso riscrivere la funzione e il suo corpo ogni volta che vogliamo moltiplicare due numeri, quindi diamo un nome. Per dargli un nome, usa il modulo di define . Ciò collegherà le funzioni a un nome.

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

Ora possiamo fare riferimento alla nostra funzione chiamando multiply

> (multiply 5 2)
10

Poiché è molto comune associare le procedure ai nomi, Racket fornisce una scorciatoia per definire le funzioni utilizzando il modulo di definizione.

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

Per ulteriori informazioni ed esempi, consultare Funzioni: lambda nella Guida alla racchetta.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow