Почему параметр для моей процедуры получает ошибку «не функция»? - PullRequest
0 голосов
/ 06 февраля 2019

Я изучаю книгу Структура и интерпретация компьютерного программирования , в которой используется схема, и я только что прошел через рекурсию.Я написал программу для упражнения 1.11:

Функция f определяется правилом, что f (n) = n, если n <3, и f (n) = f (n - 1) + 2f.(n - 2) + 3f (n - 3), если n> 3. Напишите процедуру, которая вычисляет f с помощью рекурсивного процесса.Напишите процедуру, которая вычисляет f с помощью итеративного процесса.

Я написал код на repl.it , и когда я запускаю procdure с помощью ввода 2, онвыдает ошибку: Error: 2 is not a function [fRecurse, (anon)].Может кто-нибудь объяснить мне, что это значит и как я могу это исправить?Почему он ожидает, что мой ввод будет функцией?

Код:

(define (fRecurse n)(
(cond ((< n 3) n)
      ((>= n 3) 
        (+ (procRecurse (- n 1))
           (* 2 (f (- fRecurse 2)))
           (* 3 (f (- fRecurse 3))))))))
(fRecurse 2)

1 Ответ

0 голосов
/ 06 февраля 2019

Ошибка из-за дополнительной пары скобок перед (cond...).Чтобы решить эту проблему, мы просто удалили лишнюю пару скобок:

(define (fRecurse n)
  (cond ((< n 3) n)
      ((>= n 3) 
        (+ (fRecurse (- n 1))
           (* 2 (fRecurse (- n 2)))
           (* 3 (fRecurse (- n 3)))))))

(fRecurse 2)

И некоторые дополнительные исправления, которые я сделал для вашего примера, чтобы он работал правильно:

  • Изменение f на fRecurse
  • Изменить procRecurse на fRecurse
  • Изменить (* 2 (f (- fRecurse 2))) на (* 2 (fRecurse (- n 2)))
  • Изменить (* 3 (f (- fRecurse 3))) на (* 3 (fRecurse (- n 3)))

См. Обновленный repl.it

...