Lisp 为什么在Scheme中会出现未绑定变量错误?
当我打电话时(奇偶5) 我收到这个消息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所
(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)