Difference between revisions of "Fold Assignment"

From CSE425S Wiki
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...")
 
Line 1: Line 1:
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 with tail recursion) and foldRight (which cannot).
+
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}}
 +
 
 +
<nowiki>public static <A, B> A foldLeft(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>
 +
 
 +
{{JavaToImplement|FoldHofApps|sum<br>countBetweenMinAndMaxExclusive|hof.map.assignment}}
 +
 
 +
<nowiki>public static int sum(ImmutableList<Integer> xs)</nowiki>
 +
 
 +
<nowiki>public static int countBetweenMinAndMaxExclusive(int min, int maxExclusive, ImmutableList<Integer> xs)</nowiki>
 +
 
 +
=Test=
 +
{{TestSuite|FoldTestSuite|hof.fold.assignment}}

Revision as of 14:48, 19 June 2019

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

class: FoldHof.java Java.png
methods: foldLeft
foldRight
package: hof.fold.assignment
source folder: src/main/java

public static <A, B> A foldLeft(BiFunction<A, B, A> f, A acc, ImmutableList<B> list)

public static <A, B> A foldRight(BiFunction<A, B, A> f, A acc, ImmutableList<B> list)

class: FoldHofApps.java Java.png
methods: sum
countBetweenMinAndMaxExclusive
package: hof.map.assignment
source folder: src/main/java

public static int sum(ImmutableList<Integer> xs)

public static int countBetweenMinAndMaxExclusive(int min, int maxExclusive, ImmutableList<Integer> xs)

Test

class: FoldTestSuite.java Junit.png
package: hof.fold.assignment
source folder: src/test/java