如何从方案中的列表中删除元素
如何从列表中删除元素 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))))))
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
你的代码几乎是正确的。
item
也应该是一个参数,因此函数可以这样开头:此外,您的代码需要在
cdr list
和else
周围加上括号在最后一句中。那么,代码可能是这样的:
Your code is almost correct.
The
item
also should be a parameter, so the function may begin with like this:Also, your code needs paren around the
cdr list
andelse
in the last clause.Then, the code may be like this:
Shido Takafumi 写了一篇关于Scheme 的教程,Yet Another Scheme Tutorial。
在第7章中,练习1,第三个问题。
作者在页面底部给出了解决方案代码。
对于初学者来说,代码可能很难理解。
与下面的代码相同。
这可以删除列表中相同的元素。 :D
Shido Takafumi wrote a tutorial about Scheme, Yet Another Scheme Tutorial.
In chapter 7, exercise 1, the 3rd problem.
The author gave the solution code bottom of the page.
The code maybe difficult to comprehend for beginner.
It's same as the code below.
This can delete the same elements in list. :D
1)如果考虑输入列表可能是一个简单列表,或者您只想删除嵌套列表顶层的项目
例如:
正如我们在上面的第二个示例中看到的,它只是删除嵌套列表顶层的项目,在内部列表中,我们不更改它。
此代码应该是:
2)如果考虑输入列表可能是嵌套列表,
例如:
并删除输入列表中的元素 2
,代码应该是:
1) if consider the input list may be a simple list, or you just want to delete the item in the top-level of a nested list
for example:
as we can see the 2nd example above, it just delete the item in the top-level of the nested list, within the inner list, we doesn't change it.
this code should be:
2) if consider the input list may be a nested list
for example:
and delete the element 2 in the input list
and the code should be:
这段代码似乎工作得很好,但只删除了应该在列表中的元素:
This code seems to work just fine, but only deletes an element that should be in the list:
感谢@adabsurdum指出我的问题
从没有嵌套列表的列表中删除元素
错误代码:
上面的代码在Berkeley CS61A方案解释器中测试
上面的代码在chez方案解释器中测试
Thank @ad absurdum for pointing out my problems
delete element from a list without nested lists
bad code:
the code above tested in Berkeley CS61A scheme interpreter
the code above tested in chez scheme interpreter