我想替换列表特定位置的元素。到目前为止我有这个:
(define alon (list 1 2 3 4 5 6 7 8 9 10))
(define pos (list 3 6 9)) ;; list with positions to be replaced
(define insert (list "a" "b" "c")) ;;replacement
(define (list-insert xalon xpos xins counter)
(cond
((empty? xins) (cons (rest xalon) '()))
((= counter (first pos))
(cons (first xins) (list-insert (rest xalon) (rest xpos) (rest xins)
(add1 counter))))
(else
(cons (first xalon) (list-insert (rest xalon) xpos xins (add1 counter))))))
当我(list-insert alon pos inserted 1)
时出现错误first: expects a non-empty list; given: '()
我认为我的问题出现在(= counter (first pos))
为true
并且我再次致电list-insert
时它不会出现问题; t (rest xpos)
所以我最终得到相同的位置列表,但计数器递增,我最终得到空列表,因此错误。
我认为除了我(rest xpos)
(= counter (first pos))
true
list-insert
之外我所说的<Label bsStyle='success'>{myNumber}</Label>
时,一切正常。
我究竟做错了什么,如何解决这个问题?是否有更简单的方法在lambda的中间学生级别实现这一点?
感谢您的帮助。
答案 0 :(得分:0)
将(= counter (first pos)
替换为(= counter (first xpos)
:
(define (list-insert xalon xpos xins counter)
(cond
((empty? xins) (rest xalon)) ; no need to cons with '()
((empty? xalon) null) ; makes sense to check for empty xalon also
((= counter (first xpos)) ; xpos, not pos
(cons (first xins)
(list-insert (rest xalon)
(rest xpos)
(rest xins)
(add1 counter))))
(else
(cons (first xalon)
(list-insert (rest xalon)
xpos
xins
(add1 counter))))))