瀏覽代碼

Debut implementation

Arthur Brandao 6 年之前
父節點
當前提交
f699f7e618
共有 5 個文件被更改,包括 89 次插入2 次删除
  1. 1 0
      .classpath
  2. 1 0
      .gitignore
  3. 1 1
      .project
  4. 1 1
      src/migl/util/ConsListFactory.java
  5. 85 0
      src/migl/util/ConsListImpl.java

+ 1 - 0
.classpath

@@ -2,6 +2,7 @@
 <classpath>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
 	<classpathentry kind="lib" path="org.eclipse.jdt.annotation_2.2.200.v20180921-1416.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>

+ 1 - 0
.gitignore

@@ -2,3 +2,4 @@ bin
 .sonar
 build
 testreports
+src/test

+ 1 - 1
.project

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>TDD2019IMPL</name>
+	<name>GL2</name>
 	<comment></comment>
 	<projects>
 	</projects>

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

@@ -23,7 +23,7 @@ public final class ConsListFactory {
      * @return an empty list
      */
     public static <T> ConsList<T> nil() {
-        throw new UnsupportedOperationException();
+    	return new ConsListImpl<T>(null, null);
     }
 
     /**

+ 85 - 0
src/migl/util/ConsListImpl.java

@@ -0,0 +1,85 @@
+package migl.util;
+
+import java.util.Iterator;
+import java.util.function.Function;
+
+public class ConsListImpl<E> extends Cons<E, ConsList<E>> implements ConsList<E>{
+	
+	private final int size;
+
+	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();
+		}
+	}
+
+	@Override
+	public Iterator<E> iterator() {
+		return new Iterator<E>() {
+			private ConsList<E> current = ConsListImpl.this;
+			@Override
+			public boolean hasNext() {
+				return !current.isEmpty();
+			}
+			
+			@Override
+			public E next() {
+				E e = current.car();
+				current = current.cdr();
+				return e;
+			}
+		};
+	}
+
+	@Override
+	public ConsList<E> prepend(E e) {
+		return new ConsListImpl<>(e, this);
+	}
+
+	@Override
+	public ConsList<E> append(E e) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public boolean isEmpty() {
+		return this.size == 0;
+	}
+
+	@Override
+	public E car() {
+		return this.left();
+	}
+
+	@Override
+	public ConsList<E> cdr() {
+		return this.right();
+	}
+
+	@Override
+	public int size() {
+		return this.size;
+	}
+
+	@Override
+	public <T> ConsList<T> map(Function<E, T> f) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	@Override
+	public String toString() {
+		String str = "(";
+		for(E e : this) {
+			str += e.toString() + " ";
+		}
+		return str.trim() + ")";
+	}
+
+}