How is your list-fu? Mine gets rusty when I don’t manipulate lists for a while. Here are some simple puzzles to get the rust out.
1. Write a function that takes a list of items and maps a function over the pairs of items in the list, in the following way: The first argument to the function is taken from one of the elements in the list. The second argument is taken from one of the subsequent elements in the list. E.g., if the list is (a b c d), then
(map-pairs (lambda (x y) ‘(F ,x ,y)) ’(a b c d)) ((F A B) (F A C) (F A D) (F B C) (F B D) (F C D))
2. Write a function revmap
that is
like mapcar
, but the result is in reverse order.
3. Write a function map-cons
that takes
a car
and a list of cdr
s, and returns a
list of the car
consed on each of
the cdr
s.
4. Write a function revmappend
that is
like alexandria:mappend
but is more efficient because it doesn’t
try to preserve the order of the elements.
5. Write a function remove-one-element
that takes a
list of n
elements and returns n
lists of n-1
elements, where each
sublist has one element removed from the original list.
No comments:
Post a Comment