我正在尝试编写一个名为bal-val
的过程,该过程必须接受一个参数并输出球的值。球的值为R = 5
,G=4
,B = 3
和W = 1
。
我的代码是:
(define (bal-val n)
(if (= n R))
(= n 5)
(if (= n G))
(= n 4)
(if (= n B))
(= n 3)
(if (= n W))
(= n 1))
答案 0 :(得分:0)
首先,(= n 5)
将函数=
应用于常量5
和变量n
。因此它返回一个布尔值,它不会将n设置为5。
主要问题是错误地使用Predicates:
=
谓词用于检查两个数字是否相等。如果你提供任何其他东西(但是数字),它将引发错误。
eq?
谓词用于检查其两个参数是否与内存中的同一对象相同。
equal?
谓词在基本类型中测试相同的值,也可以检查两个列表,向量等。
这就是你要做的事情:
(define (bal-val n)
(if (equal? n 'R)
5
(if (equal? n 'G)
4
(if (equal? n 'B)
3
(if (equal? n 'W)
1
(error 'not_found))))))
在这种情况下,您可能希望使用cond,因为它更自然地类似于切换行为。完成如下:
(define (bal-val-cond n)
(cond ((equal? n 'R) 5)
((equal? n 'G) 4)
((equal? n 'B) 3)
((equal? n 'W) 1)
(else (error 'not_found))))
编码101 - 始终正确缩进代码,这使其易于理解,并且随着时间的推移错误将突出显示,您将能够更快地发现它们。