Solutions implemented in Java for: https://www.cis.upenn.edu/~cis1940/spring13/lectures.html
| Homework | Functional Concept | Java Concept Applied | Java Classes |
|---|---|---|---|
| Homework 1 | Credit Card Validation & Tower of Hanoi - Pure functions, immutability, function composition, recursion | Streams API, Function.andThen(), immutable collections (List.of()), records, method references |
Exercise1.java Exercise2.java |
| Homework 2 | Log Parsing & ADTs - Algebraic Data Types, pattern matching, sealed interfaces, binary trees | Sealed interfaces, switch expressions, records, stream operations, trampoline pattern | Exercise1.java LogMessage.java MessageType.java +5 more |
| Homework 3 | List Operations - Higher-order functions, list comprehensions, local maxima | Generic methods, IntStream.iterate(), functional interfaces, stream operations |
Exercise1.java Exercise2.java Exercise3.java |
| Homework 4 | Wholemeal Programming & Trees - Map, fold, function composition, tail recursion, binary trees | Trampoline pattern, Stream.map(), curried functions, abstract classes, algebraic data types |
Exercise1.java Exercise2.java Exercise3.java Tree.java |
| Homework 5 | Type Classes & Polymorphism - Visitor pattern, type-safe evaluation, expression languages | Visitor pattern, generics, functional interfaces, method references, polymorphism | Exercise1.java Exercise2.java Exercise3.java |
| Homework 6 | Lazy Evaluation - Infinite sequences, memoization, fibonacci | Stream.iterate(), lazy evaluation with streams, records as immutable data |
Exercise1.java |
| Homework 7 | Folds & Monoids - Efficient concatenation, tree structures, monoid laws | Abstract classes, algebraic data types pattern, trampoline, BinaryOperator interface |
Exercise1.java Exercise2.java |
| Homework 8 | IO & Functors - File processing, error handling, employee data | Optional for error handling, Files.readAllLines(), stream processing, records |
Exercise1.java |
| Homework 10 | Applicative Functors - Parser combinators, functional composition, employee parsing | Functional interfaces, Optional.flatMap(), method chaining, trampoline, complex parsing |
Exercise1.java Exercise2.java |
| Homework 11 | Monads - Maybe monad, list monad, Kleisli composition, monadic operations | Abstract classes with generics, functional composition, monadic operations, sealed classes | Exercise1.java |
| Homework 12 | Monadic Parsing & Simulation - Risk game simulation, random generation, army management | Records, enums, Random class, immutable value objects, stream aggregation, trampoline |
Exercise1.java Exercise2.java |