在prolog中将分钟转换为小时

在prolog中将分钟转换为小时,prolog,Prolog,我正在尝试使用以下代码将prolog中的总分钟数(N)转换为小时数(H)和分钟数(M)(尚未实现分钟计数): 我得到这个错误: Arguments are not sufficiently instantiated In: [2] _1440 is _1446+1 [1] mins_to_hours_and_mins(60,_1508,_1510) at line 1 H1未实例化,因此出现错误。但请注意,不需要递归,可以与其他语言类似: ?-[user]。 |:分钟到小时(N、H、M):-

我正在尝试使用以下代码将prolog中的总分钟数(N)转换为小时数(H)和分钟数(M)(尚未实现分钟计数):

我得到这个错误:

Arguments are not sufficiently instantiated
In:
[2] _1440 is _1446+1
[1] mins_to_hours_and_mins(60,_1508,_1510) at  line 1

H1未实例化,因此出现错误。但请注意,不需要递归,可以与其他语言类似:

?-[user]。
|:分钟到小时(N、H、M):-
|:H是N//60,
|:M是N模60。
|:^D%user://1已编译0.05秒,1个子句
对。
?分钟到小时(125,小时,米)。
H=2,
M=5。

根据您的要求,使用递归的可能解决方案可以是:

minutes_to_hours(Mins,Hours) :-
    (   Mins > 60 ->  
        M is Mins - 60,
        H1 is Hours + 1,
        minutes_to_hours(M,H1) ;
        format('Hours: ~w, Reminder: ~w~n',[Hours,Mins])
    ).

?- minutes_to_hours(125,0).
Hours: 2, Reminder: 5
true

但是,您应该更喜欢@capelical与
mod
/

的解决方案。您可以发布一个查询示例吗?注意,在您的代码中,N和H必须接地,因为您使用
=
is
。此外,你需要
N是N1-60
,这将触发与上面相同的错误。分钟到小时(120,H,M)感谢你的回答,我正在做的任务是关于递归的,所以我需要实现它。请更正输出,现在它是完全错误的,如果你能向OP展示如何获得计算值,会更好(即,分钟到小时/3而不是分钟到小时/2)@capelical自从OP在else分支中插入
writeln/1
后,我从谓词中排除了一个参数…顺便说一句,谢谢您的更正
minutes_to_hours(Mins,Hours) :-
    (   Mins > 60 ->  
        M is Mins - 60,
        H1 is Hours + 1,
        minutes_to_hours(M,H1) ;
        format('Hours: ~w, Reminder: ~w~n',[Hours,Mins])
    ).

?- minutes_to_hours(125,0).
Hours: 2, Reminder: 5
true