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