Prolog错误:is / 2:参数未充分实例化

时间:2019-04-07 21:41:33

标签: prolog

我有一个问题,我需要使用find all将所有相关元素求和到列表中,然后使用statement计算值列表中的每个元素,然后将它们求和,但是会发生错误。 预期输出是每个元素的列表的总和(如果第四属性的元素为500,则添加0,如果第四属性为400,则添加第五属性乘以439.52,如果第四属性为300,则添加第五属性乘以728.63)应该是一个很大的数字。 发生错误的查询是:

recall_information(L, C), print_list(L).

我认为是问题所在

findall(X+Y/Year,mmyws(X+Y/Year/_/_),L),
recall_informationHelper(L, C).

这是代码

mmyws(ium+titan/2010/300/224507).
mmyws(ium+titan/2011/300/262391).
mmyws(ium+titan/2012/400/267041).
mmyws(ium+titan/2013/500/268842).
mmyws(ium+titan/2014/500/263528).

recall_information(L,C) :-
    findall(X+Y/Year,mmyws(X+Y/Year/_/_),L),
    recall_informationHelper(L,C).

recall_informationHelper([],0).
recall_informationHelper([Head | Tail] ,C) :-
    recall_informationHelper(Tail, Z),
    Head = Make + Model / Year,
    mmyws(Make+Model/Year/W/N),
    member(W,[400]),
    C is Z + N * 439.52;
    member(W,[300]),
    C is Z + N * 728.63 ;
    member(W,[500]),
    C is Z.    

1 个答案:

答案 0 :(得分:0)

加载源代码时,您得到了

?- consult("C:/problem.pl").
Warning: c:/problem.pl:20:
        Singleton variable in branch: Z
        Singleton variable in branch: W
        Singleton variable in branch: N
true.

请注意,您拥有的变量尚未bound(Z,W和N),因此

C is Z + N * 439.52

无法完成,因为ZN没有绑定。