Это пример в SICP, я его ввожу но там ошибка.
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
Это ошибка:
вызов функции: ожидал функцию после открывающей скобки, но нашел переменную
Это пример в SICP, я его ввожу но там ошибка.
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
Это ошибка:
вызов функции: ожидал функцию после открывающей скобки, но нашел переменную
Если вы используете DrRacket, возможно, вы используете DrRacket в режиме «Язык для начинающих». На начальном уровне CS этот конкретный режим языкового уровня отключает функции более высокого порядка. SICP, с другой стороны, предполагает уровень языка, позволяющий выполнять процедуры более высокого порядка.
Предполагая, что это так, вы можете исправить это, настроив DrRacket так, чтобы он использовал языковой уровень, позволяющий выполнять процедуры более высокого порядка, такие как #lang рэкет.
См. Выбор языка: переключите DrRacket на "Использовать язык, указанный в источник", и сделайте верхнюю строку вашей программы:
#lang racket
Это должно позволить вам написать свою функцию.
Кстати есть специализированная поддержка SICP для DrRacket; если вы собираетесь пройти SICP, вы, вероятно, захотите использовать это. Вы можете включить эту поддержку, изменив верхнюю строку #lang на:
#lang planet neil/sicp
Первый запуск программы с этим займет некоторое время, так как он автоматически устанавливает вспомогательное программное обеспечение; последующее использование пакета должно быть быстрым.
Я считаю, что есть проблема с тем, как вы вызываете процедуру. Например, это отлично работает с приведенным выше кодом:
(sum values 1 add1 10)
> 55