Создать функцию полинома - несвязанный идентификатор в модуле - PullRequest
0 голосов
/ 02 мая 2019

В моем тесте меня попросили написать функцию createPolynomial, которая принимает в качестве аргументов список из чисел ?0,…, ?? − 1 и возвращает в качестве вывода функцию.Возвращаемая функция принимает число ?0 и возвращает значение многочлена ?0 ⋅ ?0 + ⋯ + ?? − 1 ⋅ ?? − 1 в ?0.Для этого я использовал встроенную функцию pl expt, взяв два числа ? и ?, и вернув ? ^ ?

мне дали частичный код, который я опубликую ниже с моим ответом и хотел проверитьмой ответ дома, но я не могу заставить его работать, хотя мой учитель отметил мой ответ как правильный.Любая помощь будет оценена

вот частичный код:

(: 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)

Я получаю ошибку:

x: unbound identifier in module in: x

Я предполагаю, что это должносделать что-то с скобками, но я не могу понять, что и где ...

1 Ответ

3 голосов
/ 03 мая 2019

createPolynomial - это функция, которая возвращает функцию типа (Number -> Number) - это curried . Вы возвращаете приложение (polyX x), где x действительно не связано. Преобразуйте это в функцию, заключив ее в лямбду:

(λ (x) (polyX x))

... и 5 тестов пройдены.

...