gpt4 book ai didi

scheme - 在Scheme : bad idea?中实现 "Pythonic"映射

转载 作者:行者123 更新时间:2023-12-04 18:14:42 26 4
gpt4 key购买 nike

在Scheme中,函数(map fn list0 [list1 .. listN])带有限制,即列表必须具有相同数量的元素。来自Python,我缺少Python列表推导的自由性,它看起来很像上面的map,但没有此限制。

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

例如,让num10lst(1 2 3)。我希望借助my-map编写类似以下的表达式:

(my-map + (circular-list num) lst)))

并获得:
(11 12 13)

比起传统的阅读方式,我阅读起来更容易
(map + (lambda (arg) (+ num arg)) lst)

或者
(map + (make-list (length lst) num) lst) 

两个问题:
  • 作为Scheme的新手,我是否忽略了对`map`进行限制的重要原因?
  • Scheme或SRFI中是否已经存在诸如“my-map”之类的东西?我确实看过srfi-42,但这不是我要找的东西,或者不是,不是很明显。
  • 最佳答案

    首先,请注意map确实允许空列表,但是,当然,如果有一个空列表,则所有列表都应该为空。

    其次,看看srfi-1 version of map -它与R5RS版本特别不同,如下所示:

    This procedure is extended from its R5RS specification to allow the arguments to be of unequal length; it terminates when the shortest list runs out.



    第三,大多数Scheme程序员非常喜欢
    (map (lambda (arg) (+ num arg)) lst)

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

    最后,有些实现带有某种形式的列表理解。例如,在 Racket中,您可以编写:
    (for/list ([arg lst]) (+ num arg))

    关于scheme - 在Scheme : bad idea?中实现 "Pythonic"映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6079560/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com