Lisp - 从对列表中删除实例

标签 lisp common-lisp

我想在 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'

我做错了什么?

最佳答案

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

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

(car (first l1)) 求值为一个数字,而 (cdr (first l1)) 求值为一个列表。您的意思可能是 (cadr (first l1))

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

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

关于Lisp - 从对列表中删除实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8350847/

相关文章:

lisp - 这段 Lisp 代码做了什么?

lisp - 在 Common Lisp 中扩展 &rest 参数

common-lisp - 如何删除结构的 defmethod

lisp - 为什么这个引用的表格没有按预期评估

shell - CL程序作为shell脚本调用时如何使用quicklisp?

functional-programming - letrec 有什么好处?

string - 如何从 Racket 中的字符串中删除重音?

lisp clos 访问器问题

lisp - 从列表中删除列表

lisp - 所有匹配元素在列表中的位置