Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 24
1

Разработать функцию, аргументом которой является список, возвращающую список, содержащий два подсписка

17.11.2013, 20:41. Просмотров 1405. Ответов 6
Метки нет (Все метки)


Lisp
1
2
3
4
Разработать функцию, аргументом которой является список, возвращающую список, содержащий два подсписка. В первый подсписок включается N очередных элементов исходного, а следующие K элементов — во второй. Затем все повторяется. N и K — аргументы функции.
    Например:
    Вход: (1 2 3 4 5 6 7 8 9 10 11) , N = 2, K = 3.
    Выход: (1 2 6 7 11), (3 4 5 8 9 10).
Есть пример с выводом 1-го списка:
Lisp
1
2
3
4
5
6
7
>(DEFUN LST2 (X LST)
(COND 
((EQL X 0) LST)
(T (LST2 (- X 1) (CONS  X LST)))))
LST2
>(LST2 5 NIL)
(1 2 3 4 5)
Подскажите пожалуйста как сделать это задание.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2013, 20:41
Ответы с готовыми решениями:

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

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

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

Разбить список на два подсписка
2) Задача. Произвольный список вида (а1,а2,...,ак) разбить на два подсписка (а1,а3,а5...) и ...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
6
Модератор
Эксперт Python
28427 / 15317 / 3020
Регистрация: 12.02.2012
Сообщений: 25,084
Записей в блоге: 4
17.11.2013, 21:03 2
А почему задача по Лиспу оказалась в разделе, посвященном Haskell? Ну ладно - модераторы перенесут... А решение вот:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun splitBy (lst n k &optional r1 (nn 0) r2 (kk 0))
  (cond ((null lst) (list (reverse r1) (reverse r2)))
        ((< nn n) (splitBy (cdr lst) n k (cons (car lst) r1) (+ nn 1) r2 kk))
        ((< kk k) (splitBy (cdr lst) n k r1 nn (cons (car lst) r2) (+ kk 1)))
        (t (splitBy (cdr lst) n k (cons (car lst) r1) 1 r2 0))))
 
==> splitBy
(splitBy '(a b c d e f g h) 2 3)
 
==> ((a b f g) (c d e h))
 
(splitBy '(1 2 3 4 5 6 7 8 9 10 11) 2 3)
 
==> ((1 2 6 7 11) (3 4 5 8 9 10))
Добавлено через 10 минут
Вот решение на Haskell:

Haskell
1
2
3
4
5
6
7
8
9
splitBy' :: [a] -> Int -> Int -> [a] -> [a] -> [[a]]
splitBy' [] _ _ r1 r2 = [r1,r2]
splitBy' x n k r1 r2  = splitBy' (drop (n+k) x) n k  (r1 ++ (take n x)) (r2 ++ (take k (drop n x)))
 
splitBy x n k = splitBy' x n k [] []
 
Main> splitBy [1,2,3,4,5,6,7,8,9,10,11] 2 3
 
[[1,2,6,7,11],[3,4,5,8,9,10]]
2
Модератор
Эксперт Python
28427 / 15317 / 3020
Регистрация: 12.02.2012
Сообщений: 25,084
Записей в блоге: 4
18.11.2013, 20:42 3
Тебя это решение не устраивает?
2
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 24
18.11.2013, 20:54  [ТС] 4
Спасибо) но надо более простым языком, а то препод будет много вопросов задавать)))
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 24
18.11.2013, 20:58  [ТС] 5
Спасибо большое)) выручил)))

Добавлено через 1 минуту
Можете вкратце объяснить как она работает, что за что отвечает и т.д.)
0
Модератор
Эксперт Python
28427 / 15317 / 3020
Регистрация: 12.02.2012
Сообщений: 25,084
Записей в блоге: 4
18.11.2013, 21:12 6
Lisp
1
2
3
4
5
6
7
8
(defun splitBy (lst n k &optional r1 (nn 0) r2 (kk 0)) ;; в r1 копится первая выборка, в r2 - вторая
                                                                     ;; n - длина первой выборки; k - второй
  (cond ((null lst) (list (reverse r1) (reverse r2)))    ;; список исчерпан - возвращаем результат
        ((< nn n) (splitBy (cdr lst) n k (cons (car lst) r1) (+ nn 1) r2 kk)) ;; если первая группа не укомплетована
                                                                                                ;; добавляем голову списка -> r1
        ((< kk k) (splitBy (cdr lst) n k r1 nn (cons (car lst) r2) (+ kk 1)))  ;; если вторая группа не укомплетована
                                                                                                ;; добавляем голову списка -> r2 
        (t (splitBy (cdr lst) n k (cons (car lst) r1) 1 r2 0))))  ;; обе группы укомплектованы -> снова начинаем с первой
2
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 24
18.11.2013, 21:24  [ТС] 7
Огромное спасибо))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2013, 21:24

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

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

Определите функцию, возвращающую список
Помогите! Определите функцию, возвращающую список, составленный из N, M и K-го элементов...

Определить функцию (разность х у), результатом которой является список атомов, представляющих множество элементов, входящих в х и не входящих в у
Объясните пожалуйста работу функции MINUS. Определить функцию (разность х у), результатом которой...

Написать функцию, возвращающую список из n копий заданного атома x
В lisp'e совсем плох. Надо решить три задачки. Написать функцию: 1.Возвращающую список из n копий...


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

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

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