如何从列表中删除元素例如:- list=1 2 3 4
我想出了一些代码,我想我在什么地方搞错了。
(define delete item
(lambda (list)
(cond
((equal?item (car list)) cdr list)
(cons(car list)(delete item (cdr list))))))发布于 2009-12-15 13:42:32
您的代码几乎是正确的。item也应该是一个参数,所以函数可以这样开头:
(define delete
(lambda (item list)
...此外,您的代码需要围绕最后一个子句中的cdr list和else进行paren。然后,代码可能如下所示:
(define delete
(lambda (item list)
(cond
((equal? item (car list)) (cdr list))
(else (cons (car list) (delete item (cdr list)))))))发布于 2013-02-22 13:51:01
Shido Takafumi写了一篇关于Scheme,Yet Another Scheme Tutorial的教程。在chapter 7中,练习1是第三个问题。
以列表( 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))))))对于初学者来说,代码可能很难理解。它与下面的代码相同。
(define (rm x ls)
(if (null? ls)
'()
(if (eqv? x (car ls))
(rm x (cdr ls))
(cons (car ls)
(rm x (cdr ls))))))这可以删除列表中相同的元素。:D
发布于 2014-11-05 04:56:28
1)如果考虑输入列表可能是一个简单列表,或者您只想删除嵌套列表顶层的项,例如:
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)正如我们可以看到上面的第二个例子,它只是删除了嵌套列表顶层中的项,在内部列表中,我们没有改变它。
此代码应为:
(define (deleteitem list1 item)
( cond
((null? list1) ’())
((equal? (car list1) item) (deleteItem (cdr list1) item))
(else (cons (car list1) (deleteitem (cdr list1) item)))
))2)如果考虑到输入列表可能是嵌套列表
例如:
input list: (1 2 3 (3 2 (2 4 (2 5 6) 2 5 6) 2 4) 2 3 (2 3 4))并删除输入列表中的元素2
the output list should be: (1 3 (3 (3 (5 6) 5 6) 4) 3 (3 4))代码应该是:
(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)))
))https://stackoverflow.com/questions/1905222
复制相似问题