Search code examples
rackettail-recursion

Create polynomial function


In my test I was asked to write a function createPolynomial that takes as arguments a list of π‘˜ numbers π‘Ž0, … , π‘Žπ‘˜βˆ’1 and returns as output a function. The returned function takes a number π‘₯0 and return the value of the polynomial π‘Ž0 β‹… π‘₯0 + β‹― + π‘Žπ‘˜βˆ’1 β‹… π‘₯π‘›βˆ’1 at π‘₯0. To this end, I used the built-in pl expt function taking two numbers π‘Ž and 𝑏, and returning π‘Ž^𝑏

i was given a partial code which I will post down below with my answer and wanted to test my answer at home but I can't make it run although my teacher marked my answer as correct. Any help would be appreciated

here is the partial code:

(: createPolynomial : (Listof Number) -> <-fill in->)
(define (createPolynomial coeffs)
 (: poly : (Listof Number) Number Integer Number ->
Number)
 (define (poly argsL x power accum)
 (if <-fill in->
 <-fill in->
 <-fill in-> )
  (: polyX : Number -> Number)
     (define (polyX x)
     οƒŸfill inοƒ )
     οƒŸfill inοƒ )

And here is my answer:

    (: createPolynomial : (Listof Number) -> (Number -> Number))
(define (createPolynomial coeffs)
 (: poly : (Listof Number) Number Integer Number ->
Number)
 (define (poly argsL x power accum)
 (if (null? argsL)
  accum)
 (poly (rest argsL) x (+ power 1) (+ accum (* (first argsL) (expt x power)))))
 (: polyX : Number -> Number)
 (define (polyX x)
 (poly coeffs x 0 0)
 polyX x))

and here are some test for the code:

> (createPolynomial '(1 2 4 2))
- : (Number -> Number)
#<procedure:polyX>
(define p2345 (createPolynomial '(2 3 4 5)))
(test (p2345 0) =>
 (+ (* 2 (expt 0 0)) (* 3 (expt 0 1)) (* 4 (expt 0 2)) (* 5
(expt 0 3))))
(test (p2345 4) =>
 (+ (* 2 (expt 4 0)) (* 3 (expt 4 1)) (* 4 (expt 4 2)) (* 5
(expt 4 3))))
(test (p2345 11) => (+ (* 2 (expt 11 0)) (* 3 (expt 11 1)) (* 4
(expt 11 2)) (* 5 (expt 11 3))))
(define p536 (createPolynomial '(5 3 6)))
(test (p536 11) => (+ (* 5 (expt 11 0)) (* 3 (expt 11 1)) (* 6
(expt 11 2))))
(define p_0 (createPolynomial '()))
(test (p_0 4) => 0)

I'm getting the error -

define: empty body (after defns/decls) in: (define (createPolynomial coeffs) (: poly : (Listof Number) Number Integer Number -> Number) (define (poly argsL x power accum) (if (null? argsL) accum) (poly (rest argsL) x (+ power 1) (+ accum (* (first argsL) (expt x power))))) (: polyX : Number -> Number) (define (polyX x) (poly coeffs x 0 0) polyX x))
> 

Solution

  • An empty means that the there are no expressions in the body. Usually it means a parenthesis is misplaced. Use indentation!

    I am guessing, you meant to write:

    (: createPolynomial : (Listof Number) -> (Number -> Number))
    (define (createPolynomial coeffs)
      (: poly : (Listof Number) Number Integer Number ->
         Number)
      (define (poly argsL x power accum)
        (if (null? argsL)
            accum)
        (poly (rest argsL) x (+ power 1) (+ accum (* (first argsL) (expt x power)))))
      (: polyX : Number -> Number)
      (define (polyX x)
        (poly coeffs x 0 0))
      (polyX x))