Exercise 15 in Chapter 1 of
Essentials of Programming Languages attempts to familiarize the reader with programming in the Scheme. It's split into ten parts that together provide a gentle introduction to working with lists, and to a lesser extent vectors, in a functional programming language.
Ex. 15, Pt. 1Define a function
duple : (n : int) * (x : 'a) -> ['a]
that returns a list containing
n
copies of
x
.
Solution.
Ex. 15, Pt. 2Define a function
invert : (lst : [('a,'b)]) -> [('b,'a)]
that returns a list like
lst
but with each pair element of reversed.
Solution.
Ex. 15, Pt. 3Define a function
filter-in : (pred : 'a -> bool) * (lst : ['a]) -> ['a]
that returns a list of the elements in
lst
for which
pred
succeeds.
Solution.
Ex. 15, Pt. 4
Define a function
every? : (pred : 'a -> bool) * (lst : ['a]) -> bool
that returns
false
if
pred
fails for any element of
lst
, or otherwise returns
true
.
Solution.
Ex. 15, Pt. 5
Define a function
exists? : (pred : 'a -> bool) * (lst : ['a]) -> bool
that returns
true
if
pred
succeeds for any element of
lst
, or otherwise returns
false
.
Solution.
Ex. 15, Pt. 6Define a function
vector-index : (pred : 'a -> bool) * (v : #['a]) -> int|FALSE
that returns the zero-based index of the first element in
v
for which
pred
succeeds, or returns
false
if no such element exists.
Solution.
Ex. 15, Pt. 7Define a function
list-set : (lst : ['a]) * (n : int) * (x : 'a) -> ['a]
that returns a list similar to
lst
, except that the
n
-th (using zero-based indexing) element is replaced with
x
.
Solution.
Ex. 15, Pt. 8Define a function
product : (los1 : ['a]) * (los2 : ['b]) -> [('a, 'b)]
that returns a list of pairs (in any order) that represents the Cartesian product of
los1
and
los2
.
Solution.
Ex. 15, Pt. 9
Define a function
down : (lst : [_]) -> [[_]]
that returns a list like
lst
but with each element wrapped in its own (single-element) list.
Solution.
Ex. 15, Pt. 10Define a function
vector-append-list : (v : #['a]) * (lst : ['a]) -> #['a]
that returns a new vector with the elements of
v
followed by the elements of
lst
. Do not use any built-in vector-to-list, list-to-vector, or append functions.
Solution.