gpt4 book ai didi

filter - 查找列表的模式(在常见的 LISP 中)

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:42 24 4
gpt4 key购买 nike

我需要一个递归函数,它使用自定义过滤器函数来返回列表的模式。如果有不止一种模式,它应该返回两种模式。

例如:L = (1 3 5 2 3 5) --> ((3 2) (5 2))其中第一个数字是列表中的元素,第二个数字是列表中出现的次数。

我有计算出现次数的函数:

;;; FUNCTION NAME: occr2
;;; DESCRIPTION: function counts all occurrences of an element in a list
;;; NOTES: helper function for model

(defun occr2 (k L)
(cond ((null L) 0)
((eql k (first L)) (+ 1 (occr2 k (rest L))))
(t (occr2 k (rest L)))))

;;; FUNCTION NAME: occr
;;; DESCRIPTION: function returns list of occurrence of each element in a list
;;; NOTES: helper function for model

(defun occr (L)
(cond ((null L) NIL)
(t (cons (cons (first L) (cons (occr2 (first L) L) NIL)) (occr (remv (first L) L))))))

当我在列表 '(1 3 5 2 3 5) 上运行它时 --> ((1 1) (3 2) (5 2) (2 1))现在,如何使用递归过滤器函数仅返回 (3 2) 和 (5 2)?

最佳答案

除了家庭作业,它可能看起来像这样:

(defun mode (l &aux (table (make-hash-table)))
(loop for e in l do (incf (gethash e table 0)))
(let ((max (loop for v being the hash-value of table maximize v)))
(loop for key being the hash-keys of table using (hash-value value)
when (eql value max)
collect (list key value))))

关于filter - 查找列表的模式(在常见的 LISP 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com