nème_élément

Profil

entier x liste -> typelt

Exemples

nème_élément(3, (a b c d)) = c

nème_élément(8, (a b c d)) = Erreur

nème_élément(3, (a b c d))
 =  nème_élément(2, (b c d))
 =  nème_élément(1, (c d))
 =  c

nème_élément(8, (a b c d))
 =  nème_élément(7, (b c d))
 =  nème_élément(6, (c d))
 =  nème_élément(5, (d))
 =  nème_élément(4, ())
 =  Erreur

Axiomes

nème_élément(n, l_vide()) = Erreur

nème_élément(n, cons(x, L)) = si_alors_sinon_finsi(n = 1, x, nème_élément(n-1, L))

Traduction en C

TYPEELT neme_element(unsigned int n, liste L)
{
  if (est_vide(L))
  {
    printf("Erreur d'appel dans neme_element: liste vide !\n");
    exit(EXIT_FAILURE);
  }

  if (n == 0)
  {
    printf("Erreur d'appel dans neme_element: n == 0 !\n");
    exit(EXIT_FAILURE);
  }

  if (n == 1)
  {
    return prem(L);
  }
  else
  {
    return neme_element(n-1, reste(L));
  }
}