Scheme 在给定索引列表的情况下重新排列列表

Scheme 在给定索引列表的情况下重新排列列表,scheme,lisp,Scheme,Lisp,所以我需要它递归到子列表中并重新排列它们 (rearrange-this '(4 (4 2) 1) '(a b c d)) -> (d (d b) a) 您希望尽可能使用高阶函数。最重要的列表操作有:map、fold、filter和列表制表。学习这些可以节省很多时间 map在这种情况下非常有用。我用它编写了一个deepmap函数,该函数深入到子列表中,并对其中的对象应用一个操作,不过如果您想将列表映射到其他对象,它将不起作用,因为deepmap将深入到这些列表中。您必须将这些列表包装成某

所以我需要它递归到子列表中并重新排列它们

(rearrange-this '(4 (4 2) 1) '(a b c d)) -> (d (d b) a)

您希望尽可能使用高阶函数。最重要的列表操作有:
map
fold
filter
列表制表
。学习这些可以节省很多时间

map
在这种情况下非常有用。我用它编写了一个
deepmap
函数,该函数深入到子列表中,并对其中的对象应用一个操作,不过如果您想将列表映射到其他对象,它将不起作用,因为
deepmap
将深入到这些列表中。您必须将这些列表包装成某种东西,才能使
列表?
检查失败

在编写deep map之后,我将其与
list ref
一起使用,从
value list
中选择合适的元素,并替换
arrangement
中的数字

(define (rearrange-this list1 list2) ;Initial function 
(rearrange-r list1 list2 (count list1) '() list1))

;list 1 holds numbers, list2 hold letters 

(rearrange-this '(4 3 2 1) '( a b c d )) ;-> outputs (d c b a)
(rearrange-this '(2 3 4 1 3 2 1 4) '(a b c d)) ;-> outputs (b c d a c b a d)
下面是对代码的快速测试。请注意,与代码不同,列表位置从0开始。如果希望输入参考从1开始,则可以映射输入排列列表。我将把它作为练习留给你

(define (deep-map operator deep-list)
    (map
        (lambda (element)
            (if (list? element)
                (deep-map operator element)
                (operator element)))
        deep-list))

(define (rearrange-this arrangement value-list)
    (deep-map
        (lambda (element)
            (list-ref value-list element))
        arrangement))

您希望尽可能使用高阶函数。最重要的列表操作有:
map
fold
filter
列表制表
。学习这些可以节省很多时间

map
在这种情况下非常有用。我用它编写了一个
deepmap
函数,该函数深入到子列表中,并对其中的对象应用一个操作,不过如果您想将列表映射到其他对象,它将不起作用,因为
deepmap
将深入到这些列表中。您必须将这些列表包装成某种东西,才能使
列表?
检查失败

在编写deep map之后,我将其与
list ref
一起使用,从
value list
中选择合适的元素,并替换
arrangement
中的数字

(define (rearrange-this list1 list2) ;Initial function 
(rearrange-r list1 list2 (count list1) '() list1))

;list 1 holds numbers, list2 hold letters 

(rearrange-this '(4 3 2 1) '( a b c d )) ;-> outputs (d c b a)
(rearrange-this '(2 3 4 1 3 2 1 4) '(a b c d)) ;-> outputs (b c d a c b a d)
下面是对代码的快速测试。请注意,与代码不同,列表位置从0开始。如果希望输入参考从1开始,则可以映射输入排列列表。我将把它作为练习留给你

(define (deep-map operator deep-list)
    (map
        (lambda (element)
            (if (list? element)
                (deep-map operator element)
                (operator element)))
        deep-list))

(define (rearrange-this arrangement value-list)
    (deep-map
        (lambda (element)
            (list-ref value-list element))
        arrangement))
相关的:相关的: