Dynamic Spreadsheet Assignment

From CSE425S Wiki
Revision as of 05:37, 30 March 2022 by Dennis.cosgrove (talk | contribs) (Created page with "=Motivation= =Code To Use= * [https://docs.racket-lang.org/reference/booleans.html #t] true * [https://docs.racket-lang.org/reference/booleans.html #f] false * [https://docs....")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Motivation

Code To Use

Code To Implement

file: src/main/racket/spreadsheet/spreadsheet.rkt Racket-logo.svg
functions: to-cell
csv->spreadsheet
row-count
row-at sheet
sum-row

to-cell

define a function thunk? which returns whether the specified parameter is a thunk or not.

(define (thunk? th)
    (error 'not-yet-implemented))

csv->spreadsheet

define a MACRO thunk-that which takes a parameter e creates thunk. that is: wraps e in a zero argument function.

(define-syntax-rule (thunk-that e)
   (error 'not-yet-implemented))

Thunks are useful for delaying the evaluation of expressions. As such thunk-that must be declared as a macro and not a function. Unlike Haskell which has lazy evaluation, Racket (and most other languages) eagerly evaluates function arguments.

row-count

define a function dethunk which takes a thunk parameter e and returns the result of invoking e.

(define (dethunk-that thunk)
   (error 'not-yet-implemented))

If thunking and expression wraps an expression in a single argument function, then de-thunking is simply calling that function.

If the parameter thunk is not a thunk? then dethunk-that should raise an argument error.

NOTE: It may seem unnecessary to use dethunk-that when implementing Lab4, when you could simply (thunk)... that is "call the thunk". Still, you are encouraged to use dethunk-that as a bit of verbosity can sometimes help in debugging a sea already full of parentheses.

row-at

sum-row

define a function destream which takes a stream parameter and a pair of the next answer and the next stream.

(define (destream stream)
   (error 'not-yet-implemented))

A critical value of this utility function is to provide early error detection. As such, exceptions should be raised if either

  • the parameter s is not a thunk (this can be handled by dethunk-that)
  • the result of de-thunking the stream is not a pair
  • next-stream of the pair is not thunk

stream-cons-ensuring-stream-prime-is-thunk

Define a function cons-with-thunk-check-on-next-stream which takes two parameters value and next-stream.

((define (cons-with-thunk-check-on-next-stream element next-stream)
  (error 'not-yet-implemented))

If the specified next-stream parameter is not a thunk then an error should be raised:

(raise-argument-error "next-stream" "thunk?" next-stream)

Do NOT create a thunk. If next-stream is a thunk it should simply cons value and next-stream.

Test

file: spreadsheet_test.rkt Racket-logo.svg Test
source folder: src/test/racket/spreadsheet

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