Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Модификация списка
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
sybrex sybrex вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.03.2007
По умолчанию 29.03.2007, 02:39

Задача состоит в том, чтобы из списка вида:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10,11,12]]
сформировать список вида:
[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]].
Запутался.... Помогите.
С вводом я разобрался:
Код:
domains
  list=real*
  list2=list*
predicates
  input_n(integer)
  input_nn(integer)
  inputmain(list2,integer,integer)
  inputlist(list,integer)
  outputmain(list2)
  outputlist(list)
clauses
  input_n(N):-write("Введите количесто списков в списке "),readint(N).
  input_nn(N):-write("Введите количество елементов в списке "),readint(N).

  inputmain([List|MainList],ListN,ElemN):-
     ListN>0,NewListN=ListN-1,
     inputlist(List,ElemN),nl,
     inputmain(MainList,NewListN,ElemN).
  inputmain([],_,_).
     
  inputlist([Element|List],ElemN):-
     ElemN>0,NewElemN=ElemN-1,
     write("Element:"),readreal(Element),
     inputlist(List,NewElemN).
  inputlist([],_).  
  
  outputmain([]).
  outputmain([List|MainList]):-
     write(" [ "),
     outputlist(List),
     write("] "),
     outputmain(MainList).
     
  outputlist([]).
  outputlist([H|T]):-
     write(H),write(" "),
     outputlist(T).
goal
  makewindow(1,2,3,"",0,0,25,80),
  input_n(List_n),input_nn(Element_n),
  inputmain(List,List_n,Element_n),
  write("[ "), outputmain(List), write(" ]").
А вот как мне теперь сформировать второй список...
Ответить с цитированием
  (#2 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,781
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 29.03.2007, 11:14

Другими словами, Вам нужно транспонировать матрицу.
Сделать это можно разными способами.
Один из простых способов - найти в каждой строке n-й элемент и собрать в n-ый столбец новой матрицы. Этот способ реализован ниже.
Можно сделать и более эффективно. Собирать в столбец головы списков-строк и хранить их хвосты, а затем продолжать делать то же самое для хвостов.

Этот фрагмент нужно вставить в Ваш код.
Код:
predicates
trans(list2, list2, integer)
trans(list2, list2, integer, integer)
get_nth(integer, list, real)
nondeterm get_nth_nd(list2, integer, real)
nondeterm member(list, list2)
clauses
get_nth(1,[A|_],A):- !.
get_nth(N,[_|L],A):- N1=N-1,get_nth(N1,L,A).

get_nth_nd(LL, N, A):- member(L, LL), get_nth(N, L, A).

member(A, [A|_]).
member(A, [_|L]):- member(A, L).

trans(LL, LL1, N):- trans(LL, LL1, 1, N).

trans(LL,[L1|LL1],C,N):-
    C<=N, 
    !,
    findall(X, get_nth_nd(LL, C, X), L1),
    C1=C+1,
    trans(LL,LL1,C1,N).
trans(_,[],_,_).

goal
%  makewindow(1,2,3,"",0,0,25,80),
  input_n(List_n),input_nn(Element_n),
  inputmain(List,List_n,Element_n),
  write("[ "), outputmain(List), write(" ]"), nl,nl,
  trans(List,ListT,Element_n),
  write("[ "), outputmain(ListT), write(" ]"), nl,nl.
Я уже успела прочувствовать, насколько удобнее операции над матрицами реализовывать в VIP7, чем в VIP5, любым способом.
Ответить с цитированием
  (#3 (permalink)) Старый
sybrex sybrex вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.03.2007
По умолчанию 29.03.2007, 19:46

Спасибо! Всё работает!
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПРОЛОГ АРИТИ.Построение списка, содержащего все элементы исходного списка, кратные 3. Марина22 Prolog 2 14.06.2011 21:08
Вывод элемента списка с заданным номером(нумерация ведется с начала списка) Voennii-314 Prolog 3 12.12.2009 19:37
Классы модификация магнитофона elenSV С/С++ 2 01.05.2009 17:11
Модификация "Чужой против Хищника" Saigex Моддинг 0 26.07.2008 20:22
OP_CACHE.ATP модификация Hidden.Object Scale Компьютерная безопасность 25 11.06.2008 08:13
Модификация задача коммивояжера Scorpion1105 Алгоритмы 3 08.05.2008 15:07
Работа с OpenOffice модификация приложения Strucka Delphi 1 26.07.2007 16:47
Шейкерная сортировка модификация сортировки обменом Freeeeek Lisp 4 28.06.2007 11:53
Модификация WYSIWYG редактора на Javascript 1303i DHTML, JavaScript, VBScript 2 08.01.2007 05:47
Модификация Half-Life 2 Anonymous Некоммерческие проекты 2 22.02.2004 05:35
Чтени и модификация данных в запущенном постороннем процессе v0r C++ Builder 2 09.01.2004 16:25
Чтение и модификация данных в запущенном постороннем процесе v0r Delphi 1 09.01.2004 13:57



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов