Почему я получаю ошибку несвязанной переменной в схеме? - PullRequest
3 голосов
/ 20 февраля 2012
(define (even-odd x)
(if ( ==(% x 2 ) 0) (1) (0)))

когда я звоню (четно-нечетно 5) я получаю это сообщение

;Unbound variable: %
;To continue, call RESTART with an option number:
; (RESTART 11) => Specify a value to use instead of %.
; (RESTART 10) => Define % to a given value.
; (RESTART 9) => Return to read-eval-print level 9.
; (RESTART 8) => Return to read-eval-print level 8.
; (RESTART 7) => Return to read-eval-print level 7.
; (RESTART 6) => Return to read-eval-print level 6.
; (RESTART 5) => Return to read-eval-print level 5.
; (RESTART 4) => Return to read-eval-print level 4.
; (RESTART 3) => Return to read-eval-print level 3.
; (RESTART 2) => Return to read-eval-print level 2.
; (RESTART 1) => Return to read-eval-print level 1.

; Запустить отладчик? (y или n):

Я делаю что-то не так? Также дайте мне знать, как выбрать текст в Edwin.

Ответы [ 3 ]

4 голосов
/ 20 февраля 2012

У вас есть несколько проблем здесь;а именно, что вы ошибаетесь в названиях процедур, которые вы пытаетесь вызвать.

  • % должно быть modulo
  • == должно быть eqv?
  • Как отмечено zvrba, удалите круглые скобки, окружающие 0 и 1

или, если вы просто пытаетесь определить, является ли число четным или нечетным, более простой и понятный способ сделать это - просто использовать встроенный even?.

(even? 5)
> #f

или если вы действительно хотите получить 0 и 1 в результате, чистое выражение может быть

(if (even? x) 1 0)
3 голосов
/ 20 февраля 2012

Это более идиоматический способ написания процедуры even-odd:

(define (even-odd x)
    (if (zero? (modulo x 2))
        #t
        #f))

Немного короче:

(define (even-odd x)
    (zero? (modulo x 2)))

Или, что еще лучше, используйте встроенную процедуру even?:

(even? x)
3 голосов
/ 20 февраля 2012

Вы должны опустить круглые скобки вокруг возвращаемых значений (1 и 0).То, что вы написали, пытается вызвать процедуры с именами 1 и 0. Кроме того, оператор модуля не %, но назван иначе [проверьте руководство;Я забыл это - вероятно mod или rem].

...