Difference between revisions of "Thunks and Streams Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 20: Line 20:
 
==Thunk Utilities==
 
==Thunk Utilities==
 
===thunk?===
 
===thunk?===
define a function <code>thunk?</code> which returns #t if the specified parameter is a thunk, #f otherwise.
+
define a function <code>thunk?</code> which returns [https://docs.racket-lang.org/reference/booleans.html #t] if the specified parameter is a thunk, [https://docs.racket-lang.org/reference/booleans.html #f] otherwise.
  
 
  <nowiki>(define (thunk? th)
 
  <nowiki>(define (thunk? th)
 
     (error 'not-yet-implemented))</nowiki>
 
     (error 'not-yet-implemented))</nowiki>
 +
 
===thunk MACRO===
 
===thunk MACRO===
 
define a macro <code>thunk</code> which creates thunk
 
define a macro <code>thunk</code> which creates thunk

Revision as of 01:37, 16 March 2020

Code To Use

define-syntax

lambda

procedure?

procedure-arity

pair?

cons

car

cdr

Code To Implement

file: src/main/racket/hw4/hw4.rkt Racket-logo.svg
functions: thunk?
thunk-that
dethunk-that
...

Thunk Utilities

thunk?

define a function thunk? which returns #t if the specified parameter is a thunk, #f otherwise.

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

thunk MACRO

define a macro thunk which creates thunk

dethunk

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

Stream Utilities

plausible-stream?

define a function plausible-stream? which returns #t if the specified parameter is a thunk which when invoked returns a pair whose cdr is a thunk, #f otherwise.

WARNING: what could happen if you called plausible-stream? recursively on the cdr?

next-value-from-stream

define a function next-value-from-stream which takes a stream parameter and returns the next value of that stream.

next-stream-from-stream

define a function next-stream-from-stream which takes a stream parameter and returns the next stream of that stream.

stream-next

BONUS method not officially part of the studio but a good idea.

define a function stream-next which takes a stream parameter and returns a pair of values for the next value and the next stream.

stream-cons

define a function stream-cons which takes two parameters value and stream-prime. if the specified stream-prime parameter is not a thunk then an error should be raised:

(raise (error "not a thunk" stream-prime))

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

WARNING: what could happen if you called plausible-stream? on stream-prime?

Stream App

flip-flop-stream

define flip-flop-stream which produces #t #f #t #f #t #f #t #f...