【问题标题】:List manipulation with foldr in Racket在 Racket 中使用 foldr 进行列表操作
【发布时间】:2015-06-07 22:00:45
【问题描述】:

#lang racket

我需要从 2 个列表中创建一个列表

list1 => '(1 2 3)
list2 => '(a b c)

想要的结果

(define (create-list l1 l2)
...
)

成为'((1 a) (2 b) (3 c))

必须使用foldr,不能使用递归。

我正在考虑运行一个计数器并使用 list-ref, 有没有更好的办法?

【问题讨论】:

    标签: list functional-programming scheme racket fold


    【解决方案1】:

    在 Racket 中,foldr 高阶过程可以将多个列表作为参数,您只需制作一个 lambda 来根据需要处理它们:

    (define (create-list l1 l2)
      (foldr (lambda (e1 e2 acc)
               (cons (list e1 e2) acc))
             '() l1 l2))
    

    例如:

    (create-list '(1 2 3) '(a b c))
    => '((1 a) (2 b) (3 c))
    

    【讨论】:

    • @LenaBru 这只是一个名字。此参数用作累加器,在此构建响应并最终返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多