Difference between revisions of "Deep Lists Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
(Created page with "=Code To Use= * [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/refer...")
 
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
original inspiration for this warmup comes from [https://www.coursera.org/learn/programming-languages-part-b/supplement/EtJIy/extra-practice-problems Extra Practice Problems]
 +
 
=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

Code To Use

Code To Implement

file: src/main/racket/deep_lists/deep_lists.rkt Racket-logo.svg
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 Racket-logo.svg Test
source folder: src/test/racket/deep_lists

note: ensure that you have removed all printing to receive credit for any assignment.