List 用电子球拍替换位置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”替换

我如何在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”替换列表中索引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。