Ошибки в ракетке для упражнения SICP 1.11 - PullRequest
0 голосов
/ 15 мая 2018

Интерпретатор Racket выдает мне ошибки

в моей попытке реализовать рекурсив

функция для упражнения 1.11:

#lang sicp

(define (f n)
  (cond ((< n 3) n)
        (else (+ f((- n 1)) 
                 (* 2 f((- n 2))) 
                 (* 3 f((- n 3)))))))

(f 2)
(f 5)

Ошибки, предоставленные интерпретатором Racket:

 2
 application: not a procedure;
 expected a procedure that can be applied to arguments
 given: 4
 arguments...: [none]
 context...:

/ Пользователи / tanveersalim / Рабочий стол / Git / EPI / EPI / Функциональный / SICP / chapter_1 / упражнение_1-11.rkt: [бегущее тело]

1 Ответ

0 голосов
/ 15 мая 2018

Как уже отмечалось, вы звоните f неправильно

Изменить f((- n 1)) (и другие подобные случаи) на (f (- n 1))

(define (f n)
  (cond ((< n 3) n)
        (else (+ (f (- n 1)) 
                 (* 2 (f (- n 2))) 
                 (* 3 (f (- n 3)))))))

(f 2) ; 2
(f 5) ; 25
...