def addition( x, y : int) -> int:
    """
        Calcule la somme de x et y
    """

    return x + y 

def car(l : list[int]) -> int:
    """
        Implantation de la fonction Lisp car (Contents of 
        the Address part of the Register) qui retourne
        la liste passée en paramètre sans son premier
        élément

        Si la liste est vide une exception est levée.
    """
    if len(l) == 0:
        raise ValueError("liste vide")
    
    return l[0]
    
def cdr(l : list[int]) -> int:
    """
        Implantation de la fonction Lisp cdr (Contents of 
        the Decrement part of the Register) qui retourne
        la liste passée en paramètre sans son premier
        élément

        Si la liste est vide une exception est levée.
    """
    if len(l) == 0:
        raise ValueError("liste vide")
    
    x = l.pop(0)
    return l

x = 1
y = 2
print(f"{x}+{y} = ", addition(x,y))

ma_liste=[1,2,3]
premier = car(ma_liste)
ma_liste = cdr(ma_liste)
print(f"premier élément de la liste = {premier}")
print(f"liste sans son premier élément = {ma_liste}")
