(********* Exercice 1 *********) f : int -> int -> int let plus x y = x+y;; plus 2 3;; (* -> 5 *) g : (int*int) -> int let fois (x,y) = x*y;; fois (2,3);; (* -> 6 *) let rec length l = match l with (* Compare $\textrm{\mzif l}$ to *) | [] -> 0 (* the empty list *) | (x::xs) -> 1 + length xs (* a list such that $\textrm{\mzif List.hd l = x}$ *) (* and $\textrm{\mzif List.tl l = xs}$ *) (********* Exercice 2 *********) let rec sum l = match l with | [] -> 0 | x::xs -> x + (sum xs);; let rec length l = match l with | [] -> 0 | _::xs -> 1 + (length xs);; let maximum l = let rec max_rec l m = match l with | [] -> m | x::xs -> max_rec xs (max m x) in max_rec l (List.hd l);; (********* Exercice 3 *********) import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; enum Kind { ACOUSTIC("acoustic"), ELECTRIC("electric"); private final String name; Kind(String name){ this.name = name; } public static Boolean isSame(Kind k1, Kind k2) { return (k1 == k2); } } enum Wood { INDIAN_ROSEWOOD("Indian Rosewood"), BRAZILIAN_ROSEWOOD("Brazilian Rosewood"), MAHOGANY("Mahogany"), MAPLE("Maple"), COCOBOLO("Cocobolo"), CEDAR("Cedar"), ADIRONDACK("Adirondack"), ALDER("Alder"), SITKA("Sitka"); private final String name; Wood(String name){ this.name = name; } public static Boolean isSame(Wood w1, Wood w2) { return (w1 == w2); } } enum Trademark { FENDER("Fender"), MARTIN("Martin"), GIBSON("Gibson"), COLLINGS("Collings"), OLSON("Olson"), RYAN("Ryan"), PRS("PRS"), ANY("Unspecified"); private final String name; Trademark(String name){ this.name = name; } public static Boolean isSame(Trademark t1, Trademark t2) { return (t1 == t2); } } class Guitar { private String serialNumber, model; private Double price; private Trademark trademark; private Kind kind; private Wood backWood, topWood; public Guitar(String serialNumber, double price, Trademark trademark, String model, Kind kind, Wood backWood, Wood topWood) { this.serialNumber = serialNumber; this.price = price; this.trademark = trademark; this.model = model; this.kind = kind; this.backWood = backWood; this.topWood = topWood; } public String getSerialNumber() { return serialNumber; } public double getPrice() { return price; } public void setPrice(double newPrice) { this.price = newPrice; } public Trademark getTrademark() { return trademark; } public String getModel() { return model; } public Kind getKind() { return kind; } public Wood getBackWood() { return backWood; } public Wood getTopWood() { return topWood; } public static Boolean isSameModel(Guitar g, String model) { String modelName = g.getModel().toLowerCase(); return !((modelName != null) && (!modelName.equals("")) && (!modelName.equals(model.toLowerCase()))); } } class FindGuitar { // Set up Rick's guitar inventory static final List guitars = Arrays.asList( new Guitar("11277", 3999.95, Trademark.COLLINGS, "CJ", Kind.ACOUSTIC, Wood.INDIAN_ROSEWOOD, Wood.SITKA), new Guitar("V95693", 1499.95, Trademark.FENDER, "Stratocastor", Kind.ELECTRIC, Wood.ALDER, Wood.ALDER), new Guitar("V9512", 1549.95, Trademark.FENDER, "Stratocastor", Kind.ELECTRIC, Wood.ALDER, Wood.ALDER), new Guitar("122784", 5495.95, Trademark.MARTIN, "D-18", Kind.ACOUSTIC, Wood.MAHOGANY, Wood.ADIRONDACK), new Guitar("76531", 6295.95, Trademark.MARTIN, "OM-28", Kind.ACOUSTIC, Wood.BRAZILIAN_ROSEWOOD, Wood.ADIRONDACK), new Guitar("70108276", 2295.95, Trademark.GIBSON, "Les Paul", Kind.ELECTRIC, Wood.MAHOGANY, Wood.MAHOGANY), new Guitar("82765501", 1890.95, Trademark.GIBSON, "SG '61 Reissue", Kind.ELECTRIC, Wood.MAHOGANY, Wood.MAHOGANY), new Guitar("77023", 6275.95, Trademark.MARTIN, "D-28", Kind.ACOUSTIC, Wood.BRAZILIAN_ROSEWOOD, Wood.ADIRONDACK), new Guitar("1092", 12995.95, Trademark.OLSON, "SJ", Kind.ACOUSTIC, Wood.INDIAN_ROSEWOOD, Wood.CEDAR), new Guitar("566-62", 8999.95, Trademark.RYAN, "Cathedral", Kind.ACOUSTIC, Wood.COCOBOLO, Wood.CEDAR), new Guitar("6 29584", 2100.95, Trademark.PRS, "Dave Navarro Signature", Kind.ELECTRIC, Wood.MAHOGANY, Wood.MAPLE) ); private static Map cache = new HashMap<>( Map.ofEntries( Map.entry("Trademark", Double.valueOf(7)), Map.entry("Kind", Double.valueOf(8)), Map.entry("Model", Double.valueOf(9)) )); static List search() { List matchingGuitars = new ArrayList<>(); for (Guitar guitar : guitars) { if (Kind.isSame(guitar.getKind(), Kind.ELECTRIC) && Guitar.isSameModel(guitar, "Stratocastor")) matchingGuitars.add(guitar); } return matchingGuitars; } public static void main(String[] args) { List matchingGuitarsErin = search(); if (!matchingGuitarsErin.isEmpty()) { System.out.println("Erin, you might like these guitars:"); for (Guitar guitar : matchingGuitarsErin) { System.out.println(" We have a " + guitar.getTrademark() + " " + guitar.getModel() + " " + guitar.getKind() + " guitar:\n " + guitar.getBackWood() + " back and sides,\n " + guitar.getTopWood() + " top.\n You can have it for only $" + guitar.getPrice() + "!\n ----"); } } else { System.out.println("Sorry, Erin, we have nothing for you."); } } }