如何从列表中删除元素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 list和else最后一个子句.然后,代码可能是这样的:
(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)
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
| 归档时间: |
|
| 查看次数: |
32274 次 |
| 最近记录: |