Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 19
1

Написать предикат, расщепляющий список на два списка. Длина первого задана

18.04.2013, 16:40. Показов 2139. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, помогите решить и разобраться в задачке.
В данном языке программирования только начинаю разбираться.

Задача:
Написать предикат, расщепляющий список на два списка. Длина первого задана.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2013, 16:40
Ответы с готовыми решениями:

Сформировать динамический список, считая, что длина списка (количество элементов) задана
Описать функцию, которая вставляет в список Long за первым вхождением элемента I, значение которого...

Сформировать динамический список (стек или очередь), считая, что длина списка (количество элементов) задана
Сформировать динамический список (стек или очередь), считая, что длина списка (количество...

Написать предикат для уменьшения на 1 всех элементов числового списка кроме первого
Здравствуйте Нужна помощь в решении двух задач в swipl prolog: 1.Написать предикат для...

Написать предикат, который формирует список из наиболее часто встречающихся элементов списка
необходимо реализовать данную задачу, вот как бы нашлось такое : len(,0). len(,N) :-...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36608 / 20335 / 4222
Регистрация: 12.02.2012
Сообщений: 33,658
Записей в блоге: 13
18.04.2013, 16:54 2
1) предикат - это логическая функция (она возвращает True или False)
2) нужно от произвольного списка отщепить заданное число элементов и вернуть два списка (отщепленное и остаток)?

Добавлено через 7 минут
Можно так:

Haskell
1
2
3
4
5
6
7
8
9
10
cutList :: Int -> [a] -> [[a]]
cutList n x = [(take n x) , (drop n x)]
 
-- Проверка
 
Main> cutList 3 [11,22,33,44,55,66,77]
[[11,22,33],[44,55,66,77]]
 
Main> cutList 3 "ASDFGHJKLM"
["ASD","FGHJKLM"]
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
18.04.2013, 18:20 3
Еще можно стандартным splitAt воспользоваться.

PS. Тоже не понял, к чему тут предикат.

Добавлено через 19 минут
Вот решение «с предикатом» (takeFirst n вернет функцию-предикат), но оно получилось какое-то странное:

Haskell
1
2
3
4
5
6
7
8
import Control.Arrow
 
takeFirst :: Int -> (Int, a) -> Bool
takeFirst n = (< n) . fst
 
split :: Int -> [a] -> ([a], [a])
split n = (map snd *** map snd) . (takeWhile pred &&& dropWhile pred) . zip [0..]
    where pred = takeFirst n
Пример:
Haskell
1
2
> split 5 "helloworld"
("hello","world")
1
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
18.04.2013, 21:16 4
Цитата Сообщение от Nameless One Посмотреть сообщение
PS. Тоже не понял, к чему тут предикат.
В лисповом разделе тоже почему-то это слово часто звучит ни к месту.

Добавлено через 12 минут
Добавлю решение «с нуля» (без take и drop):
Haskell
1
2
3
splitAt n xs@(y:ys)
    | n <= 0    = ([], xs)
    | otherwise = let (l, r) = spiltAt (n-1) ys in (y:l, r)
1
18.04.2013, 21:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2013, 21:16
Помогаю со студенческими работами здесь

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

Написать предикат IndicesOf для нахождения списка индексов всех вхождений элемента в список
Написать предикат IndicesOf для нахождения списка индексов всех вхождений элемента в список. Буду...

Предикат p(U, V, L) - истинный, когда список L есть список из элементов списка U без элементов списка V (Visual Prolog)
Здравствуйте, помогите разобраться с моей реализацией Видел уже решение данной задачи другим...

Написать функцию, формирующую для данного списка список из первого, второго и последнего элементов
((l1 '(1 2 3 4 5 6 7 8))) Для данного списка написать функцию, формирующую для данного списка...


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

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