如何从方案中的列表中删除元素

nan*_*nan 3 scheme

如何从列表中删除元素ex: - list = [1 2 3 4]

我想出了一些代码.我想我错了.

 (define delete item
   (lambda (list)
   (cond
    ((equal?item (car list)) cdr list)
     (cons(car list)(delete item (cdr list))))))
Run Code Online (Sandbox Code Playgroud)

tor*_*rus 11

你的代码几乎是正确的.该item也应该是一个参数,因此函数可以用这样的开头:

(define delete
  (lambda (item list)
  ...
Run Code Online (Sandbox Code Playgroud)

此外,您的代码需要周围的括号cdr listelse最后一个子句.然后,代码可能是这样的:

(define delete
  (lambda (item list)
    (cond
     ((equal? item (car list)) (cdr list))
     (else (cons (car list) (delete item (cdr list)))))))
Run Code Online (Sandbox Code Playgroud)


tis*_*ang 5

Shido Takafumi 写了一篇关于Scheme 的教程,还有另一个Scheme 教程第7章练习1,第3题。

该函数采用列表 (ls) 和对象 (x) 作为参数,并返回从 ls 中删除 x 的列表。

作者在页面底部给出了解决方案代码。

; 3
(define (remove x ls)
  (if (null? ls)
      '()
      (let ((h (car ls)))
        ((if (eqv? x h)
            (lambda (y) y)
            (lambda (y) (cons h y)))
         (remove x (cdr ls))))))
Run Code Online (Sandbox Code Playgroud)

对于初学者来说,代码可能很难理解。与下面的代码相同。

(define (rm x ls)
  (if (null? ls)
      '()
      (if (eqv? x (car ls))
          (rm x (cdr ls))
          (cons (car ls)
                (rm x (cdr ls))))))
Run Code Online (Sandbox Code Playgroud)

这可以删除列表中相同的元素。:D