Difference between revisions of "Scan Higher Order Function Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 12: Line 12:
  
 
=Clients=
 
=Clients=
== scan op+ ==
+
==int==
 +
===scan op+===
 
For example:
 
For example:
  
Line 30: Line 31:
 
|}
 
|}
  
== scan op* ==
+
==scan op*==
 
For example:
 
For example:
  
Line 46: Line 47:
 
! style="text-align:right;" | scan op* xs
 
! style="text-align:right;" | scan op* xs
 
| 131 || 30261 || 12860925
 
| 131 || 30261 || 12860925
 +
|}
 +
 +
==set==
 +
===scan intersection===
 +
For example:
 +
 +
scan intersection [fromList([1,2,3,4,5]), fromList([2,3,4]), fromList([0,1,2]), fromList([231,425])]
 +
 +
would produce:
 +
 +
[fromList([1,2,3,4,5]), fromList([2,3,4]), fromList([2]), empty]
 +
 +
:{| class="wikitable" style="text-align:right;"
 +
|-
 +
! style="text-align:right;" | xs
 +
| {1,2,3,4,5} || {2,3,4} || {0,1,2} || {231,425}
 +
|-
 +
! style="text-align:right;" | scan op+ xs
 +
| {1,2,3,4,5} || {2,3,4} || {2} || {}
 +
|}
 +
 +
===scan union===
 +
For example:
 +
 +
scan intersection [fromList([1,2,3,4,5]), fromList([2,3,4]), fromList([0,1,2]), fromList([231,425])]
 +
 +
would produce:
 +
 +
[fromList([1,2,3,4,5]), fromList([2,3,4]), fromList([2]), empty]
 +
 +
:{| class="wikitable" style="text-align:right;"
 +
|-
 +
! style="text-align:right;" | xs
 +
| {1,2,3,4,5} || {2,3,4} || {0,1,2} || {231,425}
 +
|-
 +
! style="text-align:right;" | scan op+ xs
 +
| {1,2,3,4,5} || {1,2,3,4,5} || {0,1,2,3,4,5} || {0,1,2,3,4,5,231,425}
 
|}
 
|}
  
 
=Test=
 
=Test=
 
{{SMLUnitTest|scan|warmup_scan}}
 
{{SMLUnitTest|scan|warmup_scan}}

Revision as of 09:15, 16 February 2022

Background

Previously, we have built sum_scan. This is a specific version of scan where the operation is +. We will build a higher-order function scan which takes an operation to apply, as well as a list.

Code To Implement

file: src/main/sml/warmup_scan/scan.sml Smlnj-logo.png
functions: scan

val scan = fn : ('a * 'a -> 'a) -> 'a list -> 'a list

Note: this higher-order function is curried.

fun scan operation xs

Clients

int

scan op+

For example:

scan op+ [131,231,425]

would produce:

[131, 362, 787]
xs 131 231 425
scan op+ xs 131 362 787

scan op*

For example:

scan op* [131,231,425]

would produce:

[131, 30261, 12860925]
xs 131 231 425
scan op* xs 131 30261 12860925

set

scan intersection

For example:

scan intersection [fromList([1,2,3,4,5]), fromList([2,3,4]), fromList([0,1,2]), fromList([231,425])]

would produce:

[fromList([1,2,3,4,5]), fromList([2,3,4]), fromList([2]), empty]
xs {1,2,3,4,5} {2,3,4} {0,1,2} {231,425}
scan op+ xs {1,2,3,4,5} {2,3,4} {2} {}

scan union

For example:

scan intersection [fromList([1,2,3,4,5]), fromList([2,3,4]), fromList([0,1,2]), fromList([231,425])]

would produce:

[fromList([1,2,3,4,5]), fromList([2,3,4]), fromList([2]), empty]
xs {1,2,3,4,5} {2,3,4} {0,1,2} {231,425}
scan op+ xs {1,2,3,4,5} {1,2,3,4,5} {0,1,2,3,4,5} {0,1,2,3,4,5,231,425}

Test

file: unit_test_scan.sml
source folder: src/test/sml/warmup_scan