Некоторая помощь в составлении списка в прологе - PullRequest
0 голосов
/ 10 июня 2018

это мой первый вопрос здесь, я новичок в прологе, и я делаю домашнюю работу для школы.

Я должен составить список списков, и я боролся с ними в течение 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 голосов
/ 10 июня 2018

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).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...