一般scheme是怎么处理多值返回的? 使用像 let-values* 这样子的宏, 有什么需要注意的吗?

By sughiy at 2019-07-18 • 0人收藏 • 124人看过

像多值返回这种语法, 感觉有传染性, 我只要有一个let里面使用的多值返回, 不用多久就发现我很多code 都变成let*-values. 我不知道这么用是不是一个好的实践, 会带来额外消耗吗?. 

3 个回复 | 最后更新于 2019-07-20
2019-07-19   #1

多值返回一般有几种方式

1. 返回list (或者vector)

这种返回方式具有一定的代价(很小)但相对来说非常简便易行

2. 返回需要多个参数的函数。

按道理来说是没有什么代价的,但是在使用上存在一定的局限,也就是你必须用cps的写法。

3. (values)

values属于r6rs的标准定义,也就是说是最官方的多值返回方式。对实现的要求也比较严格。我不记得R6RS对values的实现是否有性能要求。但是可以确认的是,Chez的实现values是0代价。至于实现的具体方法,Kent Dybvig有一篇论文专门讲这个。

2019-07-20   #3

回复#2 @guenchi :

感谢论文分享

登录后方可回帖

登 录
信息栏

Scheme中文社区

推荐实现 ChezScheme / r6rs / r7rs large
theschemer.org
Q群: 724577239

精华导览

社区项目

包管理器:Raven
HTTP服务器:Igropyr (希腊火)
官方插件:vscode-chez

社区目标:

完善足以使Scheme工程化和商业化的库,特别是开发极致速度的Web服务器和ANN模块。

一直以来Scheme缺少一个活跃的中文社区,同时中文资料的稀少,导致大多数因为黑客与画家和SICP而接触Scheme的朋友,在学完SICP后无事可做,不能将Scheme转换为实际的生产力。最后渐渐的放弃。
同时Chicken等实现,却因效率问题无法与其他语言竞争。本社区只有一个目的,传播Scheme的文明之火,在最快的编译器实现上,集众人之力发展出足够与其他语言竞争的社区和库。


友情链接:

Clojure 中文论坛
函数式·China


Loading...