【发布时间】:2023-04-02 20:09:02
【问题描述】:
我必须编写一个 prolog 查询来打印每个孩子的总收入超过父母的家庭的家庭详细信息,我已经写过但我收到了这个错误
Arguments are not sufficiently instantiated
In:
[3] _1770 is _1776+0
[2] totalx([person(_1844,_1846,_1848,...)],_1834) at line 50
[1] '<meta-call>'((...,...)) <foreign>
这是基本代码:
family(person( john, cohen, date(17,may,1990), unemployed), person( lily, cohen,
date(9,may,1990), unemployed),[ ] ).
family(person( john, armstrong, date(7,may,1988), unemployed), person( lily, Armstrong,
date(29,may,1961), unemployed), [ ] ).
family(person( eric, baily, date(7,may,1963), works( bbc, 2200)), person( grace, baily,
date(9,may,1965), works( ntu, 1000)), [person( louie, baily, date(25,may,1983), unemployed) ] ).
family(person( eric, baily, date(7,may,1963), works( acc, 21200)), person( grace, baily,
date(9,may,1965), works( ntnu, 12000)), [person( louie, baily, date(25,may,1983), unemployed) ] ).
family(person( eric, fox, date(27,may,1970), works( bbc, 25200)), person( grace, fox,
date(9,may,1971), works( ntbu, 13000)), [person( louie, fox, date(5,may,1993), unemployed) ] ).
husband(X) :- family(X, _, _).
wife(X) :- family(_, X, _).
child(X) :- family(_, _, Children), member(X, Children).
salary(person(_, _, _, works(_, S)), S).
salary(person(_, _, _, unemployed), 0).
这是我的要求代码:
48-totalx([],0).
49-totalx([Person|L],Sum):-salary(Person,S),totalx(L,Rest),
50-Sum is S+Rest
需求查询:
family(Husband,Wife,Child),totalx(Children,IChildren),totalx([Husband],IHusband),
totalx([Wife],IWife),IChildren > IHusband+IWife.
有人可以向我解释为什么它不起作用吗?
【问题讨论】:
-
您收到警告了吗?喜欢变量
Armstrong? -
单独尝试`totalx(Children,IChildren)´。
-
不,我不只是参数没有充分实例化错误
-
我得到参数没有充分实例化在:[2] _1352 is _1358+0 [1] totalx([person(_1426,_1428,_1430,...)],_1416) 在第 51 行
标签: prolog instantiation-error