next up previous contents index
Next: Fonction à `` arguments Up: Formes let Previous: Les formes let   Contents   Index



Exemple

Cet exemple montre une réalisation possible d'une fonction de tri. Ses arguments sont un vecteur dont les éléments sont à trier par rapport à une fonction de comparaison, elle aussi en argument.

Cette fonction montre une utilisation conjointe des formes let, let* et do.

La fonction sort parcourt l'ensemble des éléments du vecteur, du premier au dernier. Elle parcourt alors les éléments à partir du dernier, en comparant avec la fonction compare l'élément courant à l'élément précédent. S'il est plus petit, il est déplacé :

(define (sort vec compare)
 ; test des argumenents
 (if (and (vector?    vec)
          (procedure? compare))
   ; variables locales
   (let* ([len   (vector-length vec)]
          [len-1 (- len 1)])
    ; parcourt de premier au dernier
    (let loop-i ([i 0])
     (if (>= i len-1)
       ; la fin est atteinte ; retourner le vecteur
       vec
       (begin
        ; parcourt du dernier vers le courant
        (do ([j len-1 (- j 1)])
            ((<= j i))
          (let ([j-1 (- j 1)])
           ; comparaison
           (if (compare (vector-ref vec j)
                        (vector-ref vec j-1))
             ; plus petit~: décalage
             (let ([temp (vector-ref vec j)])
              (vector-set! vec 
                           j
                           (vector-ref vec j-1))
              (vector-set! vec 
                           j-1
                           temp)))))
        ; continuer sur le reste des éléments
        (loop-i (+ i 1))))))
   ; les arguments sont invalides
   #f))

Utilisons cette fonction pour trier des vecteurs :

Osm> (display (sort #(1 3 2 4 6 5 0) <))
     (newline)
  => #(0 1 2 3 4 5 6)

Osm> (display (sort #(1 3 2 4 6 5 0) >))
     (newline)
  => #(6 5 4 3 2 1 0)

Osm> (display (sort #("dsd" "aa" "sde") string>?))
     (newline)
  => #("sde" "dsd" aa")

Ainsi, l'utilisateur peut trier ses propres structures de données avec cette fonction si elles peuvent être ordonnées à l'aide de la fonction de comparaison compare passée en argument qui traduit la relation d'ordre des éléments du tableau.



© 1993 to 2001 Erian Concept