计算Lisp中的出现次数

阿尔西德斯米格

我试图用Lisp编写代码以计算Lisp列表中原子的出现。问题是代码对除原子以外的所有原子都适用,该原子()显示为NIL代码示例:

(defun flatten (list_) 
    (cond   ((atom list_) (list list_))
            ((null list_) NIL)
            (t (append (flatten (car list_)) (flatten (cdr list_))) )
    )
)

(defun toUniqueList (list_ out) 
    (cond   ((null list_) NIL)
            ((not (member (car list_) out)) (append (list (car list_)) (toUniqueList (cdr list_) (append (list (car list_)) out)) ))
            (t (toUniqueList (cdr list_) out))
    )
)

(defun countOccurences (list_ x) 
    (cond   ((null list_) 0)
            ((eql (car list_) x) (+ (countOccurences (cdr list_) x) 1))
            (t (countOccurences (cdr list_) x))
    )

)

(defun countOccurencesAll (list_) 
    (setq flatList (flatten list_))
    (setq parsed (toUniqueList flatList '()))
    (setq result '())
    (dolist (x parsed)
        (setq result (append result (list (list x (countOccurences flatList x)) ))))
    result
)

(write (countOccurencesAll '(x y z 4.6 (a x) () (5 z x) ())))
; ((X 3) (Y 1) (Z 2) (4.6 1) (A 1) (NIL 5) (5 1))

有什么想法可以展示()而不是NIL吗?

除夕夜

表达nil'nil(),和'()所有被评估,以nil将显示为nil,除非它是cdr一对将在其中只是关闭列表。例如。'(() . ())被评估为(NIL . NIL),并显示为(NIL)您对此无能为力。

那么问题来了,因为((a) (()) (c))它真的((a . nil) . ((nil . nil) . ((c . nil) . nil)))应该计数nil/ ()5次还是nilcdr成对出现时忽略而只是将其视为一个?

BTWsetqcountOccurencesAll未定义的绑定上使用in意味着您的代码受实施的影响。hyperspec并未定义应如何处理,SBCL会就其如何解释代码发出警告,而其他人可能只是选择一种解释。更好的方法是使用let定义绑定。使用散列并遍历列表一次将构成O(n)解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算列表中的出现次数

来自分类Dev

计算R中的出现次数

来自分类Dev

计算列表中的出现次数

来自分类Dev

计算列表中的出现次数

来自分类Dev

计算SQL中的位列中的出现次数

来自分类Dev

如何在LISP中创建一个递归函数来计算原子在嵌套列表中出现的次数

来自分类Dev

计算Tableau列中Null的出现次数

来自分类Dev

计算外键关系中的出现次数

来自分类Dev

查找并计算工作表中的出现次数

来自分类Dev

计算Matlab中每个元素的出现次数

来自分类Dev

如何计算列表中“无”的出现次数?

来自分类Dev

计算ArrayList中特定变量的出现次数

来自分类Dev

计算过程中的出现次数

来自分类Dev

如何计算单词在文本中的出现次数

来自分类Dev

计算数组中字母出现的次数

来自分类Dev

计算数组中的出现次数

来自分类Dev

计算列猪中的单词出现次数

来自分类Dev

计算各种Java列表中的出现次数

来自分类Dev

如何计算SQL中的出现次数

来自分类Dev

计算跨列的DataFrame中的出现次数

来自分类Dev

计算2个表中的出现次数

来自分类Dev

TSQL计算列中的出现次数

来自分类Dev

查找并计算工作表中的出现次数

来自分类Dev

如何计算Django中的出现次数?

来自分类Dev

如何计算每行中单词出现的次数

来自分类Dev

计算重复变量中的出现次数(r)

来自分类Dev

计算数组中的出现次数

来自分类Dev

计算列表中负数的出现次数

来自分类Dev

尝试计算数组中的出现次数