Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 是否删除列表中的特定项?_List_Lisp_Common Lisp - Fatal编程技术网

List 是否删除列表中的特定项?

List 是否删除列表中的特定项?,list,lisp,common-lisp,List,Lisp,Common Lisp,我想先说,是的,这是我正在研究的家庭作业问题,我不想要实际的答案,也许只是朝着正确的方向轻推一下。总之,我正在上一门关于编程语言结构的课程,我们的一个项目是用lisp编写各种小程序。这需要用户输入一个列表和一个原子,然后从列表中删除原子的所有实例。我在互联网上搜索过,还没有找到那么多好的lisp资源,所以我向大家求助 不管怎么说,我们的教授给我们的东西很少,我说的很少,实际上什么都没有 这就是我目前所拥有的,但它不起作用 (defun removeIt (a lis) (if (null l

我想先说,是的,这是我正在研究的家庭作业问题,我不想要实际的答案,也许只是朝着正确的方向轻推一下。总之,我正在上一门关于编程语言结构的课程,我们的一个项目是用lisp编写各种小程序。这需要用户输入一个列表和一个原子,然后从列表中删除原子的所有实例。我在互联网上搜索过,还没有找到那么多好的lisp资源,所以我向大家求助

不管怎么说,我们的教授给我们的东西很少,我说的很少,实际上什么都没有

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

(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有多个名称空间,所以您不必太担心冲突。使用连字符而不是大小写或下划线。而且

你说你不想要答案,但是想要有用的提示,所以我们来:

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

  • 使用适当的比较功能–=仅用于数字

  • 您正在构建一个新的结果列表,因此无需
    删除任何内容,只需不添加您不需要的内容即可

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

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

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

我在网上搜索过,没有找到那么多好的lisp 资源,

哦,别这样

无论如何,我推荐你

顺便说一句,你试图实现的功能是,但是你的教授可能不会接受它作为一个解决方案,自己做是一个很好的练习。(若要获得额外积分,请尝试为嵌套列表求解。)