// Functions on pointed pairs function cons(_car, _cdr) { return { car: _car, cdr: _cdr }; } const nil = {}; function car(cons) { return cons['car']; } function cdr(cons) { return cons['cdr']; } // Functions on lists function head(l) { return car(l); } function tail(l) { return cdr(l); } function isEmpty(l) { return l === nil; } ////////// Exercice 1 ////////// listIota(1,4); // -> cons(1, cons(2, cons(3, nil))) listIota(4,1); // -> nil listDisp(nil); // -> "[]" listDisp(listIota(1, 4)); // -> "[1,2,3]" ////////// Exercice 2 ////////// listLength(nil); // -> 0 listLength(listIota(1, 6); // -> 5 ////////// Exercice 3 ////////// listAbsRec(cons(1, cons(-2, nil))); // -> cons(1, cons(2, nil)) ////////// Exercice 4 ////////// listAppend(listIota(1, 3), listIota(1, 4)); // -> [1,2,1,2,3] ////////// Exercice 5 ////////// listRotateLeft(listIota(1,5)); // [1,2,3,4] -> [2,3,4,1] listRotateRight(listIota(1,5)); // [1,2,3,4] -> [4,1,2,3] ////////// Exercice 6 ////////// ////////// Exercice 7 ////////// const left = cons(1, cons(6, cons(8, cons(47, cons(87, nil))))); const right = cons(3, cons(8, cons(9, cons(21, cons(50, nil))))); listMerge(left, right); // -> [1,3,6,8,8,9,21,47,50,87] const l4 = cons(3,cons(8,cons(9,cons(21,cons(50,nil))))); listSplit(l4) // -> [ [3,8,9], [21,50] ] ////////// Exercice 8 //////////