(CAR '(1 2)) ---> 1
(CDR '(1 2)) ---> (2)
(CONS 1 '(2)) ---> (1 2)
(CONS '(1 2) '(3))
---> (1 2 3)
LES "TYPES" SCHEME SONT:
|
LISTES = PRÉSENCE D'AU MOINS
ATOME = PAS DE DOUBLET
==> ( ) EST . . . UN ATOME !
|
FONCTIONS USUELLES:
(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
FONCTIONS SUR LES LISTES:
(LENGTH L) --> NBRE D'ÉLÉMENTS
(REVERSE L) --> INVERSE L
(APPEND L1 L2) --> "CONCATÈNE" L1 ET L2
(= MET BOUT À BOUT)
|
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))))))
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