Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
7 / 7 / 2
Регистрация: 23.09.2012
Сообщений: 427
1

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

21.11.2013, 15:23. Показов 2051. Ответов 5
Метки нет (Все метки)

Описать функцию, которая, чередуя элементы списков: (a b c … ) и (1 2 3 …),
образует новый список ( a 1 b 2 c 3… ).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2013, 15:23
Ответы с готовыми решениями:

написать функцию которая на основе двух списков формирует новый список в котором чередуются элементы исходных
написать функцию которая на основе двух списков формирует новый список в котором чередуются...

Определить функцию MERGE которая создает из двух списков цифровых атомов новый отсортированный список
Определить функцию MERGE которая создает из двух списков цифровых атомов новый отсортированный...

Описать функцию, которая формирует список Common, включив в него элементы, ко-торые входят одновременно в список М1 и М2
Описать функцию, которая формирует список Common, включив в него элементы, ко-торые входят...

Описать функцию, которая создаёт новый список из каждого второго элемента исходного списка
Описать функцию, которая создаёт новый список из каждого второго элемента исходного списка

5
Заблокирован
29.03.2015, 14:00 2
Интересная задача...Пока что ничего толкового не приходит в голову.
Если бы тип был одинаковым, я бы сделал так:

F#
1
2
3
4
5
6
7
8
let one = [0..3]
let two = [4..7]
 
let zc lst1 lst2 = List.foldBack2 (fun el1 el2 acc  -> el1::el2::acc) lst1 lst2 []
 
one|>printfn "%A"
two|>printfn "%A"
zc one two |>printfn "%A"
Код
[0; 1; 2; 3]
[4; 5; 6; 7]
[0; 4; 1; 5; 2; 6; 3; 7]
Для продолжения нажмите любую клавишу . . .
0
1193 / 586 / 88
Регистрация: 20.09.2012
Сообщений: 1,877
29.03.2015, 14:15 3
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Если бы тип был одинаковым, я бы сделал так:
а теперь тоже самое без библиотеки List.
1
5592 / 2108 / 617
Регистрация: 11.04.2015
Сообщений: 3,556
Записей в блоге: 41
11.04.2015, 10:03 4
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

Цитата Сообщение от pycture Посмотреть сообщение
а теперь тоже самое без библиотеки List.
Простейший вариант такой
F#
1
2
3
4
5
6
7
let mergeLists list1 list2 = 
    let rec merge l1 l2 result = 
        match l1, l2 with
        | [], [] -> result
        | [], h :: t | h :: t, [] -> raise (ArgumentException("Списки разной длины"))
        | h1 :: t1, h2 :: t2 -> merge t1 t2 (result @ [ h1; h2 ])
    merge list1 list2 []
Правда тут конкатенация списков в рекурсивном вызове, на длинных списках может дать тормоза. Можно заменить result @ [ h1; h2 ] на h2::h1::result, тогда получится список в обратном порядке, если List.rev использовать нельзя, то придется реализовать самому. В результате получится что-то типа такого.
F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let mergeListsOptimized list1 list2 = 
    let rec merge l1 l2 result = 
        match l1, l2 with
        | [], [] -> result
        | [], h :: t | h :: t, [] -> raise (ArgumentException("Списки разной длины"))
        | h1 :: t1, h2 :: t2 -> merge t1 t2 (h2 :: h1 :: result)
    
    let resrev = merge list1 list2 []
    
    let rec rev l result = 
        match l with
        | [] -> result
        | h :: t -> rev t (h :: result)
    rev resrev []
1
1193 / 586 / 88
Регистрация: 20.09.2012
Сообщений: 1,877
11.04.2015, 12:39 5
diadiavova, неплохо. хотя аккумуляторы по традиции в конце аргументов не ставят
0
5592 / 2108 / 617
Регистрация: 11.04.2015
Сообщений: 3,556
Записей в блоге: 41
11.04.2015, 12:54 6
Цитата Сообщение от pycture Посмотреть сообщение
аккумуляторы по традиции в конце аргументов не ставят
Учту.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2015, 12:54

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Опишите неименованные функцию, которая: объединяет остальные элементы трех списков в один список.
1) Опишите неименованные функцию, которая: объединяет остальные элементы трех списков в один...

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

Описать и проверить процедуру или функцию, которая вставляет в список L за первым вхождением элемента Е все элементы списка L1, если Е входит в L1.
type TЭ=…; {тип элементов списка} {выбирается по желанию} список=...

Описать функцию, которая будет проверять входит ли список l1 в список l2
Здравствуйте, нужно Описать функцию, которая будет проверять входит ли список l1 в список l2. Ни...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.