我正在尝试计算“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>
(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>