From 3913b3c4f314f100f53fb72009e51fee6c9cf7da Mon Sep 17 00:00:00 2001 From: Jacob Signorovitch Date: Tue, 12 Nov 2024 12:56:58 -0500 Subject: [PATCH] Added Generics. --- generics/.classpath | 12 +++ generics/.project | 17 ++++ .../org.eclipse.core.resources.prefs | 2 + generics/.settings/org.eclipse.jdt.core.prefs | 11 +++ generics/src/generics/Main.java | 77 +++++++++++++++++++ 5 files changed, 119 insertions(+) create mode 100644 generics/.classpath create mode 100644 generics/.project create mode 100644 generics/.settings/org.eclipse.core.resources.prefs create mode 100644 generics/.settings/org.eclipse.jdt.core.prefs create mode 100644 generics/src/generics/Main.java diff --git a/generics/.classpath b/generics/.classpath new file mode 100644 index 0000000..f9ed317 --- /dev/null +++ b/generics/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/generics/.project b/generics/.project new file mode 100644 index 0000000..520a6cf --- /dev/null +++ b/generics/.project @@ -0,0 +1,17 @@ + + + generics + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/generics/.settings/org.eclipse.core.resources.prefs b/generics/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/generics/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/generics/.settings/org.eclipse.jdt.core.prefs b/generics/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..9a7984b --- /dev/null +++ b/generics/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=21 diff --git a/generics/src/generics/Main.java b/generics/src/generics/Main.java new file mode 100644 index 0000000..84a16a0 --- /dev/null +++ b/generics/src/generics/Main.java @@ -0,0 +1,77 @@ +package generics; + +import tester.Tester; + +class Examples { + ILo mint = new Mt(); + ILo lint = new Cons(1, new Cons(92, new Cons(-12, mint))); + ILo lint2 = new Cons(1, new Cons(1, mint)); + + ILo mstr = new Mt(); + ILo hello = new Cons("Hello, ", mstr); + ILo world = new Cons("world.", mstr); + ILo ajcmsdj = new Cons("ajcmsdj", mstr); + ILo helloWorld = new Cons("Hello, ", new Cons("world.", mstr)); + ILo helloAjcmsdj = new Cons("Hello, ", ajcmsdj); + + boolean testILoAppend(Tester t) { + return t.checkExpect(hello.append(world), helloWorld) && + t.checkExpect(lint.append(mint), lint) && + t.checkExpect(mint.append(lint), lint); + } + + boolean testILoArmax(Tester t) { + return t.checkExpect(helloWorld.argmax(new IEvaluator()), "Hello, ") + && t.checkExpect(helloAjcmsdj.argmax(new IEvaluator()), "Hello, ") + && t.checkExpect(lint2.argmax(new IEvaluator()), 1) + && t.checkExpect(lint.argmax(new IEvaluator()), 92); + } + + +} + +// Generic function. +interface IFunc { + Y apply(X input); +} + +// Calculate the length of a string. +class StrLen implements IFunc { public Integer apply(String input) { + return input.length(); +}} + +// Calculate the size of an integer. +class IntSize implements IFunc { public Integer apply(Integer input) { + return input - 14; +}} + +// Extracts the value of an input. +interface IEvaluator extends IFunc {} + +interface ILo { + ILo append(ILo a); + A argmax(IEvaluator eval); +} + +class Cons implements ILo { + A first; + ILo rest; + + Cons(A first, ILo rest) { + this.first = first; + this.rest = rest; + } + + public ILo append(ILo a) { return new Cons(this.first, this.rest.append(a)); } + + public A argmax(IEvaluator eval) { + return null; + } +} + +class Mt implements ILo { + public ILo append(ILo a) { return a; } + public A argmax(IEvaluator eval) { + throw new UnsupportedOperationException("No max of empty list."); + } +}