用e -Racket替换位置n的列表元素

时间:2017-02-22 20:38:30

标签: list racket

我如何在Racket中使用e替换位置n处的列表元素的函数。

(repl-elem '(a b c d e) 2 d)

应该返回a d c d e

2 个答案:

答案 0 :(得分:0)

为了用一个新元素'A替换列表中索引为2的元素, 一个人可以做到以下几点:

#lang racket
(define xs (list 1 2 3 4 5))

(append (take xs 2)
        (list 'A)
        (drop xs (+ 2 1)))

我会把它作为练习,把它变成一个功能。

答案 1 :(得分:0)

要查看此列表集背后的机制"一个人可以使用名为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可以弄清楚它是如何工作的。