Dynamic Spreadsheet Assignment
Contents
Motivation
Code To Use
- #t true
- #f false
- define-syntax
- lambda
- procedure?
- procedure-arity number of arguments a function takes Arity on Wikipedia
- pair?
- cons
- car
- cdr
- values
- raise
Code To Implement
file: | src/main/racket/spreadsheet/spreadsheet.rkt | ![]() |
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 bydethunk-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 | ![]() |
source folder: | src/test/racket/spreadsheet |
note: ensure that you have removed all printing to receive credit for any assignment.