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

Lisp 为什么在Scheme中会出现未绑定变量错误?,lisp,scheme,Lisp,Scheme,当我打电话时(奇偶5) 我收到这个消息 (define (even-odd x) (if ( ==(% x 2 ) 0) (1) (0))) );启动调试器?(是或否): 我做错了什么吗?请告诉我如何在edwin中选择文本。必须省略返回值(1和0)周围的括号。您编写的内容尝试调用名为1和0的过程。此外,模运算符不是%,而是以其他方式命名的[查看手册;我忘记了它--可能是mod或rem。您在这里遇到了一些问题;也就是说,您试图调用的过程的名称是错误的 %应为模 =应该是eqv? 如zvrba所

当我打电话时(奇偶5) 我收到这个消息

(define (even-odd x)
(if ( ==(% x 2 ) 0) (1) (0)))
);启动调试器?(是或否):


我做错了什么吗?请告诉我如何在edwin中选择文本。

必须省略返回值(1和0)周围的括号。您编写的内容尝试调用名为1和0的过程。此外,模运算符不是
%
,而是以其他方式命名的[查看手册;我忘记了它--可能是
mod
rem

您在这里遇到了一些问题;也就是说,您试图调用的过程的名称是错误的

  • %
    应为
  • =
    应该是
    eqv?
  • 如zvrba所述,删除围绕0和1的括号
或者,如果您只是想判断一个数字是偶数还是奇数,一种更简单、更简洁的方法是使用内置的
偶数?

;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.
或者,如果实际需要0和1作为结果,则可以使用更干净的表达式

(even? 5)
> #f

这是编写
奇偶
过程的一种更为惯用的方法:

(if (even? x) 1 0)
稍微短一点:

(define (even-odd x)
    (if (zero? (modulo x 2))
        #t
        #f))
或者更好地使用内置过程
偶数?

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

模运算符是模
。另外,
=
不是运算符-您想使用
eq?
@dagoof谢谢..还意识到我必须用“=”替换“=”。问题假设“==”和“%”在所有语言中具有相同的通用含义。但事实并非如此。
(even? x)