gpt4 book ai didi

list - 删除列表中的特定项目?

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:25 24 4
gpt4 key购买 nike

我想先说,是的,这是我正在处理的家庭作业问题,我不想要实际的答案,可能只是朝着正确方向的插入。 Anyhoo,我正在上一门关于编程语言结构的类(class),我们的项目之一是用 lisp 编写各种小程序。这需要用户输入一个列表和一个原子,然后从列表中删除该原子的所有实例。我搜索了互联网,但没有找到那么多好的 lisp 资源,所以我求助于大家。

无论如何,我们的教授给了我们非常少的东西来解决问题,我说的很少,我的意思是几乎没有。

这是我目前所拥有的,但它不起作用。

(defun removeIt (a lis)
(if (null lis) 0
(if (= a (car lis))
(delete (car lis))
(removeIt (cdr lis)))))

当我打字时(removeIt 'u'(u e u e))作为输入,它给了我一个错误,指出它在需要 2 个参数时得到了 1 个参数。我犯了什么错误?

最佳答案

首先,一些外观上的变化:

(defun remove-it (it list)
(if (null list) 0
(if (= it (car list))
(delete (car list))
(remove-it (cdr list)))))

在 CL 社区中,描述性和听起来自然的标识符名称是首选。不要羞于使用像 list 这样的名字——CL 有多个命名空间,所以你不必担心太多的冲突。使用连字符而不是驼峰式大小写或下划线。另外,read a short style guide.

你说你不想要答案,但想要有用的提示,所以我们开始吧:

  • 检查您的基本情况 – 您的结果将是一个列表,那么为什么要返回一个数字?

  • 使用适当的比较函数——= 仅用于数字。

  • 您正在构建一个新的结果列表,因此无需删除任何内容——只是不要向其中添加您不想要的内容。

  • 但是请记住添加您想要的内容 – 通过cons将您想要保留的内容添加到将您的函数应用于列表其余部分的结果来构建您的结果列表。

  • 如果您不想保留某个元素,只需继续将您的函数应用于列表的其余部分即可。

  • 您将函数定义为接受两个参数,但您仅使用 (cdr list) 调用它。提供缺少的参数。

I've scoured the internet and haven't found all that many good lispresources,

哦,来吧。

无论如何,我推荐Touretzky.

顺便说一下,您要实现的功能是 built-in ,但您的教授可能不会接受它作为解决方案,而自己动手做是一个很好的练习。 (为了获得额外的分数,请尝试解决嵌套列表。)

关于list - 删除列表中的特定项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com