如何计算某个值在列表中出现的次数

问题描述 投票:0回答:1

我正在尝试计算“Bob”这个名字在所有班级中出现的次数。

我有这些事实:

(deffacts classes
    (class 11A Peter Jack Samuel Bob Bob)
    (class 10A Lucy James John Michael Bob)
    (class 9A Bob Martin Josepth Thomas Chris Daniel)
)

预期结果是4。

我尝试寻找一个函数来计算列表中某个值出现的次数,但没有成功。

clips expert-system
1个回答
0
投票

个别班级:

CLIPS> 
(deffunction count$ (?v $?args)
   (bind ?count 0)
   (foreach ?a ?args
      (if (eq ?a ?v) then (bind ?count (+ ?count 1))))
   ?count)
CLIPS> 
(deffacts classes
    (class 11A Peter Jack Samuel Bob Bob)
    (class 10A Lucy James John Michael Bob)
    (class 9A Bob Martin Josepth Thomas Chris Daniel))
CLIPS> 
(defrule count
   (class ?class $?students)
   =>
   (println "Bobs in " ?class " : " (count$ Bob ?students)))
CLIPS> (reset)
CLIPS> (run)
Bobs in 9A : 1
Bobs in 10A : 1
Bobs in 11A : 2
CLIPS> 
© www.soinside.com 2019 - 2024. All rights reserved.