List 用电子球拍替换位置n处的列表元素
我如何在Racket中使用一个函数,用e替换位于n位置的列表元素List 用电子球拍替换位置n处的列表元素,list,racket,List,Racket,我如何在Racket中使用一个函数,用e替换位于n位置的列表元素 (repl-elem '(a b c d e) 2 d) 应返回a d c d e,以便用新元素“a”替换列表中索引2的元素, 我们可以做以下几点: #lang racket (define xs (list 1 2 3 4 5)) (append (take xs 2) (list 'A) (drop xs (+ 2 1))) 我将把它作为一个练习,将其转化为一个函数。为了用新元素“a”替换
(repl-elem '(a b c d e) 2 d)
应返回
a d c d e
,以便用新元素“a”替换列表中索引2的元素,
我们可以做以下几点:
#lang racket
(define xs (list 1 2 3 4 5))
(append (take xs 2)
(list 'A)
(drop xs (+ 2 1)))
我将把它作为一个练习,将其转化为一个函数。为了用新元素“a”替换列表中索引2的元素, 我们可以做以下几点:
#lang racket
(define xs (list 1 2 3 4 5))
(append (take xs 2)
(list 'A)
(drop xs (+ 2 1)))
我将把它作为一个练习,将其转化为函数。要查看“此列表集背后的机制”,可以使用“命名let”递归:
(define (f L n c)
(let loop ((x 1)
(ol '()))
(cond
[(> x (length L))
(reverse ol)]
[(= x n)
(loop (add1 x) (cons c ol))]
[else
(loop (add1 x) (cons (list-ref L (sub1 x)) ol))])))
测试:
(f '(a b c d e) 2 'd)
输出:
'(a d c d e)
OP可以找出它是如何工作的。要查看“此列表集背后的机制”,可以使用“命名let”递归:
(define (f L n c)
(let loop ((x 1)
(ol '()))
(cond
[(> x (length L))
(reverse ol)]
[(= x n)
(loop (add1 x) (cons c ol))]
[else
(loop (add1 x) (cons (list-ref L (sub1 x)) ol))])))
测试:
(f '(a b c d e) 2 'd)
输出:
'(a d c d e)
OP可以计算出它是如何工作的。在Racket中调用此函数。唯一的区别是它使用基于零的索引,因此索引2将是
'c
所在的位置。这是如何工作的?我找不到任何例子来说明它是如何工作的,我需要理解这个列表集背后的机制,这个函数在Racket中被调用。唯一的区别是它使用基于零的索引,因此索引2将是'c
所在的位置。这是如何工作的?我找不到任何关于它如何工作的例子,我需要理解Alex在评论中提到的列表集
背后的机制,它已经存在(以更有效的方式)As。Alex在评论中提到,它已经存在(以更有效的方式)As。