这是我的功能
(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 单元的 car
和 cdr
。当你命中一个原子时,如果匹配则加 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/