Page 1 of 1

having trouble iterating over a list

Posted: Mon Sep 07, 2009 12:25 pm
by kevinlisp
I am making a program that returns the respective factorials of a list of numbers. i need to make this without using the map keyword and im having lots of trouble finding a recursive way of finding the solution. I am not to sure how to make the recursive call reachable. The function factorial just returns the factorial of a number. L2 is the list of factorials that is being constructed.
Here is the code:

Code: Select all

(define (facs2 L L2)
  (cond
    ((>= (length L) 1 )(facs2Help (cdr L) (car L) L2))
    (true(facs2 (cdr L) L2))
    )
  )
 (define (facs2Help L n L2)
   (cons(factorial n) L2)
   )
thanks

Re: having trouble iterating over a list

Posted: Tue Sep 08, 2009 12:59 pm
by Unne
This sounds like homework; if so you should identify it as such. I'm unclear what you want your function to return, but it sounds like you want to take a list of numbers, and return a list of factorials. So you need one function that takes a list of numbers as input.

* If the list is not empty, return a cons of the factorial of the first item in the list, and the result of recursing on the rest of the list.
* If the list is empty, return an empty list.

Also please note that good Lisp style is not to put your closing parens on their own lines and usually to put a space between items in a list. Lisp usually also forgoes CamelCase in favor of dashed-words. e.g. your code could look like:

Code: Select all

(define (facs2 L L2)
  (cond
    ((>= (length L) 1 ) (facs2-help (cdr L) (car L) L2))
    (true (facs2 (cdr L) L2))))

(define (facs2-help L n L2)
  (cons (factorial n) L2))