一些帮助在prolog中列出列表

时间:2018-06-10 03:00:59

标签: prolog

这是我在这里的第一个问题,我是初学者,我正在为学校做一些功课。

我必须列出一份清单,我现在正在与这些清单斗争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]]

我的意思是,我正在获取'内部列表',但仅限于最后一项。

有什么建议吗?

谢谢

1 个答案:

答案 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).