首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从方案列表中删除元素

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

Stack Overflow用户
提问于 2009-12-15 12:46:45
回答 5查看 39.8K关注 0票数 3

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

我想出了一些代码,我想我在什么地方搞错了。

代码语言:javascript
复制
 (define delete item
   (lambda (list)
   (cond
    ((equal?item (car list)) cdr list)
     (cons(car list)(delete item (cdr list))))))
EN

回答 5

Stack Overflow用户

发布于 2009-12-15 13:42:32

您的代码几乎是正确的。item也应该是一个参数,所以函数可以这样开头:

代码语言:javascript
复制
(define delete
  (lambda (item list)
  ...

此外,您的代码需要围绕最后一个子句中的cdr list和else进行paren。然后,代码可能如下所示:

代码语言:javascript
复制
(define delete
  (lambda (item list)
    (cond
     ((equal? item (car list)) (cdr list))
     (else (cons (car list) (delete item (cdr list)))))))
票数 12
EN

Stack Overflow用户

发布于 2013-02-22 13:51:01

Shido Takafumi写了一篇关于Scheme,Yet Another Scheme Tutorial的教程。在chapter 7中,练习1是第三个问题。

以列表( ls )和对象(x)作为参数并返回一个从ls中删除x的列表的函数。

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

代码语言:javascript
复制
; 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))))))

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

代码语言:javascript
复制
(define (rm x ls)
  (if (null? ls)
      '()
      (if (eqv? x (car ls))
          (rm x (cdr ls))
          (cons (car ls)
                (rm x (cdr ls))))))

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

票数 4
EN

Stack Overflow用户

发布于 2014-11-05 04:56:28

1)如果考虑输入列表可能是一个简单列表,或者您只想删除嵌套列表顶层的项,例如:

代码语言:javascript
复制
delete 2 from (1 2 3 4) will return (1 2 3)
delete 2 from (1 2 3 (2 3) 3 2 4) will return (1 3 (2 3) 3 4)

正如我们可以看到上面的第二个例子,它只是删除了嵌套列表顶层中的项,在内部列表中,我们没有改变它。

此代码应为:

代码语言:javascript
复制
(define (deleteitem list1 item) 
( cond
    ((null? list1) ’())
    ((equal? (car list1) item) (deleteItem (cdr list1) item)) 
    (else (cons (car list1) (deleteitem (cdr list1) item)))
))

2)如果考虑到输入列表可能是嵌套列表

例如:

代码语言:javascript
复制
input list: (1 2 3 (3 2 (2 4 (2 5 6) 2 5 6) 2 4) 2 3 (2 3 4))

并删除输入列表中的元素2

代码语言:javascript
复制
the output list should be: (1 3 (3 (3 (5 6) 5 6) 4) 3 (3 4))

代码应该是:

代码语言:javascript
复制
(define (delete2 list1 item) 
    ( cond
    ((null? list1) '())
    ((pair? (car list1)) (con (delete2 (car list1) item) (delete2 (cdr list1) item)))
    ((equal? (car list1) item) (delete2 (cdr list1) item)) 
    (else (cons (car list1) (delete2 (cdr list1) item)))
))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1905222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档