首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在方案中实现"Pythonic“映射:坏主意?

在方案中实现"Pythonic“映射:坏主意?
EN

Stack Overflow用户
提问于 2011-05-21 04:15:35
回答 1查看 220关注 0票数 5

在Scheme中,函数(map fn list0 [list1 .. listN])附带的限制是列表必须有相同数量的元素。来自Python的我错过了Python理解的自由,它们看起来很像上面的map,但是没有这个限制。

我很想实现另一个“map”,它允许不同大小的列表,迭代所有列表的第一个N个元素,其中N是最短列表的长度。

例如,让num10lst(1 2 3)。用我的地图,我希望能写出这样的表达式:

代码语言:javascript
复制
(my-map + (circular-list num) lst)))

并得到:

代码语言:javascript
复制
(11 12 13)

我比传统的人更容易阅读这篇文章。

代码语言:javascript
复制
(map + (lambda (arg) (+ num arg)) lst)

代码语言:javascript
复制
(map + (make-list (length lst) num) lst) 

两个问题:

  • 作为一个计划新手,我是否忽略了限制map的重要原因?
  • my-map这样的东西是已经存在于计划中还是在SRFIs中?我确实看了一下srfi-42,但这不是我想要的,或者是它,而且它并不明显。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-21 04:33:27

首先,请注意,map确实允许空列表,但是当然,如果有一个空列表,那么它们都应该是空的。

第二,看看map --它与R5RS版本有特别的不同,具体如下:

此过程从其R5RS规范扩展到允许参数长度不等;它在最短列表用完时终止。

第三,大多数Scheme程序员非常希望

代码语言:javascript
复制
(map (lambda (arg) (+ num arg)) lst)

我的猜测是,随着您习惯于这种语言,Scheme与Python的不同之处在于,它使表达式变得越来越可读性。

最后,还有一些实现伴随着某种形式的列表理解。例如,在球拍中您可以编写:

代码语言:javascript
复制
(for/list ([arg lst]) (+ num arg))
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6079560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档