Sup*_*ric 5 scheme list-comprehension map-function
在Scheme中,函数(map fn list0 [list1 .. listN])
带有限制,列表必须具有相同数量的元素.来自Python,我缺少Python列表推导的自由,它看起来很像map
上面,但没有这个限制.
我很想实现一个替代的"my-map",它允许不同大小的列表,遍历所有列表的前N个元素,其中N是最短列表的长度.
例如,让我们num
可以10
和lst
是(1 2 3)
.使用my-map,我希望编写如下表达式:
(my-map + (circular-list num) lst)))
Run Code Online (Sandbox Code Playgroud)
得到:
(11 12 13)
Run Code Online (Sandbox Code Playgroud)
我比阅读传统书更容易阅读本书
(map + (lambda (arg) (+ num arg)) lst)
Run Code Online (Sandbox Code Playgroud)
要么
(map + (make-list (length lst) num) lst)
Run Code Online (Sandbox Code Playgroud)
两个问题:
首先,请注意,map
它确实允许空列表,但当然如果有一个空列表,则所有列表都应为空.
其次,看看srfi-1版本map
- 它与R5RS版本有明显不同,如下所示:
此过程从其R5RS规范扩展到允许参数长度不等; 当最短列表用完时它会终止.
第三,大多数Scheme程序员都非常喜欢
(map (lambda (arg) (+ num arg)) lst)
Run Code Online (Sandbox Code Playgroud)
我的猜测是,Scheme与Python的不同之处在于,lambda
当你习惯了语言时,表达式会变得越来越可读.
最后,有一些实现带有某种形式的列表理解.例如,在Racket中你可以写:
(for/list ([arg lst]) (+ num arg))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
192 次 |
最近记录: |