这是我在这里的第一个问题,我是初学者,我正在为学校做一些功课。
我必须列出一份清单,我现在正在与这些清单斗争2天。也许有些人可以帮助我。
这就是我要做的事情:
输入这样的东西:
evaluateList([f(14),_,_,_,_,f(31),_,_],E)
E应该是:
E = [14,[_,_,_,_],31,[_,_]]
我试过这样做,但我无法得到预期的结果:
evaluateList([],[]).
evaluateList([H|T], [S]) :- var(H), do_vars([H|T],S), !.
evaluateList([f(N)|T],[N|S]) :- evaluateList(T,S), !.
do_vars([],[]).
do_vars([H|T],[H|S]) :- var(H), do_vars(T,S).
运行代码后:
evaluateList([f(14),_,_,_,_,f(31),_,_],E)
我得到了:
E = [14, _1378, _1384, _1390, _1396, 31, [_1414, _1420]]
我的意思是,我正在获取'内部列表',但仅限于最后一项。
有什么建议吗?
谢谢
答案 0 :(得分:1)
do_vars
应该'吃'列表中的元素和返回余数。因此,需要另外一个论点。例如
evaluateList([],[]).
evaluateList(L,[Vs|T]) :- do_vars(L,Vs,R), Vs\=[], !, evaluateList(R,T).
evaluateList([f(N)|T],[N|S]) :- evaluateList(T,S).
do_vars([V|L],[V|S],R) :- var(V), do_vars(L,S,R).
do_vars(R,[],R).