【问题标题】:When to use (values ...) (define-values ...) in Scheme何时在 Scheme 中使用 (values ...) (define-values ...)
【发布时间】:2010-12-13 17:18:12
【问题描述】:

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

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

【问题讨论】:

    标签: scheme


    【解决方案1】:

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

    【讨论】:

    • 当您使用这样的列表时,您可能会立即使用匹配库对它们进行解构。
    • @grettke 但并非所有方案都有匹配库:(
    • @Vijay:同意。不过有可移植的匹配库。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 2012-06-20
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      相关资源
      最近更新 更多