Scheme采用参数并输出值的过程

时间:2018-02-24 19:06:50

标签: scheme racket

我正在尝试编写一个名为bal-val的过程,该过程必须接受一个参数并输出球的值。球的值为R = 5G=4B = 3W = 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))

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 - 始终正确缩进代码,这使其易于理解,并且随着时间的推移错误将突出显示,您将能够更快地发现它们。