Explorar o código

Ajout class gestion listes vides

Arthur Brandao %!s(int64=6) %!d(string=hai) anos
pai
achega
134d20eb79

+ 76 - 0
src/migl/util/ConsEmptyList.java

@@ -0,0 +1,76 @@
+package migl.util;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.function.Function;
+
+public class ConsEmptyList<E> implements ConsList<E> {
+	
+	private final int size;
+	
+	public ConsEmptyList() {
+		this.size = 0;
+	}
+
+	@Override
+	public Iterator<E> iterator() {
+		return new Iterator<E>() {
+			@Override
+			public boolean hasNext() {
+				return false;
+			}
+
+			@Override
+			public E next() {
+				throw new NoSuchElementException("Liste vide");
+			}
+		};
+	}
+
+	@Override
+	public ConsList<E> prepend(E e) {
+		return new ConsListImpl<>(e, this);
+	}
+
+	@Override
+	public ConsList<E> append(E e) {
+		return new ConsListImpl<>(e, this);
+	}
+
+	@Override
+	public boolean isEmpty() {
+		return this.size == 0;
+	}
+
+	@Override
+	public E car() {
+		throw new NoSuchElementException("Liste vide");
+	}
+
+	@Override
+	public ConsList<E> cdr() {
+		return new ConsEmptyList<>();
+	}
+
+	@Override
+	public int size() {
+		return this.size;
+	}
+
+	@Override
+	public <T> ConsList<T> map(Function<E, T> f) {
+		return new ConsEmptyList<>();
+	}
+	
+	@Override
+	public String toString() {
+		return "()";
+	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		//2 Liste vide sont toujours identiques
+		return true;
+	}
+
+}

+ 3 - 3
src/migl/util/ConsListFactory.java

@@ -23,7 +23,7 @@ public final class ConsListFactory {
 	 * @return an empty list
 	 */
 	public static <T> ConsList<T> nil() {
-		return new ConsListImpl<T>(null, null);
+		return new ConsEmptyList<T>();
 	}
 
 	/**
@@ -34,7 +34,7 @@ public final class ConsListFactory {
 	 * @return a list containing only t
 	 */
 	public static <T> ConsList<T> singleton(T t) {
-		return new ConsListImpl<T>(t, null);
+		return new ConsListImpl<T>(t, new ConsEmptyList<>());
 	}
 
 	/**
@@ -55,7 +55,7 @@ public final class ConsListFactory {
 			return singleton(ts[0]);
 		}
 		//Si +sieurs elements
-		 ConsList<T> list = new ConsListImpl<>(ts[ts.length - 1], null);
+		 ConsList<T> list = new ConsListImpl<>(ts[ts.length - 1], new ConsEmptyList<>());
 		for(int i = ts.length - 2; i > -1; i--) {
 			list = list.prepend(ts[i]);
 		}

+ 1 - 7
src/migl/util/ConsListImpl.java

@@ -9,13 +9,7 @@ public class ConsListImpl<E> extends Cons<E, ConsList<E>> implements ConsList<E>
 
 	public ConsListImpl(E left, ConsList<E> right) {
 		super(left, right);
-		if(left == null) {
-			this.size = 0;
-		} else if(right == null) {
-			this.size = 1;
-		} else {
-			this.size = 1 + right.size();
-		}
+		this.size = 1 + right.size();
 	}
 
 	@Override