(CAR '(1 2)) ---> 1
(CDR '(1 2)) ---> (2)
(CONS 1 '(2)) ---> (1 2)
ATTENTION :
(CONS '(1 2) '(3))
---> (1 2 3)
|
CAR, CDR, CONS, NULL? SONT LES QUATRE FONCTIONS INDISPENSABLES POUR LES RÉCURSIONS SUR DES LISTES
LES "TYPES" SCHEME SONT:
|
UN "DOUBLET" :
LISTES = PRÉSENCE D'AU MOINS
ATOME = PAS DE DOUBLET
==> ( ) EST . . . UN ATOME !
PRÉDICATS USUELS:
(PAIR? <ARG>) --> TESTE SI <ARG> EST UNE LISTE (AU MOINS UN DOUBLET)
(NUMBER? <ARG>) --> TESTE SI <ARG> EST UNE CONSTANTE DE TYPE NOMBRE
(EQUAL? <ARG1> <ARG2>)
--> TESTE SI <ARG1> ET <ARG2> SONT DEUX ÉLÉMENTS SCHEME IDENTIQUES
REMARQUE:
|
(APPEND L1 L2) --> "CONCATÈNE" L1 ET L2
FABRIQUER LA LISTE DES ENTIERS
N = 5
--> (5 4 3 2 1)
|
EN SCHEME, CELA S'ÉCRIT :
(DEFINE (IOTA N)
(COND ((= N 0) ()) ; TEST D'ARRÊT
(ELSE (CONS N
(IOTA (- N 1))))))
SÉQUENCE SONORE =
EXEMPLE: "AUCLAIRDELALUNE" =
JOUER-MIDI
PROBLÈME: FAIRE LA FONCTION JOUER-LISTE-AT ??
(DEFINE (JOUER-LISTE-AT D L)
(COND ((NULL? L) 'OK) ; TEST D'ARRÊT
(ELSE (JOUER-MIDI (DATE-EVT (CAR L) D))
(JOUER-LISTE-MIDI D (CDR L)))))
(DEFINE (DATE-EVT E D)
(LIST (CAR E)
(+ D (CADR E))
(CADDR E)
(CADDDR E)
(CAR (CDDDDR E)))
PARCOURIR UNE LISTE:
IMPROVISER UNE LISTE D'ÉVÉNEMENTS
(RANDOM N)
--> NBRE AU HASARD ENTRE 0 ET N-1
(DEFINE (IOTA-RANDOM N)
(COND ((= N 0) ())
(ELSE (CONS (LIST (+ (RANDOM 80) 40)
(* N 100) 100 120 0)
(IOTA-RANDOM (- N 1))))))
(DEFINE (IMPRO N)
(JOUER-LISTE-AT (MIDI-GET-TIME)
(REVERSE (IOTA-RANDOM N))))
CALCULER LE NOMBRE D'ÉLÉMENTS
|
(DEFINE (OUR-LENGTH L)
(COND ((NULL? L) 0) ; TEST D'ARRÊT
(ELSE (+ 1
(OUR-LENGTH (CDR L))))))
QUAND ON PARCOURT UNE LISTE L,"CONCATÉNER" DEUX LISTES:
(OUR-APPEND L1 L2)
= "CONCATÉNER" DEUX LISTES
--> ON PARCOURT LA PREMIERE LISTE L1
|
(DEFINE (OUR-APPEND L1 L2)
(COND ((NULL? L1) L2) ; TEST D'ARRÊT
(ELSE (CONS (CAR L1)
(OUR-APPEND (CDR L1) L2)))))
POUR FAIRE UN TRAITEMENT