首页 > 解决方案 > 关于在列表 LISP 中查找给定数字的相同数字的问题

问题描述

所以我试图接受两个参数,一个列表和一个数字,当且仅当数字等于列表中的任何元素时才返回 true

(defun find-num(a z)
    (if (= z (car a)) (write t))
    (if (not(= z (car a))) (find-num (cdr a)) )
    (if (not(= z (car a))) (write f) )
    )

(find-num '(1 2 3 4 5) 5)

所以我假设如果 z 等于 a ,则代码将执行这些步骤,返回 true,如果 z 不等于 a ,写入 f(返回 false)或跳转到递归函数,该函数在其余列表中找到数字,直到它找到相同的数字

但是,我收到了这样的错误

VAL/APPLY: Too few arguments (1 instead of at least 2) given to
      FIND-NUM

我不确定哪个部分搞砸了

我尝试使用 cond 语句,但也收到了同样的错误

(defun find-num(a z)
    (cond
    ( (= z (car a)) (write t) )
    ( (not(= z (car a))) (find-num (cdr a)) ) 
    ( (not(= z (car a))) (write f) )
        )
    )

(find-num '(1 2 3 4 5) 5)

标签: lispcommon-lisp

解决方案


错误信息很清楚,不是吗?

给 FIND-NUM 的参数太少(1 个而不是至少 2 个)

FIND-NUM使用一个参数调用该函数,但该函数需要两个。您的函数具有参数az。那是两个。但是你的递归调用是(find-num (cdr a)). 这只是一个论点: 的价值(cdr a)

另一个问题:f不是Lisp中false的值。f是一个未定义的变量。评估(not t)一下Lisp 中的false值到底是什么。

CL-USER > (not t)     

结果可能是什么?

然后接下来您需要检查您的函数是否返回正确的结果。


推荐阅读