删除函数在我的 Common Lisp 代码中不起作用

问题描述 投票:0回答:2

我正在编写一个函数来删除列表中的重复项,同时保留最后一个实例。我写了以下代码:

(defun remove-dupli (list)
  (setq count1 0)
  (dolist (item1 list)
    (dolist (item2 list)
      (when (equal item1 item2)
        (setf count1 (+ 1 count1))) 
      (if (> count1 1)
        (remove item1 list)))
    (setq count1 0)))

在这里,我得到了与回报相同的列表。 输入列表:(1 3 4 4 5 4 6) 输出列表:(1 3 4 4 5 4 6)

可能是什么问题?

我尝试使用

(delete)
函数而不是(删除)函数,但每个项目都被删除,并且顺序也被更改。我希望保留最后一个副本实例。

lisp common-lisp clisp
2个回答
1
投票

这里有一个提示:

remove
返回一个值。
remove
有一个
:count
命名参数。

CL-USER 3 > (let ((my-list (list 1 2 4 1 3 5 2 1))
                  (result-list (list)))
                  
              (setf result-list (remove 2 my-list :count 1))
              
              (print (list 'removing 'one 2 'from my-list
                           'result 'is result-list))

              result-list)

(REMOVING ONE 2 FROM (1 2 4 1 3 5 2 1) RESULT IS (1 4 1 3 5 2 1)) 
(1 4 1 3 5 2 1)

0
投票

救命! Lisp 中的

+
函数未添加到我的模拟银行帐户中:

(defvar *balance* 0)

(defun credit (cents)
  (+ *balance* cents))

(defun debit (cents)
  (- *balance* cents))

我调用

(credit 42)
后,
*balance*
仍然为零。与
debit
相同。

任何提示表示赞赏。

© www.soinside.com 2019 - 2024. All rights reserved.