Write a function lastElem
that
returns the last element of a list.
> lastElem [2, 4, 6, 8] 8
Write a function secondLast
that
returns the second-to-last element of a list.
> secondLast [2, 4, 6, 8] 6
Write a function kth k l
that returns
the kth element of a list l, where elements are numbered starting
from 0. (Do not use the built-in operator !!
, which does
the same thing.)
Write a function del n l
that deletes
the first occurrence of an integer n from a list of integers l,
returning a new list. If n is not present in the list, the function
should return l unchanged.
Write a function bitCount
that takes
a non-negative Integer and returns the number of ones in its binary
representation.
Write a function log2
that takes a
positive integer n and returns ⌊log2(n)⌋, where ⌊x⌋
denotes the floor function, i.e. rounding down to the nearest
integer.
Write a function rev :: [a] -> [a]
that reverses a list of any type. What is your function's running
time as a function of N, the length of the input list?
Write a function before
that takes
two strings s and t and returns True if s comes before t in
dictionary order. In your function, you may use the operator < on
characters, but not on strings.
Write a function zipper
that converts
two lists into a list of pairs:
> zipper [10, 12, 14] [21, 23, 25, 27] [(10,21),(12,23),(14,25)]
Stop zipping when you reach the end of either list.
Write a function unzipper
that
converts a list of pairs into a pair of lists:
> unzipper [(10, 21), (12, 23), (14, 25)] ([10,12,14],[21,23,25])
An association list is a list of key-value
pairs representing a mapping from keys to values. For example, the
association list [("red", 3), ("blue", 4)]
maps "red" to 3 and "blue" to 4.
a) Write a function lookup
that takes
an association list and a key, and returns the corresponding value.
If the key is not the list, throw an error. Give your function an
appropriate type.
b) Write a function update
that takes
an association list, a key K, and a value V. If the key K is already
present in the list, the function should update its value to be V;
otherwise, the function should add a mapping from K to V.
Write a function dedup
that
eliminates consecutive duplicate elements in a list of
integers:
> dedup [2, 4, 4, 4, 6, 6, 8, 4] [2, 4, 6, 8, 4]
Which of these functions is equivalent to the
built-in operator ||
?
my_or
a
b
=
a
||
b
my_or
a
b
=
b
||
a
my_or
_
True
=
True
my_or
True
_
=
True
my_or
_
_
=
False
my_or
True
False
=
True
my_or
True
True
=
True
my_or
False
True
=
True
my_or
False
False
=
False