何时在Scheme中使用(values ...)(define-values ...)

时间:2009-11-06 05:12:51

标签: scheme

我已阅读有关返回和使用多个值的值和定义值等函数的文档。我明白他们做了什么。当你想要使用这样的东西时,我不清楚。

何时构建单个值列表并使用该单个值列表会变坏/不可能?

2 个答案:

答案 0 :(得分:6)

define-values 是一种便利,可让您直接将变量绑定到表达式的结果。它可以为您节省一些输入,因为您不必显式解压缩列表。我不认为有些情况下构建单个值列表是不好或不可能的。实际上,这比 define-values 更便携。

答案 1 :(得分:5)

Here是我关于该主题的原始帖子;它被复制在下面。

在comp.lang.scheme中的this线程中,讨论了返回多个值的方法。 R6RS中似乎有3个解决方案:

(import (rnrs))

; let-values + values
(define (foo1)
  (values 1 2 3))

(let-values (((a b c) (foo1)))
  (display (list a b c))
  (newline))

; cps
(define (foo2 k)
  (k 1 2 3))

(foo2 (lambda (a b c) 
        (display (list a b c))
        (newline)))

; list
(define (foo3)
  (list 1 2 3))
(let ((result (foo3)))
  (display result)
  (newline))

Per Aziz和Aaron的观点;你应该使用向读者传达最多信息的方法。