Difference between revisions of "Fold Assignment"
Jump to navigation
Jump to search
(Created page with "Lexical scope is not unique to ML. Nearly all programming languages use lexical scope, including Java. In this assignment we will build foldLeft (which can be easily built w...") |
|||
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | Lexical scope is not unique to ML. Nearly all programming languages use lexical scope, including Java. | + | 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). | ||
+ | |||
+ | =Code To Implement= | ||
+ | ==Fold== | ||
+ | {{JavaToImplement|FoldHof|foldLeft<br>foldRight|hof.fold.assignment}} | ||
+ | |||
+ | [https://smlfamily.github.io/Basis/list.html SML List Reference] | ||
+ | ===foldLeft=== | ||
+ | <nowiki>public static <A, B> A foldLeft(BiFunction<A, B, A> f, A acc, ImmutableList<B> list)</nowiki> {{HofHof}} | ||
+ | :<code>foldLeft(f, initial_value, [x1, x2, ..., xn])</code> | ||
+ | :returns <code>f(xn,...,f(x2, f(x1, initial_value))...)</code> or <code>initial_value</code> if the list is empty. | ||
+ | |||
+ | ===foldRight=== | ||
+ | <nowiki>public static <A, B> A foldRight(BiFunction<A, B, A> f, A acc, ImmutableList<B> list)</nowiki> {{HofHof}} | ||
+ | :<code>foldRight(f, initial_value, [x1, x2, ..., xn])</code> | ||
+ | :returns <code>f(x1, f(x2, ..., f(xn, init)...))</code> or <code>initial_value</code> if the list is empty. | ||
+ | |||
+ | ==Fold Apps== | ||
+ | {{JavaToImplement|FoldHofApps|sum<br>countBetweenMinAndMaxExclusive|hof.map.assignment}} | ||
+ | ===sum=== | ||
+ | <nowiki>public static int sum(ImmutableList<Integer> xs)</nowiki> | ||
+ | ===countBetweenMinAndMaxExclusive=== | ||
+ | <nowiki>public static int countBetweenMinAndMaxExclusive(int min, int maxExclusive, ImmutableList<Integer> xs)</nowiki> | ||
+ | |||
+ | =Test= | ||
+ | {{TestSuite|FoldTestSuite|hof.fold.assignment}} |
Latest revision as of 04:41, 28 January 2022
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).
Contents
Code To Implement
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: | FoldTestSuite.java | |
package: | hof.fold.assignment | |
source folder: | src/test/java |