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

z5h*_*z5h 5 scheme

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

什么时候构建单个值列表并使用单个值列表而不是/不可能?

Vij*_*hew 6

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


gre*_*tke 5

是我关于这个主题的原始帖子; 它被复制在下面.

在comp.lang.scheme中的这个线程中,讨论了返回多个值的方法.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))
Run Code Online (Sandbox Code Playgroud)

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