lisp - 编写一个函数 COUNT-NUMBERS 来计算列表中数字的数量

标签 lisp

我是 LISP 的初学者,我有一个问题需要你的帮助。

写一个函数 COUNT-NUMBERS 统计列表中数字的个数,如果列表中没有数字则返回“NO NUMBER”

例如,对于列表:(A 2.3 B C 4 5),它返回 3。

我已尝试使用以下代码,但它不起作用。你能帮我弄清楚吗?此外,如果列表中没有数字,我不知道如何返回“NO NUMBER”。

(defun count-numbers (x)
      (cond ((null x) 0)
                ((numberp x) 1)
                (t (+(count-numbers (car x))(count-numbers (cdr x))))))

提前致谢

最佳答案

您可以定义一个内部辅助函数来进行计数,并检查结果以决定在主函数中返回什么:

(defun number-counter (lst)
  (labels ((do-count (l)
                 (cond ((null l) 0)
                       ((numberp (car l)) (+ 1 (do-count (cdr l))))
                       (t (do-count (cdr l))))))
    (let ((r (do-count lst)))
      (if (= r 0) 'NO-NUMBER r))))

关于lisp - 编写一个函数 COUNT-NUMBERS 来计算列表中数字的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426935/

相关文章:

string - elisp 中的转义字符串

lisp - 如果你很好地掌握了函数式编程,那么学习 Lisp(或方言)有什么好处

lisp - clip正数创始人

lisp - CUDA 的任何 Lisp 扩展?

lisp - 如何从Lambda转换为函数? (LISP)

functional-programming - 如何编写 Scheme 程序来展平算术表达式?

lisp - 在 Common Lisp 中将拼写错误的文本转换为整数?

set - 奇怪的 Common Lisp 交叉行为

iteration - Lisp,向后迭代

lispworks 和 sbcl