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

发布于 2024-08-11 01:32:53 字数 104 浏览 2 评论 0原文

我已阅读有关返回和使用多个值的函数(例如值和定义值)的文档。我理解他们的所作所为。我不清楚你什么时候想使用这样的东西。

什么时候构建单个值列表并使用该单个值列表会很糟糕/不可能?

I have read documentation for functions such as values and define-values that return and consume multiple values. I understand what they do. It's not clear to me when you would want to use such a thing.

When would it be bad/impossible to build a single list of values and consume that single list of values instead?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一人独醉 2024-08-18 01:32:53

define-values 很方便,可以让您直接将变量绑定到表达式的结果。它可以节省您的输入时间,因为您不必显式解压列表。我认为在某些情况下构建单个值列表是不好的或不可能的。事实上,这比定义值更可移植。

define-values is a convenience that lets you directly bind variables to the results of a expression. It saves you some typing as you don't have to explicitly unpack a list. I don't think there are situations where it is bad or impossible to build a single list of values. In fact, that will be more portable than define-values.

他是夢罘是命 2024-08-18 01:32:53

这里是我关于该主题的原始帖子;复制如下。

在 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))

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

Here is my original post on the topic; it is copied below.

In this thread in comp.lang.scheme the means to return multiple values are discussed. There are seemingly 3 solutions in R6RS:

(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 and Aaron’s point; you should use the approach that communicates the most information to the reader.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文