0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 2
1

Разбиение списка на подсписки

24.01.2014, 18:00. Показов 1988. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую!

Подскажите, пожалуйста, как на Haskell красиво решить вот такую задачу:

Имеется массив экспериментальных данных, состоящий из кортежей, например

Haskell
1
 type Trajectory = [ (Double,Double,Double) ]
Известно, что по меньшей мере одна величина (допустим, первая) меняется более или менее периодически, то есть моделируемая система ведет себя циклически (но при этом наблюдаются заметные флуктуации).

Нужно разбить исходный список на подсписки, в каждом из которых будут данные отдельного цикла. Например, по признаку изменения знака первой величины с минуса на плюс.
То есть исходный массив должен превратиться в список списков

Haskell
1
 type  TPeriods =  [ [(Double,Double,Double)] ]
В котором каждый из подсписков представляет собой данные одного цикла. Границы между циклами определяются сопоставлением значения определенной величины в текущем кортеже с ее значением в предыдущем или предыдущих: либо меняется знак в определенном направлении - данные режутся на циклы при переходе через 0 в положительном направлении; либо меняется с + на - знак разности текущего значения с предыдыдущим - циклы режутся по прохождению максимума в периоде.

Хорошо бы при этом еще отбросить первый и последний циклы, если они не полные.

Заранее спасибо за совет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2014, 18:00
Ответы с готовыми решениями:

Напишите функцию, находящую все непрерывные подсписки заданного списка
Напишите функцию infixesMy :: -> ], находящую все непрерывные подсписки заданного списка....

Разбиение списка на два подсписка
Задание: Написать функцию, которая разбивает список на два подсписка: элементы из начала списка,...

Разбиение списка на всевозможные подсписки
Помоните пожайлуста решить задачу: Построить все возможные подсписки заданного списка. Искал по...

Разделение списка на подсписки: в первый n элементов с начала списка, во второй оставшиеся
Определите функцию, осуществляющую разделение исходного списка на два подсписка. В первый из них...

2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36578 / 20308 / 4218
Регистрация: 12.02.2012
Сообщений: 33,607
Записей в блоге: 13
24.01.2014, 18:56 2
Не скажу, что очень красиво:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type Point = (Double,Double,Double)
 
first :: Point -> Double
first (x,y,z) = x
 
cutData' :: [Point] -> Point -> [Point]  -> [[Point]]
cutData' [] p s   = [s ++ [p]]
cutData' (q:qs) p s | ((signum (first q)) * (signum (first p))) < 0 = [s ++ [p]] ++ (cutData' qs q [])
                   | otherwise = cutData' qs q (s ++ [p])
                   
cutData :: [Point] -> [[Point]]                   
cutData q = cutData' (tail q) (head q) []
 
Main> cutData [(1,2,3),(1.5,2,3),(1.7,5,7),(1.5,8,9),(1.4,6,5),(0.9,4,5),(-0.9,5,8),(-1.2,2,3)]
 
[[(1.0,2.0,3.0),(1.5,2.0,3.0),(1.7,5.0,7.0),(1.5,8.0,9.0),(1.4,6.0,5.0),(0.9,4.0,5.0)],[(-0.9,5
.0,8.0),(-1.2,2.0,3.0)]]
1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 2
27.01.2014, 14:23  [ТС] 3
Спасибо!
0
27.01.2014, 14:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2014, 14:23
Помогаю со студенческими работами здесь

Объединить подсписки списка
Объединить подсписки списка при условии, что у каждого из подсписков есть хотя бы один взаимно...

Повторяющиеся элементы списка в подсписки
Помогите, пожалуйста, составить функцию, которая &quot;упаковывает&quot; повторяющиеся элементы списка в...

Удалить из списка неупорядоченные подсписки
Доброго времени суток! Из списка нужно удалить неупорядоченные подсписки. К примеру, если была...

Максимальный элемент списка, содержащего подсписки
Имею код, которые находит максимальный элемент списка из атомов ( defun findMax(List) (cond ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru