Racket 收集列表中的值

Racket 收集列表中的值,racket,Racket,有没有一个函数可以给我一个函数返回的值列表 e、 g.(值->列表(值1 2 3))导致(列表1 2 3) 如果没有,是否可以在racket中编写这样一个函数,该函数适用于任意数量的值 如果这是不可能的,这是设计的吗 多个值的全部意义在于不应使用结果,而应使用额外的内存来包装这些值。无论如何,以下是您想要的特殊形式: #lang racket (require br/list) (values->list (values 1 2 3)) ; ==> (1 2 3) 如果它不起作

有没有一个函数可以给我一个函数返回的值列表

e、 g.
(值->列表(值1 2 3))
导致
(列表1 2 3)

如果没有,是否可以在racket中编写这样一个函数,该函数适用于任意数量的值


如果这是不可能的,这是设计的吗

多个值的全部意义在于不应使用结果,而应使用额外的内存来包装这些值。无论如何,以下是您想要的特殊形式:

#lang racket
(require br/list)

(values->list (values 1 2 3)) 
; ==> (1 2 3)
如果它不起作用。打开
文件
包裹管理器
,选择目录中可用的选项卡
,按“更新包裹列表”,然后搜索“美丽球拍”。选择具有该名称的结果,然后按
Install
。完成后,您可以关闭并按
Run
,它应该可以工作

如果右键单击
value->list
并选择“打开定义文件”,您将看到它是如何制作的:

(define-macro values->list EXPR)
  #'(call-with-values (λ () EXPR) list))
以下是R5RS的普通方案:

(define-syntax values->list
  (syntax-rules ()
    ((_ EXPR) (call-with-values (λ () EXPR) list))))

函数无法实现这一点,因为它是返回多个值的表达式,并且函数中的参数槽只能接收一个值

多个值的全部意义在于不应使用结果,而应使用额外的内存来包装这些值。无论如何,以下是您想要的特殊形式:

#lang racket
(require br/list)

(values->list (values 1 2 3)) 
; ==> (1 2 3)
如果它不起作用。打开
文件
包裹管理器
,选择目录中可用的选项卡
,按“更新包裹列表”,然后搜索“美丽球拍”。选择具有该名称的结果,然后按
Install
。完成后,您可以关闭并按
Run
,它应该可以工作

如果右键单击
value->list
并选择“打开定义文件”,您将看到它是如何制作的:

(define-macro values->list EXPR)
  #'(call-with-values (λ () EXPR) list))
以下是R5RS的普通方案:

(define-syntax values->list
  (syntax-rules ()
    ((_ EXPR) (call-with-values (λ () EXPR) list))))
函数无法实现这一点,因为它是返回多个值的表达式,并且函数中的参数槽只能接收一个值