You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CLIPS中日期比较实现:判断人员是否年满25周岁

没问题,我来帮你搞定CLIPS里的年龄判断功能,补全并完善你的代码实现。核心是要准确计算实际年龄,不能只简单做年份差——得考虑生日是否已经过了当年的日期。

完整实现代码
(deftemplate data 
    (multislot current_date (type INTEGER)) 
) 

(deffacts today 
    (data (current_date 12 4 2018)) 
) 

(deftemplate driver 
    (multislot name) 
    (multislot dateBorn) 
) 

(deffacts drivers 
    (driver (name Daniel Silva)(dateBorn 3 4 1985)) 
    (driver (name Carlos Santos)(dateBorn 3 4 2000)) 
) 

(defrule check-age-qualification
    ;; 匹配当前日期,拆分日/月/年到变量
    ?current <- (data (current_date ?curr-day ?curr-month ?curr-year))
    ;; 匹配驾驶员信息,拆分出生日期的日/月/年
    ?driver <- (driver (name ?fname ?lname) (dateBorn ?born-day ?born-month ?born-year))
    =>
    ;; 先计算年份差值
    (bind ?year-diff (- ?curr-year ?born-year))
    ;; 核心判断逻辑:年满25的两种情况
    (if (or (> ?year-diff 25) 
            (and (= ?year-diff 25) 
                 (or (> ?curr-month ?born-month) 
                     (and (= ?curr-month ?born-month) (>= ?curr-day ?born-day)))))
        then
        (printout t ?fname ?lname " is at least 25 years old." crlf)
        else
        (printout t ?fname ?lname " is under 25 years old." crlf))
)
关键逻辑说明
  • 变量拆分:把当前日期和出生日期都拆分成日、月、年三个独立变量,方便后续的精细比较。
  • 年份差计算:先算出基础的年份差值,但这只是第一步,不能直接用它和25对比。
  • 精准年龄判断:
    • 第一种情况:年份差大于25,不管生日过没过,肯定年满25;
    • 第二种情况:年份差等于25,但必须满足「当前月份大于出生月份」,或者「月份相同但当前日期大于等于出生日期」——确保生日已经过了当年,实际年龄达标。
测试运行

执行以下CLIPS命令:

(reset)
(run)

会得到输出:

Daniel Silva is at least 25 years old.
Carlos Santos is under 25 years old.

内容的提问来源于stack exchange,提问作者Duarte Antunes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:59:51