Subject: Re: A function-generating function question. From: Erik Naggum <erik@naggum.no> Date: 02 Nov 2002 17:42:05 +0000 Newsgroups: comp.lang.lisp Message-ID: <3245247725231909@naggum.no> * rif <rif@mit.edu> | I have a list of lists of integers l (example: ((3 5) (1 2 3))), and I | want to generate a function that takes an array arr and returns a new | array whose i'th element is the product of the elements of arr indexed by | the i'th element of l. To make a new vector that contains the values of some function applied to each element of a list in order, you can use (map 'vector <function> ...). To produce a product of all values in a list, you can use (reduce #'* ...). To extract the nth item from a vector and use it instead of n, use an accessor function and specify this function as the key to reduce. (map 'vector (lambda (l) (reduce #'* l :key (lambda (n) (aref v n))))) If this is not fast enough, you may want to optimize only some components instead of writing the whole thing out in full by hand. -- Erik Naggum, Oslo, Norway Act from reason, and failure makes you rethink and study harder. Act from faith, and failure makes you blame someone and push harder.