Difference between revisions of "Scan Higher Order Function Assignment"
Jump to navigation
Jump to search
(→scan) |
(→scan) |
||
Line 5: | Line 5: | ||
{{SMLToImplement|scan|scan|warmup_scan}} | {{SMLToImplement|scan|scan|warmup_scan}} | ||
− | == scan == | + | ==val scan = fn : ('a * 'a -> 'a) -> 'a list -> 'a list== |
Note: this higher-order function is curried. | Note: this higher-order function is curried. | ||
fun scan operation xs | fun scan operation xs | ||
− | |||
− | |||
− | |||
=Clients= | =Clients= |
Revision as of 09:11, 16 February 2022
Contents
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 | |
functions: | scan |
val scan = fn : ('a * 'a -> 'a) -> 'a list -> 'a list
Note: this higher-order function is curried.
fun scan operation xs
Clients
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
Test
file: | unit_test_scan.sml | |
source folder: | src/test/sml/warmup_scan |