我想在lisp中创建一个函数,它接收一个数字和一对对的列表,并遍历对列表,并删除对的第一个元素和第二个元素之间的除法结果. pair与作为参数传递的数字不同.最后它返回一个列表,其中只包含除法结果相同的列表.
到目前为止,我有以下代码:
(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))))))
Run Code Online (Sandbox Code Playgroud)
当我尝试使用一个真实示例运行此示例时,我收到以下错误:
Error: `(1)' is not of the expected type `NUMBER'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
您的代码存在问题:
(/ (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)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |