(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中选择文字。
答案 0 :(得分:4)
这里有一些问题;即你在试图打电话的程序名称中弄错了。
%
应为modulo
==
应为eqv?
或者,如果您只想告诉一个数字是偶数还是奇数,更简单,更简洁的方法就是简单地使用内置even?
。
(even? 5)
> #f
或者如果你真的想要0和1,那么更清晰的表达式可能是
(if (even? x) 1 0)
答案 1 :(得分:3)
您必须在返回值(1和0)周围省略括号。您编写的内容尝试调用名为1和0的过程。此外,模数运算符不是%
,而是另外命名[检查手册;我忘记了 - 可能是mod
或rem
]。
答案 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)