2013-12-13 5 views
0

У меня есть список: [[1,1,3],[1,2,7],[1,3,9],[2,1,2],[2,2,7],[3,1,4]]. Меня интересуют только первые два компонента каждого элемента списка. Чтобы все было правильно, я знаю, что мне не хватает компонента, например, [2,3,2]. Я могу определить максимум b в (a, b, c) в списке. Я хотел бы вставить отсутствующий элемент в нужное положение.Вставьте отсутствующий элемент в список

Я начал с:

work_list([],_,_,_). 
work_list([[A,B,_]|F],Alast,Blast,Max):- 
A==Alast, work_list(F,A,B,M). 
work_list([[A,B,_]|F],Alast,Blast,Max):- 
A>Alast, Blast<Max, work_list_miss(F,Alast,Blast,Max). 

work_list_miss(F,Alast,Blast,Max):- 
    Blast<Max, Blast1 is Blast+1, add_list([Alast,Blast,1],F,FNew). 
work_list_miss(F,Alast,Blast,Max):- 
    Blast=Max, Blast1, add_list([Alast,Blast,1],F,FNew), worklist(F,Alast,Blast,Max). 

add_list(A,B,[A|B]). 

Это не работает. Может ли кто-нибудь помочь? При внесении в список должно быть указано: [[1,1,3],[1,2,7],[1,3,9],[2,1,2],[2,2,7],[2,3,1],[3,1,4]] Спасибо!

+0

Что сказуемое вызов вы делаете и что вы имеете в виду, что «это не работает»? – lurker

+0

вы можете исправить ваш код, удаляя одиночные и неопределенные вызовы и повторять ... – CapelliC

+0

Я имею в виду, что я не получаю результат списка, который я показываю. – user3038679

ответ

0

Ваш код требует много изменений и отладки. Рассмотрим вместо того, чтобы использовать не детерминизм, чтобы получить поведение: здесь есть предикат вставки Е в список I, обрабатывает список расщеплению, и позволит вам сосредоточиться на сравнениях

insert_between(E, I, O) :- 
    append(X, [Y,Z|T], I), 
    Y =< E, E < Z -> append(X, [Y,E,Z|T], O). 
+0

Я новичок, поэтому у меня все еще есть проблемы с пониманием пролога. Что делает O в предикате? – user3038679

+1

символы: E для элемента, O для вывода, I для ввода - пожалуйста, простите мою ленивость ... – CapelliC

+0

Извините, это может показаться основным и X? – user3038679

Смежные вопросы