Racket 收集列表中的值
有没有一个函数可以给我一个函数返回的值列表 e、 g.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) 如果它不起作
(值->列表(值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))))
函数无法实现这一点,因为它是返回多个值的表达式,并且函数中的参数槽只能接收一个值