List 是否删除列表中的特定项?
我想先说,是的,这是我正在研究的家庭作业问题,我不想要实际的答案,也许只是朝着正确的方向轻推一下。总之,我正在上一门关于编程语言结构的课程,我们的一个项目是用lisp编写各种小程序。这需要用户输入一个列表和一个原子,然后从列表中删除原子的所有实例。我在互联网上搜索过,还没有找到那么多好的lisp资源,所以我向大家求助 不管怎么说,我们的教授给我们的东西很少,我说的很少,实际上什么都没有 这就是我目前所拥有的,但它不起作用List 是否删除列表中的特定项?,list,lisp,common-lisp,List,Lisp,Common Lisp,我想先说,是的,这是我正在研究的家庭作业问题,我不想要实际的答案,也许只是朝着正确的方向轻推一下。总之,我正在上一门关于编程语言结构的课程,我们的一个项目是用lisp编写各种小程序。这需要用户输入一个列表和一个原子,然后从列表中删除原子的所有实例。我在互联网上搜索过,还没有找到那么多好的lisp资源,所以我向大家求助 不管怎么说,我们的教授给我们的东西很少,我说的很少,实际上什么都没有 这就是我目前所拥有的,但它不起作用 (defun removeIt (a lis) (if (null l
(defun removeIt (a lis)
(if (null lis) 0
(if (= a (car lis))
(delete (car lis))
(removeIt (cdr lis)))))
当我打字的时候
(删除“u”(ue))
作为输入,它给了我一个错误,说明它在需要2时得到了1个参数。我犯了什么错误?这是递归函数的一个很好的例子。假设已经存在一个名为my remove的函数,该函数将一个原子和一个列表作为参数,并返回没有给定原子的列表。所以(我的移除'Y'(X Y Z))=>'(X Z) 现在,当您有另一个列表(A X Y Z)而不是list'(X Y Z),即前面有一个元素A时,您将如何使用此函数? 将A与atom进行比较,然后根据元素A是否与atom匹配,将此元素A添加到将remove应用于列表其余部分的结果中。
通过这种递归,函数my remove将使用较短的列表连续调用。现在,您只需考虑基本情况,即当列表为空时,my remove函数必须返回什么。首先,进行一些外观更改:
(defun remove-it (it list)
(if (null list) 0
(if (= it (car list))
(delete (car list))
(remove-it (cdr list)))))
CL社区首选描述性和自然发音的标识符名称。不要羞于使用像list
这样的名称–CL有多个名称空间,所以您不必太担心冲突。使用连字符而不是大小写或下划线。而且
你说你不想要答案,但是想要有用的提示,所以我们来:
- 检查您的基本情况–您的结果将是一个列表,那么为什么要返回一个数字呢
- 使用适当的比较功能–=仅用于数字
- 您正在构建一个新的结果列表,因此无需
删除任何内容,只需不添加您不需要的内容即可
- 但请记住添加您想要的内容–通过
ing将您想要保留的内容添加到将函数应用于列表其余部分的结果中,来构建您的结果列表cons
- 如果不想保留一个元素,只需继续将函数应用于列表的其余部分即可
- 您将函数定义为接受两个参数,但仅使用
调用它。提供缺少的参数(cdr list)