计算列表中出现 1 2 次的 Lisp 函数

标签 lisp

该函数的目的是使用 lisp 计算列表中 12 的出现次数。

我写的代码:

(defun count12 (x)
    (if (null x) 0
        (if (and (= 1 (car x)) (= 2 (cadr x)))
            (+ 1 (count12 (cdr x)))
            (+ 0 (count12 (cdr x)))
         )
     )
)

使用时出现错误:

Error(s), warning(s): *** - =: NIL is not a number

请注意,我使用的是 Lisp 在线编译器:rextester

感谢您的帮助和指导

最佳答案

当您到达列表的最后一个元素时,您将比较 2nil(nil 的 cadr nil)。

您需要测试单例列表:

(defun count12 (x)
    (if (or (null x) (null (cdr x))) 
        0
        (if (and (= 1 (car x)) (= 2 (cadr x)))
            (+ 1 (count12 (cdr x)))
            (+ 0 (count12 (cdr x))))))

关于计算列表中出现 1 2 次的 Lisp 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614140/

相关文章:

debugging - Emacs:我可以限制缓冲区中的行数吗

lisp - 如何比较用户输入的字符串?

http - 我如何通过 Guile Scheme 检查 URL 是否存在?

list - 如何将 char 转换为 common lisp 中的符号?

emacs - 当 'text-mode-hook 似乎不起作用时,我怎样才能让 emacs 显示行号?

list - 如何操作由列表组成的复杂数据结构?

mysql - "AS"clsql中的伪运算符语法

ssl - 如何在后现代而不是 cl+ssl 中使用 Lispworks comm 包进行 SSL 访问

arrays - 如何在 LISP 的函数中创建一个大小为参数的数组?

Lisp 格式化多项式