【问题标题】:Check the presence of an item in lisp检查 lisp 中是否存在项目
【发布时间】:2017-01-11 03:58:46
【问题描述】:

要完成一个练习,我需要检查一个元素是否在列表中。我知道lisp里面有member这个功能,但是我们的导师很严格,不让我们使用课程中还没有涉及到的东西。

如果只使用cond、nil、car、not、cdr、+、equal、@987654329 来检查一个原子是否在列表中的方法是什么? @?


编辑: 在多塞克发表评论后;这是一个尝试:

(defun presence (list item)
   (cond
      ((atom list) nil)
      ((equal (car list) item) t)
      ((consp list) (presence (cdr list) item))
      (t nil)
      )
   )

编辑:我更改了标题以使其与我的实际问题相匹配

【问题讨论】:

  • 是否可以使用递归并检查 item 是否等于 car?
  • @Doseke:是的,我想是的
  • atom、consp 和 t 不属于您的“仅使用”列表。
  • “尝试”似乎成功了。如果您愿意,您可以自行回答。
  • 该问题与它的标题不一致,标题说您必须返回与成员相同的结果。 member 返回您寻找的值是汽车的 cons 单元格。但是您的问题文本说“检查是否...”,它只需要一个布尔值。如果您需要像 member 一样返回 cons 单元格,那么您还有一些工作要做! :)

标签: lisp common-lisp member


【解决方案1】:

由于您使用的功能有限,我猜可能是这样的:

(defun member-2 (x xs)
  (cond ((not xs) nil)
        ((equal x (car xs)) xs)
        (t (member-2 x (cdr xs)))))

【讨论】:

  • 次要的挑剔,而不是使用NOT,最好使用ENDP,因为它可以更好地传达意图。或至少为 NULL
  • 是的。我只是使用了操作问题的约束。它包括'not'但不包括null)
猜你喜欢
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
相关资源
最近更新 更多