Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
1

Функция высших порядков изменяет знак всех положительных элементов списка чисел

10.03.2012, 19:29. Показов 1330. Ответов 9
Метки нет (Все метки)

вот просто функция, которая изменяет знак всех положительных элементов списка чисел
Haskell
1
2
3
4
m :: [Int] -> [Int]
m []=[]
m (h:t)=if h>0 then -h:m t
else h:m t
вот что нашла функция высшего порядка, но она изменяет все знаки в списке, как ограничить чтобы меняла знаки только у положительных числе
Haskell
1
2
q :: Num a => [a] -> [a]
q = map (*(-1))
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2012, 19:29
Ответы с готовыми решениями:

Функция, меняющая знак всех отрицательных элементов списка чисел (прокомментируйте)
задание: Функция makePositive, которая меняет знак всех отрицательных элементов списка чисел,...

Функция, которая меняет знак всех нечетных отрицательных элементов списка чисел
Функция, которая меняет знак всех нечетных отрицательных элементов списка чисел. Помогите...

Из-за чего не работает функция высших порядков foldr?
foldr :: (a -> b -> b) -> b -> -> b foldr f z = z foldr f z (x:xs) = f x (foldr f z xs) sum ::...

Ду высших порядков
Решить уравнения (1+x^2)y"+2xy'=x^3

9
Эксперт С++
5817 / 3469 / 357
Регистрация: 08.02.2010
Сообщений: 7,448
10.03.2012, 20:43 2
Цитата Сообщение от White Luna Посмотреть сообщение
как ограничить чтобы меняла знаки только у положительных числе
использовать условное выражение:
Haskell
1
2
q :: (Ord a, Num a) => [a] -> [a]
q = map (\n -> if n > 0 then negate n else n)
1
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
10.03.2012, 20:52  [ТС] 3
negate а это за что отвечает?
0
Эксперт С++
5817 / 3469 / 357
Регистрация: 08.02.2010
Сообщений: 7,448
10.03.2012, 20:54 4
White Luna, меняет знак своего аргумента

Еще вариант:
Haskell
1
2
q :: (Ord a, Num a) => [a] -> [a]
q = map (negate . abs)
Можно еще и через signum сделать
2
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
10.03.2012, 21:02  [ТС] 5
Nameless One, у ми ? ты по какай книжке учился? или препод хороший был? или самоучка

Добавлено через 4 минуты
а abs за что отвечает?
0
Эксперт С++
5817 / 3469 / 357
Регистрация: 08.02.2010
Сообщений: 7,448
10.03.2012, 21:03 6
Самоучка (учился по этим книжкам, ну и еще несколько книг по другим функциональным языкам программирования прочитал)

Цитата Сообщение от White Luna Посмотреть сообщение
а abs за что отвечает?
возвращает модуль числа (абсолютное значение)
1
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
10.03.2012, 21:09  [ТС] 7
спасибо большое за помощь, а книжки обяз почитаю
0
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 2
04.07.2014, 22:44 8
Можно еще так, c использованием только map:

Haskell
1
q = map (\x -> if x > 0 then x - (x * 2) else x)
0
4177 / 2722 / 390
Регистрация: 01.06.2013
Сообщений: 5,729
Записей в блоге: 9
05.07.2014, 14:00 9
Не только map. Кроме map, вы ещё использовали ф-ии (>), (-), (*). В Haskell нет различия между операторами и функциями. Можно так записать
Haskell
1
q lst =  (\x -> if (>) x 0 then  0 - x else x) `map` lst
или
Haskell
1
q =((\x -> if (>) x 0 then  negate x else x) `map`)
0
Модератор
Эксперт Python
28785 / 15612 / 3100
Регистрация: 12.02.2012
Сообщений: 25,614
Записей в блоге: 4
05.07.2014, 16:56 10
Или свертка:

Haskell
1
2
negPos :: (Num a) => [a] -> [a]
negPos = foldr (\ y acc -> ((negate . abs) y) : acc) []
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2014, 16:56

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ду высших порядков
Решить уравнения (1+x^2)y"+2xy'=x^3

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

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

Дифуры высших порядков
помогите, плз, решить уравнение (1-x*x)y''-xy'=2


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

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

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