在Scheme中,函数(map fn list0 [list1 .. listN])附带的限制是列表必须有相同数量的元素。来自Python的我错过了Python理解的自由,它们看起来很像上面的map,但是没有这个限制。
我很想实现另一个“map”,它允许不同大小的列表,迭代所有列表的第一个N个元素,其中N是最短列表的长度。
例如,让num是10,lst是(1 2 3)。用我的地图,我希望能写出这样的表达式:
(my-map + (circular-list num) lst)))并得到:
(11 12 13)我比传统的人更容易阅读这篇文章。
(map + (lambda (arg) (+ num arg)) lst)或
(map + (make-list (length lst) num) lst) 两个问题:
map的重要原因?my-map这样的东西是已经存在于计划中还是在SRFIs中?我确实看了一下srfi-42,但这不是我想要的,或者是它,而且它并不明显。发布于 2011-05-21 04:33:27
首先,请注意,map确实允许空列表,但是当然,如果有一个空列表,那么它们都应该是空的。
第二,看看map --它与R5RS版本有特别的不同,具体如下:
此过程从其R5RS规范扩展到允许参数长度不等;它在最短列表用完时终止。
第三,大多数Scheme程序员非常希望
(map (lambda (arg) (+ num arg)) lst)我的猜测是,随着您习惯于这种语言,Scheme与Python的不同之处在于,它使表达式变得越来越可读性。
最后,还有一些实现伴随着某种形式的列表理解。例如,在球拍中您可以编写:
(for/list ([arg lst]) (+ num arg))https://stackoverflow.com/questions/6079560
复制相似问题