Fonctions#

L’intérêt des fonctions (ou procédures) est de créer du code modulaire, qui peut être réutilisé. Cependant, les fonctions servent à bien d’autres tâches encore en Scheme, qui fait partie de la famille des langages dits fonctionnels, terme qui s’éclaircira un peu plus tard. La syntaxe la plus courante pour définir une fonction est une extension du même define qui servait à définir des variables :

(define (nom-de-la-fonction argument1 argument2 ...)
  corps de la fonction...)

Le corps de la fonction est une suite d’expressions. Comme dans un begin, elles sont évaluées séquentiellement et la valeur de la dernière est renvoyée par la fonction. Voici un premier exemple :

(define c 299792458)

(define (E m)
  (* m c c))

Après avoir défini cette fonction, on peut l’appeler :

(E 56.6)
 5.08695431165039e18

Comme c’est la valeur de la dernière expression qui est renvoyée, les valeurs des expressions qui se situent avant la dernière sont simplement ignorées. Ces expressions ne peuvent servir que pour leurs effets de bord, c’est à dire les actions qu’elles effectuent en dehors du fait de renvoyer une valeur. Une application courante est d’afficher des messages de débogage.

(define (double x)
  (display "Fonction double appelée avec le paramètre ")
  (display x)
  (display "\n")
  (* 2 x))

(double 5)
 Fonction double appelée avec le paramètre 5
 10