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 没有值(value)。这是我正在测试的内容

(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/

相关文章:

java - asm/C/Python/Perl/Lisp/Scheme 寻找新东西的程序员

lisp - 在 Lisp 中打印 defstruct

count - 如何计算lisp列表中出现的次数

select - JPA - MAX of COUNT 或 SELECT FROM SELECT

php - 如何在MySQL中对列进行分组并摆脱重复的ID?

list - 如何从 Common Lisp 中的现有列表中设置某些内容

http - Common Lisp 中的 SSE 服务器

ruby-on-rails - PGError:错误:不允许在对象及其has_many对象的AR查询的WHERE子句中进行聚合

lisp 迭代函数总是返回 nil

emacs - 如何计算 Emacs 中打开的缓冲区/文件的数量?