您好我正在尝试创建一个函数,其中字母列表作为参数,单个字母作为参数。我希望从列表中删除单个字母。
Promise
因此,如果我使用(defun extract-all (lett li)
(let ((new-list nil))
(dolist (letter li new-list)
(if (eql lett letter)
(setf new-list (cons nil new-list))
(setf new-list (cons letter new-list))))))
调用该函数,我希望它在(extract-all 'n '(i n t e l l))
被删除时返回i t e l l
。
答案 0 :(得分:4)
首先,你不是要删除信件 (characters),而是 symbols:
(type-of 'n)
==> SYMBOL
第二,有一个标准函数remove
可以做到这一点:
(remove 'n '(i n t e l l))
==> (I T E L L)
第三次,如果您删除了"那么"条款和reverse结果,你会得到你想要的:
(defun my-remove (object list)
(let ((new-list nil))
(dolist (element list (nreverse new-list))
(unless (eql object element)
(push element new-list)))))
(my-remove 'n '(i n t e l l))
==> (I T E L L)
注意有更多方法可以遮蔽猫,例如,
(defun my-remove (object list)
(loop for element in list
unless (eql object element)
collect element))
但是,最好使用该库。