在列表的指定位置插入一个元素



我不知道如何在列表的n位置添加元素。例如:

(insert-at new k lis)
(insert-at ’N 2 ’(a b c d e f))
=>
’(a b N c d e f)

可以吗?:

(define (insert-at new k lis)
  (cond (( null? lis)
         (list new))   
        (zero? k   
         (cons new lis))   
        (else       
         (cons (car lis)
               (insert-at new (- k 1) (cdr lis))))))

我将给你一些提示——因为这看起来像家庭作业,我不能给你一个直接的答案,如果你自己找到解决方案会更有用。填空:

(define (insert-at new k lis)
  (cond (<???>       ; if the list is empty
         <???>)      ; return a list with the single element `new`
        (<???>       ; if `k` is zero
         <???>)      ; cons `new` with the list
        (else        ; otherwise
         (cons <???> ; cons the lists' current element and
               (insert-at new <???> <???>))))) ; advance the recursion

注意,这里"推进递归"意味着传递列表的其余部分,并将k索引减少一个单位。一旦k索引为零或到达列表的末端,我们就完成了。不要忘记测试这个过程:

(insert-at 'N 2 '(a b c d e f))
=> '(a b N c d e f)
(insert-at 'N 0 '(a b c))
=> '(N a b c)
(insert-at 'N 3 '(a b c))
=> '(a b c N)

如果你有两个函数:

  1. take-n -以列表形式返回前N个元素,
  2. last- N -以列表形式返回最后N个元素

那么你可以写:

(define (insert-at value index list)
  (let ((len (length list)))
    (assert (<= 0 index len))
    (append (take-n index list)
            (list value)
            (last-n (- len index) list))))

(DEFUN INS-ELEM(第n项列表)

(气孔导度

((& lt;n) (ERROR "Index too small ~A" n))

((= n = 1) (CONS项目列表))

((ENDP list) (ERROR "Index too big"))

(T(缺点(第一个列表)(INS-ELEM (1 - n)项目(其他列表))))))

然后,只需调用(INS-ELEM 2 'A '(B C D E F)),然后自己查看结果。

祝你好运!

#朗拍

(define (insert-at Index item lst)
(cond
[(< Index 1) (error "Index too small: " Index)]
[(= Index 1) (cons item lst)]
[(> Index (length lst)) (error "Index too big: " Index)]
[else (cons (first lst) (insert-at (- Index 1) item (rest lst)))]))
<标题> user3660248 h1> 的想法如何解决这个问题似乎是正确的,有意义的,但你的实现在球拍是不正确的,我修复了它,现在它的工作:)

相关内容

  • 没有找到相关文章

最新更新