【问题标题】:`NIL' is not of the expected type `NUMBER'“NIL”不是预期的“NUMBER”类型
【发布时间】:2021-08-13 12:11:37
【问题描述】:

当我试图检查数字是否等于列表中的任何元素时,我收到以下错误: 'NIL' is not of the expected type 'NUMBER'

(defun check-num (li n)
  (cond
    ((= n (car li)) t)
    ((not (= n (car li))) (check-num (cdr li) n)) 
    ((not (= n (car li))) nil)))

(check-num '(1 2 3 4 5) 6)

我发现当它尝试使用空列表执行函数'check-num'时出现问题,在执行所有检查后输入的数字。

编译器尝试执行以下功能时出现错误:

(check-num nil 6)

【问题讨论】:

  • 如果你的函数有可能返回 NIL,那么使用equal 而不是=,它不会失败。 (这是我部署的应用程序中唯一的错误。而且我是一个 lisp 新手。非常好。)

标签: lisp common-lisp


【解决方案1】:

直接的问题是您从不检查列表的末尾。空列表的car 又是nil= 比较数字。 Nil 不是数字。

首先检查列表的末尾。一些小的风格问题:使用 conses 作为列表时,使用 firstrest 而不是 carcdr,按原样命名 (list),使用正确的格式。

(defun check-num (list n)
  (cond ((endp list) nil) ; <-
        ((= (first list) n) t)
        (t (check-num (rest list) n))))

但是,应该注意的是,标准中已经有几种方法可以实现此检查,例如。 g.:

(member n list)

(find n list)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多