【发布时间】:2017-04-07 16:52:50
【问题描述】:
我正在尝试制作一个类似于 Common Lisp 中的 MEMBER 函数的函数。 所以,我想让这个函数像这样工作:
(my-member 2 '(1 4 5 5 3 2 5 6 9))
=> (2 5 6 9)
这与 MEMBER 函数的工作原理完全相同。;
(member 2 '(1 4 5 5 3 2 5 6 9))
=> (2 5 6 9)
条件是我应该使用'DO'宏来实现这个功能。 这是我为实现此功能而编写的代码:
(defun my-member (item x)
"This function works like MEMBER function."
(do ((z x (rest z))
(e (first x) (first z)))
(:when (equal item (first z))
(return z))))
但它不起作用..
(my-member 2 '(3 4 5 2 1 1))
-> (3 4 5 2 1 1)
我应该怎么做才能解决这个问题?
【问题讨论】:
-
MEMBER 不是 Lisp 中的宏。
-
:when是什么? -
糟糕,对不起。 MEMBER 是 Lisp 的内置函数!
-
一个调试器建议我使用它。如果我不把分号和'when'放在一起,就会出现一些问题。
-
哪里in the documentation 说
end-test-form需要以:when或when为前缀?你确定这是 Common Lisp 吗?
标签: lisp common-lisp