Упражнение 1.3. Ошибка SICP: невозможно оценить выражение в Racket - PullRequest
0 голосов
/ 12 мая 2018

Я выполняю упражнение 1.3 из SICP.

Мой код следующий:

#lang racket

(require sicp)

(define (square a)
  (* a a)
    )

(define (sum-of-squares a b)
 (+ (square a) (square b)   )
                              )

(define (max a b)
(cond ((>= a b) a)
      (else b)
               )
                   )

(define (sum-of-biggest-squares a b c    )

(cond ((>= a b)
  (sum-of-squares a (max b c) )

  (sum-of-squares b (max a c) ) 

                        )
                        )
                            )

(sum-of-biggest-squares 5 7 10)

Удивительно, но интерпретатор Racket

не печатает никакого результата длявыше.Интерпретатор

отлично работает для других значений.Но для

этот набор из трех значений не работает

.

Когда я пытаюсь добавить оператор else

, как показано ниже:

  (else (sum-of-squares b (max a c) ) ) 

Переводчик говорит:

   exercise_1-3.rkt:23:10: else: not allowed as an expression
   in: (else (sum-of-squares b (max a c)))

1 Ответ

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

У вас есть пара синтаксических ошибок в функции sum-of-biggest-squares: необходимо добавить круглые скобки, чтобы закрыть первое предложение cond, и добавить else ко второму:

(define (sum-of-biggest-squares a b c)
  (cond ((>= a b) (sum-of-squares a (max b c)))
        (else (sum-of-squares b (max a c)))))

Обратите внимание, что способ, которым вы форматируете код, настолько отличающийся от текущих общих соглашений, делает его очень трудным для чтения и вносит синтаксические ошибки.

...