Define the infinite stream of digits representing the fractional
part of e:
7 1 8 2 8 1 8 2 8 4...
The positive rational numbers, which are ratios of two positive
integers, a/b, can be enumerated by listing them in order of
increasing sums a+b, with those numbers having the same sum
listed in order of increasing numerator a. Those fractions that
are not in lowest terms are omitted from the enumeration. Thus, the
enumeration begins with 1/1, 1/2, 2/1, 1/3, 3/1,... Define a
stream, positive-rationals, that contains all of the positive
rational numbers with numerator and denominator having no common
divisor greater than one. Represent the rational number a/b as
a list (a b) and use the Scheme procedure gcd to test
whether a/b is in lowest terms. Test your program by listing
the first twenty elements of the stream.
Use call/cc to write a function list-length which
takes an s-expression, sexpr, as an argument. If sexpr
is a list it returns its length, otherwise it returns #f. Write the
function so that it does zero additions in the latter case.
Use call/cc to write a function tree? which takes
an s-expression as an argument and returns #t if the s-expression is a
tree and #f otherwise. Your function should exit immediately upon
detecting a cycle by calling the continuation captured with
call/cc.
Some Scheme's have a syntactic form called letcc
which has the following abstract syntax: