为什么我在Scheme中出现未绑定的变量错误?

时间:2012-02-20 12:27:16

标签: lisp scheme

(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.

;启动调试器? (是或否):

我做错了吗?还让我知道如何在edwin中选择文字。

3 个答案:

答案 0 :(得分:4)

这里有一些问题;即你在试图打电话的程序名称中弄错了。

  • %应为modulo
  • ==应为eqv?
  • 如zvrba所述,删除0和1周围的括号

或者,如果您只想告诉一个数字是偶数还是奇数,更简单,更简洁的方法就是简单地使用内置even?

(even? 5)
> #f

或者如果你真的想要0和1,那么更清晰的表达式可能是

(if (even? x) 1 0)

答案 1 :(得分:3)

您必须在返回值(1和0)周围省略括号。您编写的内容尝试调用名为1和0的过程。此外,模数运算符不是%,而是另外命名[检查手册;我忘记了 - 可能是modrem]。

答案 2 :(得分:3)

这是编写even-odd程序的更惯用的方法:

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

稍短一些:

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

甚至更好,使用内置程序even?

(even? x)