【问题标题】:Lisp - Remove instances from a list of pairsLisp - 从对列表中删除实例
【发布时间】:2011-12-02 01:55:10
【问题描述】:

我想在 lisp 中创建一个函数,它接收一个数字和一个对列表,并遍历对列表并删除对的第一个元素和第二个元素之间的除法结果同一对的数字与作为参数传递的数字不同。最后它返回一个列表,其中只有除法结果相同的列表。

到目前为止,我有以下代码:

(defun retira-terco(num l1)
(cond ((null l1) ())
    ((not (equal num (/ (car(first l1)) (cdr(first l1)))))
                        (retira-terco num (rest l1)))
    (t (cons (first l1) (retira-terco num (rest l1))))))

当我尝试使用真实示例运行此示例时,出现以下错误:

Error: `(1)' is not of the expected type `NUMBER'

我做错了什么?

【问题讨论】:

  • 所以你想返回一个所有对的列表,这些对相乘得到你的数字?
  • 我想返回验证条件的pais列表。除法等于数字的对。我只想从原始列表中删除元素。

标签: lisp common-lisp


【解决方案1】:

您的代码的问题出在这一行:

(/ (car(first l1)) (cdr(first l1)))

(car (first l1)) 计算为一个数字,但(cdr (first l1)) 计算为一个列表。你的意思可能是(cadr (first l1))

也就是说,从 lispiness 的角度来看,这段代码并不是那么好。您有一个要过滤的条件。使用高阶编程来表达更像这样:

(defun foo (num lst)
   (remove-if (lambda (item) 
                 (equal num 
                        (/ (car item) 
                           (cadr item)))) 
              lst)))

【讨论】:

  • 谢谢,我去试试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2012-07-12
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多