【发布时间】:2018-03-24 00:52:02
【问题描述】:
我是 LISP 的初学者,所以我需要编写一个函数 (DUPLICATE-ELEMENTS L),它检查 L 中元素(原子或列表)的重复出现。
例子:
(DUPLICATE-ELEMENTS '(a b a c)) -> T
(DUPLICATE-ELEMENTS '(a b (a b)) -> NIL
(DUPLICATE-ELEMENTS '(a b (a b) c d (a b))) -> T
我发现了这个检查唯一性的函数
(defun Unique (l)
(or (null l)
(and (not (member (car l) (cdr l)))
(Unique (cdr l)))))
但我需要反之亦然,例如示例。请你帮助我好吗。
当我运行这个
(Unique '(a b a c)) 我收到了NIL,但我需要收到T
【问题讨论】:
-
太好了!学习 Lisp 很有趣。您有实际问题吗?
-
我已经更新了问题...
-
为什么不改函数UNIQUE呢?反转真值的函数称为 NOT。
-
大多数 Lisps 不区分大小写,因此您选择的名称
Unique看起来很奇怪。在现代风格中,大多数代码都是用小写的,即使它在打印出来时显示不是大写的。 -
我怎样才能使这个函数与列表一起工作?当我把这个
(DUPLICATE-ELEMENTS ‘(a b (a b))我得到NIL结果,但是当我把这个(DUPLICATE-ELEMENTS ‘(a b (a b) c d (a b)))我也得到NIL,但正确的结果应该是T
标签: lisp common-lisp