Difference between revisions of "Fold Assignment"
Jump to navigation
Jump to search
(→Fold) |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
==Fold== | ==Fold== | ||
{{JavaToImplement|FoldHof|foldLeft<br>foldRight|hof.fold.assignment}} | {{JavaToImplement|FoldHof|foldLeft<br>foldRight|hof.fold.assignment}} | ||
+ | |||
+ | [https://smlfamily.github.io/Basis/list.html SML List Reference] | ||
===foldLeft=== | ===foldLeft=== | ||
− | <nowiki>public static <A, B> A foldLeft(BiFunction<A, B, A> f, A acc, ImmutableList<B> list)</nowiki> | + | <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> | :<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. | :returns <code>f(xn,...,f(x2, f(x1, initial_value))...)</code> or <code>initial_value</code> if the list is empty. | ||
===foldRight=== | ===foldRight=== | ||
− | <nowiki>public static <A, B> A foldRight(BiFunction<A, B, A> f, A acc, ImmutableList<B> list)</nowiki> | + | <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> | :<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. | + | :returns <code>f(x1, f(x2, ..., f(xn, init)...))</code> or <code>initial_value</code> if the list is empty. |
==Fold Apps== | ==Fold Apps== | ||
{{JavaToImplement|FoldHofApps|sum<br>countBetweenMinAndMaxExclusive|hof.map.assignment}} | {{JavaToImplement|FoldHofApps|sum<br>countBetweenMinAndMaxExclusive|hof.map.assignment}} | ||
===sum=== | ===sum=== | ||
− | <nowiki>public static int sum(ImmutableList<Integer> xs)</nowiki> | + | <nowiki>public static int sum(ImmutableList<Integer> xs)</nowiki> |
===countBetweenMinAndMaxExclusive=== | ===countBetweenMinAndMaxExclusive=== | ||
− | <nowiki>public static int countBetweenMinAndMaxExclusive(int min, int maxExclusive, ImmutableList<Integer> xs)</nowiki> | + | <nowiki>public static int countBetweenMinAndMaxExclusive(int min, int maxExclusive, ImmutableList<Integer> xs)</nowiki> |
=Test= | =Test= | ||
{{TestSuite|FoldTestSuite|hof.fold.assignment}} | {{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 |