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

定义Prolog递归谓词:实现分钟数到对应小时和分钟数的转换

递归实现分钟转小时和分钟的Prolog谓词

没问题,我来帮你实现这个递归的Prolog谓词,完全按照你要求的「每次减60分钟、递增小时数」的逻辑来写。核心思路就是分终止条件和递归步骤两种情况处理:

% 终止条件:当分钟数在0-59之间时,小时为0,分钟保持原数值
mins_to_hours_and_mins(Mins, 0, Mins) :-
    Mins >= 0,
    Mins < 60.

% 递归步骤:分钟数≥60时,先减去60分钟,递归计算剩余分钟的小时数,最终小时数为递归结果+1
mins_to_hours_and_mins(Mins, Hours, RemainingMins) :-
    Mins >= 60,
    NewMins is Mins - 60,
    mins_to_hours_and_mins(NewMins, PrevHours, RemainingMins),
    Hours is PrevHours + 1.

代码说明

  • 终止条件:这是递归的“出口”,当输入的分钟数不足1小时时,直接返回小时数0和原分钟数,避免无限递归。我们还加了Mins >= 0的判断,防止传入负数这种无效输入。
  • 递归步骤:如果分钟数够1小时,就先减去60分钟,然后递归处理剩下的分钟数——递归会不断重复“减60、算小时”的操作,直到触发终止条件,最后再把每一层递归得到的小时数累加起来,就是最终的总小时数。

测试验证

按照你给出的示例调用:

?- mins_to_hours_and_mins(124, H, M).

运行后会得到预期结果:

H = 2, M = 4.

你还可以测试其他场景:

  • ?- mins_to_hours_and_mins(59, H, M). → H = 0, M = 59
  • ?- mins_to_hours_and_mins(60, H, M). → H = 1, M = 0
  • ?- mins_to_hours_and_mins(185, H, M). → H = 3, M = 5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:29:43