我不知道如何在列表中的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))))))
答案 0 :(得分:4)
我会给你一些提示 - 因为这看起来像是家庭作业,我不能给你一个直接的答案,如果你通过自己的方式达到解决方案,它会更有用。填写空白:
(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 :(得分:1)
如果你有两个功能:
然后你可以写:
(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))))
答案 2 :(得分:0)
(DEFUN INS-ELEM(第N项目清单)
(COND
((&lt; Nth 1)(ERROR&#34;索引太小~A&#34; Nth))
((= Nth 1)(CONS项目清单))
((ENDP清单)(错误&#34;索引太大&#34;)
(T(CONS(FIRST list)(INS-ELEM(1- Nth)item(REST list)))))))
然后,只需致电(INS-ELEM 2&#39;(B C D E F))并自行查看结果。
祝你好运!答案 3 :(得分:0)
#lang球拍
(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)))]))
您关于如何解决此问题的想法似乎是正确的,并且很有意义,但是您在Racket中对它的实现并不正确,我已将其修复,现在可以了:)