Функция схемы как параметр - PullRequest
0 голосов
/ 28 февраля 2019

Программа должна использовать

(define (sum f n)
  (if (= n 0)
      (f 1)
      (+ (f n) (sum f (- n 1)))))
(define (harm-term k)
  (/ 1 k))
(define (harm-sum n)
  (sum (harm-term 1) n))

для создания функции с именем harm-sum, которая вычисляет сумму ряда гармоник.Но я продолжаю получать сообщение об ошибке:

    not a procedure;
     expected a procedure that can be applied to arguments

  given: 3
  arguments...:

для функции суммы.

1 Ответ

0 голосов
/ 28 февраля 2019
(define (sum f n)
  (if (= n 0)
      (f 1)
      (+ (f n) (sum f (- n 1)))))
(define (harm-term k)
  (/ 1 k))
(define (harm-sum n)
  (sum (harm-term 1) n))

Способ, которым вы в конечном итоге вызываете sum, неверен, потому что вы вызываете sum с (harm-term 1) в качестве параметра, для которого вы ожидаете функцию.(harm-term 1) однозначно оценивается как 1.

Это означает, что когда он используется позже в сумме в качестве параметра f, это не имеет смысла (т.е. вы в конечном итоге вызываете (1 1))

Вы должны делать что-то вроде этого:

(define (sum f n)
  (if (= n 0)
      (f 1)
      (+ (f n) (sum f (- n 1)))))
(define (harm-term k)
  (/ 1 k))
(define (harm-sum n)
  (sum harm-term n)) ; the difference is the function itself is passed instead of the value the function returns for 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...