使用scheme更改列表中的元素

时间:2014-09-15 00:25:00

标签: list scheme

我想更改列表中的元素>(更改'(1 2 2 4)2 5)以便剩下的元素在 清单将是(1 5 4)。

(define change
    (lambda (mylist num val)
        (cond ((null? mylist) '())
            (((equal? (car mylist) num) (cons val))     
                (change (cdr mylist) num val))
            (else 
                (cons (car mylist) 
                (change (cdr mylist) num val))))))

1 个答案:

答案 0 :(得分:1)

所以我更改了过多和丢失的parens,就像我在评论中暗示的那样,并按 CTRL + i ,这就是结果:

(define change
  (lambda (mylist num val)
    (cond ((null? mylist) '())
          ((equal? (car mylist) num) (cons val     
                                           (change (cdr mylist) num val)))
          (else 
           (cons (car mylist) 
                 (change (cdr mylist) num val))))))

请注意(change ...)cons的第二个参数,它与val位于同一边距的下方?识别错误非常重要,所以请按 CTRL + i !不过我会把整件事搬到这里:

(define change
  (lambda (mylist num val)
    (cond ((null? mylist) '())
          ((equal? (car mylist) num)
           (cons val
                 (change (cdr mylist) num val)))
          (else 
           (cons (car mylist) 
                 (change (cdr mylist) num val))))))

静止。请问(cons (equal..下的(else是如何在cond下而不是第一个paren下的?标识告诉您(else..)子句的开始位置和代码结构。

查看问题中显示的代码,标识与实际代码不匹配,因为(change..列表中的{{1}}。在我重新诠释之前,我实际上不可能看到错误。