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 cdrs, and returns a
list of the car consed on each of
the cdrs.
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