Difference between revisions of "Higher Order Functions Hall of Fame Assignment"
Jump to navigation
Jump to search
(→Test) |
|||
Line 54: | Line 54: | ||
{{TestSuite|MapTestSuite|hof.map.assignment}} | {{TestSuite|MapTestSuite|hof.map.assignment}} | ||
==Filter== | ==Filter== | ||
− | {{TestSuite|FilterTestSuite|hof. | + | {{TestSuite|FilterTestSuite|hof.filter.assignment}} |
+ | ==Fold== | ||
+ | {{TestSuite|FoldTestSuite|hof.fold.assignment}} | ||
+ | ==Filter== | ||
+ | {{TestSuite|FindTestSuite|hof.find.assignment}} | ||
+ | |||
=Test= | =Test= | ||
{{TestSuite|FoldTestSuite|hof.fold.assignment}} | {{TestSuite|FoldTestSuite|hof.fold.assignment}} |
Revision as of 07:11, 14 February 2020
Contents
Code To Implement
Map
class: | MapHof.java | |
methods: | map | |
package: | hof.map.assignment | |
source folder: | src/main/java |
public static <T, R> ImmutableList<R> map(Function<T, R> f, ImmutableList<T> list)
class: | MapHofApps.java | |
methods: | mapToLengths mapToStrictlyLessThan |
|
package: | hof.map.assignment | |
source folder: | src/main/java |
public static ImmutableList<Integer> mapToLengths(ImmutableList<String> texts)
public static ImmutableList<Boolean> mapToStrictlyLessThan(ImmutableList<Integer> xs, int threshold)
Filter
class: | FilterHof.java | |
methods: | filter | |
package: | hof.filter.assignment | |
source folder: | src/main/java |
public static <E> ImmutableList<E> filter(Predicate<E> predicate, ImmutableList<E> list)
class: | FilterHofApps.java | |
methods: | filterWordsWhichContainAllVowels filterEvens |
|
package: | hof.map.assignment | |
source folder: | src/main/java |
public static ImmutableList<String> filterWordsWhichContainAllVowels(ImmutableList<String> words)
public static ImmutableList<Integer> filterEvens(ImmutableList<Integer> xs)
Lexical scope is not unique to ML. Nearly all programming languages use lexical scope, including Java.
First, we will build the utility methods: foldLeft (which can be easily built with tail recursion) and foldRight (which cannot).
Next, we will build some applications which use fold: sum (which does not require lexical scope) and countBetweenMinAndMaxExclusive (which does).
Fold
class: | FoldHof.java | |
methods: | foldLeft foldRight |
|
package: | hof.fold.assignment | |
source folder: | src/main/java |
foldLeft
public static <A, B> A foldLeft(BiFunction<A, B, A> f, A acc, ImmutableList<B> list)
foldLeft(f, initial_value, [x1, x2, ..., xn])
- returns
f(xn,...,f(x2, f(x1, initial_value))...)
orinitial_value
if the list is empty.
foldRight
public static <A, B> A foldRight(BiFunction<A, B, A> f, A acc, ImmutableList<B> list)
foldRight(f, initial_value, [x1, x2, ..., xn])
- returns
f(x1, f(x2, ..., f(xn, init)...))
orinitial_value
if the list is empty.
Fold Apps
class: | FoldHofApps.java | |
methods: | sum countBetweenMinAndMaxExclusive |
|
package: | hof.map.assignment | |
source folder: | src/main/java |
sum
public static int sum(ImmutableList<Integer> xs)
countBetweenMinAndMaxExclusive
public static int countBetweenMinAndMaxExclusive(int min, int maxExclusive, ImmutableList<Integer> xs)
Test
class: | HigherOrderFunctionTestSuite.java | |
package: | hof.assignment | |
source folder: | src/test/java |
Map
class: | MapTestSuite.java | |
package: | hof.map.assignment | |
source folder: | src/test/java |
Filter
class: | FilterTestSuite.java | |
package: | hof.filter.assignment | |
source folder: | src/test/java |
Fold
class: | FoldTestSuite.java | |
package: | hof.fold.assignment | |
source folder: | src/test/java |
Filter
class: | FindTestSuite.java | |
package: | hof.find.assignment | |
source folder: | src/test/java |
Test
class: | FoldTestSuite.java | |
package: | hof.fold.assignment | |
source folder: | src/test/java |