从多个返回值Racket定义常量

时间:2015-12-17 23:10:32

标签: scheme racket

Racket数学库中的matrix-qr函数输出两个值。我知道call-with-values将两个输出值都放到你想要的下一个函数中。

  1. 但是,如何获取每个单独的输出并使用该值定义一些常量? QR功能输出Q矩阵和R矩阵。我需要这样的东西:

    (定义Q ...)
    (定义R ......)

  2. 另外,我怎样才能使用输出两个值的函数中的一个输出?

1 个答案:

答案 0 :(得分:2)

为多个值创建定义的常用方法是使用define-values,这几乎与您期望的一样。

(define-values (Q R) ; Q and R are defined
  (matrix-qr (matrix [[12 -51   4]
                      [ 6 167 -68]
                      [-4  24 -41]])))

还有一个let个等价的多个值,称为let-values(以及let*-valuesletrec-values)。

忽略价值更难。例如,没有像(first-value ...)这样的函数,因为普通函数应用程序不会产生可以接受多个值的延续。但是,您可以使用match-define-values_“孔标记”之类的内容来忽略值,而不是绑定它们。

(match-define-values (Q _) ; only Q is defined
  (matrix-qr (matrix [[12 -51   4]
                      [ 6 167 -68]
                      [-4  24 -41]])))

理论上可以创建一个宏,可以将多个值转换为列表,也可以只使用特定的值,但通常可以避免这种情况。不应该轻易地返回多个值,这就是为什么对于几乎所有返回它们的函数来说,使用其中一个值而忽略另一个值通常没有多大意义。