Racket数学库中的matrix-qr
函数输出两个值。我知道call-with-values将两个输出值都放到你想要的下一个函数中。
但是,如何获取每个单独的输出并使用该值定义一些常量? QR功能输出Q矩阵和R矩阵。我需要这样的东西:
(定义Q ...)
(定义R ......)
另外,我怎样才能使用输出两个值的函数中的一个输出?
答案 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*-values
和letrec-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]])))
理论上可以创建一个宏,可以将多个值转换为列表,也可以只使用特定的值,但通常可以避免这种情况。不应该轻易地返回多个值,这就是为什么对于几乎所有返回它们的函数来说,使用其中一个值而忽略另一个值通常没有多大意义。