Difference between revisions of "Deep Lists Assignment"
(→Fold) |
|||
(9 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
=Code To Use= | =Code To Use= | ||
+ | |||
+ | * [https://docs.racket-lang.org/reference/number-types.html#%28def._%28%28quote._~23~25kernel%29._number~3f%29%29 number?] | ||
+ | * [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28quote._~23~25kernel%29._list~3f%29%29 list?] | ||
* [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib._racket%2Fprivate%2Flist..rkt%29._foldl%29%29 foldl] | * [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib._racket%2Fprivate%2Flist..rkt%29._foldl%29%29 foldl] | ||
* [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib._racket%2Fprivate%2Flist..rkt%29._foldr%29%29 foldr] | * [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib._racket%2Fprivate%2Flist..rkt%29._foldr%29%29 foldr] | ||
+ | * [https://docs.racket-lang.org/reference/generic-numbers.html#%28def._%28%28quote._~23~25kernel%29._%2B%29%29 +] | ||
=Code To Implement= | =Code To Implement= | ||
{{RacketToImplement|deep_lists|deep-fold<br/>deep-flatten<br/>deep-sum<br/>deep-sum-numbers|deep_lists}} | {{RacketToImplement|deep_lists|deep-fold<br/>deep-flatten<br/>deep-sum<br/>deep-sum-numbers|deep_lists}} | ||
− | ==deep-fold== | + | ==Fold== |
− | ==deep-flatten== | + | You can elect to build deep-fold as a higher order function which returns a function which will deep fold left or right depending on which list fold function is passed to it. |
− | ==deep-sum== | + | |
− | ==deep-sum-numbers== | + | NOTE: You can also elect to just build deep-foldl and/or deep-foldr directly. If you choose to implement only one of deep-foldl and deep-foldr, be sure to comment out the tests for the unimplemented one. |
+ | |||
+ | ===deep-fold=== | ||
+ | (define (deep-fold list-fold) | ||
+ | (error 'not-yet-implemented)) | ||
+ | |||
+ | ===deep-foldl=== | ||
+ | The provided implementation uses [[#deep-fold]]. You may replace this if you prefer not to implement [[#deep-fold]]. | ||
+ | |||
+ | (define deep-foldl (deep-fold foldl)) | ||
+ | |||
+ | ===deep-foldl=== | ||
+ | The provided implementation uses [[#deep-fold]]. You may replace this if you prefer not to implement [[#deep-fold]]. | ||
+ | |||
+ | (define deep-foldr (deep-fold foldr)) | ||
+ | |||
+ | ==Clients== | ||
+ | ===deep-flatten=== | ||
+ | Utilize a version of [[#deep-fold]] (and perhaps a list [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib._racket%2Fprivate%2Flist..rkt%29._reverse%29%29 reverse] depending on which fold direction you choose) to produce a single flattened list version of the deep list. | ||
+ | |||
+ | For example: | ||
+ | |||
+ | (deep-flatten (list 1 2 (list 3 "fred" 4 5) 6 (list 7 8 (list 9 "george" 10) 11 12))) | ||
+ | |||
+ | should evaluate to | ||
+ | |||
+ | '(1 2 3 "fred" 4 5 6 7 8 9 "george" 10 11 12) | ||
+ | |||
+ | ===deep-sum=== | ||
+ | Sums the numbers in a deep list of numbers and lists. | ||
+ | |||
+ | For example: | ||
+ | |||
+ | (deep-sum (list 1 2 (list 3 4 5) 6 (list 7 8 (list 9 10) 11 12))) | ||
+ | |||
+ | should evaluate to 78. | ||
+ | |||
+ | ===deep-sum-numbers=== | ||
+ | Like deep-sum only it ignores values which are neither lists nor numbers. | ||
+ | |||
+ | For example: | ||
+ | |||
+ | (deep-sum-numbers (list 1 2 (list 3 "fred" 4 5) 6 (list 7 8 (list 9 "george" 10) 11 12))) | ||
+ | |||
+ | should evaluate to 78. | ||
=Test= | =Test= | ||
{{RacketUnitTest|deep_lists_test|deep_lists}} | {{RacketUnitTest|deep_lists_test|deep_lists}} |
Latest revision as of 14:29, 28 March 2022
original inspiration for this warmup comes from Extra Practice Problems
Contents
Code To Use
Code To Implement
file: | src/main/racket/deep_lists/deep_lists.rkt | |
functions: | deep-fold deep-flatten deep-sum deep-sum-numbers |
Fold
You can elect to build deep-fold as a higher order function which returns a function which will deep fold left or right depending on which list fold function is passed to it.
NOTE: You can also elect to just build deep-foldl and/or deep-foldr directly. If you choose to implement only one of deep-foldl and deep-foldr, be sure to comment out the tests for the unimplemented one.
deep-fold
(define (deep-fold list-fold) (error 'not-yet-implemented))
deep-foldl
The provided implementation uses #deep-fold. You may replace this if you prefer not to implement #deep-fold.
(define deep-foldl (deep-fold foldl))
deep-foldl
The provided implementation uses #deep-fold. You may replace this if you prefer not to implement #deep-fold.
(define deep-foldr (deep-fold foldr))
Clients
deep-flatten
Utilize a version of #deep-fold (and perhaps a list reverse depending on which fold direction you choose) to produce a single flattened list version of the deep list.
For example:
(deep-flatten (list 1 2 (list 3 "fred" 4 5) 6 (list 7 8 (list 9 "george" 10) 11 12)))
should evaluate to
'(1 2 3 "fred" 4 5 6 7 8 9 "george" 10 11 12)
deep-sum
Sums the numbers in a deep list of numbers and lists.
For example:
(deep-sum (list 1 2 (list 3 4 5) 6 (list 7 8 (list 9 10) 11 12)))
should evaluate to 78.
deep-sum-numbers
Like deep-sum only it ignores values which are neither lists nor numbers.
For example:
(deep-sum-numbers (list 1 2 (list 3 "fred" 4 5) 6 (list 7 8 (list 9 "george" 10) 11 12)))
should evaluate to 78.
Test
file: | deep_lists_test.rkt | Test |
source folder: | src/test/racket/deep_lists |
note: ensure that you have removed all printing to receive credit for any assignment.