Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 28
1

Из списка чисел s создать новый список, меняя знак у каждого атома

18.11.2015, 09:40. Показов 1278. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
есть задание: Определите функцию (f s), которая из списка чисел s создает новый список, меняя знак у каждого атома. Исходный список не предполагается одноуровневым.
Имеется собственно и решение:
Lisp
1
2
(defun L (lst)
  (mapcar #'(lambda (x) (if (numberp x) (- x) (L x))) lst))
нашел в просторах интернета, но не понимаю в нем ничего.
Можно ли сделать тоже самое с использованием функционала, но без решеток и ламбды?
Заранее благодарен!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2015, 09:40
Ответы с готовыми решениями:

Определите функцию (f s), которая из списка чисел s создает новый список, меняя знак у каждого атома. Исходный список не предполагается одноуровневым
Определите функцию (f s), которая из списка чисел s создает новый список, меняя знак у каждого...

Дан произвольный список чисел Поменять знак у каждого из них Использовать функционалы
Дан произвольный список чисел. Поменять знак у каждого из них

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

Создать список целых чисел. Создать новый список, записав в него отрицательные элементы
Создать список целых чисел. Создать новый список, записав в него отрицательные элементы.(задачу...

2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
19.11.2015, 09:38 2
Лучший ответ Сообщение было отмечено krashaen как решение

Решение

Цитата Сообщение от krashaen Посмотреть сообщение
Можно ли сделать тоже самое с использованием функционала, но без решеток и ламбды?
- можно, но зачем? Тебе это прибавит понимания? Тем более, что этот код, "найденный в просторах Интернета" будет работать только для списков, состоящих исключительно из чисел.

Правильно так:

Lisp
1
2
3
4
5
6
7
8
(defun L (lst)
  (mapcar #'(lambda (x) (if (numberp x) (- x) (if (atom x) x  (L x)))) lst))
 
==> L
 
(L '(1 2 3 d ((q 2 3 e))))
 
==> (-1 -2 -3 d ((q -2 -3 e)))
"Без решеток и лямбды" этот код можно оформить так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun l (x)
 (mapcar 'f x))
 
==> L
 
(defun f (a)
  (if (numberp a) (- a) (if (atom a) a (l a))))
 
==> f
 
(L '(1 2 3 d ((q 2 3 e))))
 
==> (-1 -2 -3 d ((q -2 -3 e)))
А "совсем без решетки и лямбды" можно так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun ff (lst)
  (cond ((null lst) nil)
        ((numberp (car lst)) (cons (- (car lst)) (ff (cdr lst))))
        ((atom (car lst)) (cons (car lst) (ff (cdr lst))))
        (t (cons (ff (car lst)) (ff (cdr lst))))))
 
  
==> ff
 
(ff '(1 2 3 d ((q 2 3 e))))
 
==> (-1 -2 -3 d ((q -2 -3 e)))
Для понимания легче?
3
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 28
27.11.2015, 09:34  [ТС] 3
Большое спасибо! Все доходчиво расписано!
0
27.11.2015, 09:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2015, 09:34
Помогаю со студенческими работами здесь

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

Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке
Задали односвязный линейный список с целыми числами. Создать новый список, который содержит...

Создать список из целых чисел. Подсчитать количество отрицательных элементов, создав из них новый список
Создать список из целых чисел. Подсчитать количество отрицательных элементов, создав из них новый...

На основе уже имеющегося списка создать новый, вставляя заданный элемент после каждого i-го элемента
Составить программу, которая на основе уже имеющегося списка создает новый, вставляя заданный...


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

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