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

Возвратить список из элементов под номером N

30.09.2013, 22:35. Показов 772. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые!
Я только начал изучать Lisp, и все дается с огромным трудом.
Пытаюсь решить задачу: "L – список простых списков. Возвратить список из элементов под номером N.", но не получается.
Выстрадал следующий код:
Lisp
1
2
3
4
5
(defun nElOfLists(ls n)
        (if (> n 0)
            (append  (list(nEl (car ls) n)) (nElOfLists (cdr ls) n) )
        )
)
Прошу подтолкнуть в нужном направлении, понимаю, данный код ужасен и неправилен.

Добавлено через 15 минут
Функция nEl, которая там использована, ищет последний элемент в простом списке.
Вот код полностью:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun nEl (ls n)
    (cond ((null ls) nil)
        ((= n 1) (car ls))
        ((nEl (cdr ls) (1- n)))
    )
)
 
(defun nElOfLists(ls n)
        (if (> n 0)
            (append  (list(nEl (car ls) n)) (nElOfLists (cdr ls) n) )
 
        )
)
Добавлено через 10 минут
Опять ошибся, извиняюсь.

Функция nEl, которая там использована, ищет элемент с номером N в простом списке.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2013, 22:35
Ответы с готовыми решениями:

Модули. Для заданной строки возвратить слово с заданным номером
Разработать библиотечный модуль для решения задачи: для заданной строки возвратить слово с заданным...

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

Получить список элементов, расположенных выше побочной диагонали для строки с номером i, реализовать через индексатор
Получить список элементов,расположенных выше побочной диагонали для строки с номером i,...

Из всех положительных элементов вычесть элемент под номером к1. Из всех отрицательных - число n
Дан массив и вещественных чисел. Вывести на экран новое состояние массива который: из всех...

3
1050 / 944 / 107
Регистрация: 04.11.2012
Сообщений: 974
Записей в блоге: 3
30.09.2013, 22:45 2
Тут сложнее понять вопрос, чем решить. Лучше дописать входные и выходные данные.
Наугад.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(defun -assoc (n l)
  (cond
    ((equal n (caar l)) (car l))
    (t (-assoc n (cdr l)))))
 
> (-assoc 2 '((0 . m) (1 . 7) (2 . w) (3 . e)))
(2 . w)
 
 
(defun -nth (n l)
  (cond
    ((null l) ())
    ((zerop n) (car l))
    (t (-nth (1- n) (cdr l)))))
 
> (-nth 2 '((h  m) (s 7) (i w) (e 4)))
(i w)
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
30.09.2013, 23:24 3
Цитата Сообщение от nikita-dalek Посмотреть сообщение
Функция nEl, которая там использована, ищет элемент с номером N в простом списке.
Такая функция уже есть, nth называется. Мапкарните её по вашему списку списков. Читните что-нибудь про работу со списками: фильтрация, применение функции, сворачивание.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36590 / 20320 / 4218
Регистрация: 12.02.2012
Сообщений: 33,621
Записей в блоге: 13
01.10.2013, 10:15 4
Самое правильное решение, это то, что подсказал Helter:

Lisp
1
2
3
4
5
6
7
8
(defun nn-th (lst n)
  (mapcar #'(lambda (x) (nth n x)) lst)) 
 
==> nn-th
 
(nn-th '((1 2 3) (11 22 33) (111 222 333)) 2)
 
==> (3 33 333)
Но возможно и итерационное решение:

Lisp
1
2
3
4
5
6
7
8
(defun nn-th-i (lst n)
  (iter (for i in lst) (collecting (nth n i))))
 
==> nn-th-i
 
(nn-th-i '((1 2 3) (11 22 33) (111 222 333)) 2)
 
==> (3 33 333)
и классическое рекурсивное:

Lisp
1
2
3
4
5
6
7
8
9
(defun nn-th-r (lst n)
  (cond ((null lst) nil)
        (t (cons (nth n (car lst)) (nn-th-r (cdr lst) n)))))
 
==> nn-th-r
 
(nn-th-r '((1 2 3) (11 22 33) (111 222 333)) 2)
 
==> (3 33 333)
2
01.10.2013, 10:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2013, 10:15
Помогаю со студенческими работами здесь

Отсортировать каждый столбе матрицы с номером 2i по возрастанию элементов, а с номером 2i +1 по убыванию
Отсортировать каждый столбе матрицы с номером 2i по возрастанию элементов, а с номером 2i +1 по...

Матрица: строку с номером n сделать столбцом с номером n, а столбец с номером n- строкой с номером n
Дана действительная квадратная матрица порядка n. Преобразовать матрицу по следующему правилу:...

Написать программу удаления всех элементов строки с номером k и столбца с номером 1 заданной матрицы
Написать программу удаления всех элементов строки с номером k и столбца с номером 1 заданной...

Преобразуйте матрицу по правилу: строку с номером P сделайте столбцом с номером P, а столбец с номером P сделайте строкой с номером P
Дана матрица А(N, N) и целое P. Преобразуйте матрицу по правилу: строку с номером P сделайте...


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

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

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