count - 在 L. LISP 的任何地方发现符号 A 的出现

标签 count lisp common-lisp find-occurrences

这是我的功能

(defun freq (symbol_A List_L)
    (cond ((atom (car List_L)) 
        (cond ((eq (car List_L) symbol_A) t (+ 1 (freq symbol_A (cdr List_L))))
            (t 0))) 
    (T (freq symbol_A (cdr List_L))))
)

我收到一个错误变量 ATOM 没有值。这是我正在测试的内容

(freq  'c '((a c) c e)) --> 2
(freq  'f '(((s) o ) d)) --> 0
(freq  'f '(((f) f) f f)) --> 4

无法理解我的错误在哪里。

我也试过这个:

(defun freq (a L)
  (cond
   ((null L) 0)
   ((equal a (car L)) (+ 1 (freq a (cdr L))))
   (t (freq a (cdr L)))))

最佳答案

知道 nil 是一个原子,您可以简单地递归每个 cons 单元的 carcdr。当你命中一个原子时,如果匹配则加 1,如果不匹配则加 0。

(defun freq (sym tree)
  (if (atom tree)
      (if (eq sym tree) 1 0)
      (+ (freq sym (car tree)) (freq sym (cdr tree)))))

关于count - 在 L. LISP 的任何地方发现符号 A 的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46985799/

相关文章:

common-lisp - 如何简洁地映射列表列表?

mysql - 计算具体值。 mysql

haskell - 哪些语言实现了函数式编程的特性?

sql - 如何使用 SQL SERVER 计算每个多边形与多少点相交

Lisp 递归不能正常工作

lisp - 如何用符号替换嵌套列表中的数字?

lisp - 实习生制作的符号

lisp - require 和 *modules* 在 common lisp 中被弃用了吗?

Javascript,数组

mysql - LEFT JOIN 表 B 与表 C 的行数