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

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

10.03.2012, 19:29. Просмотров 1111. Ответов 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
Эксперт С++
5810 / 3461 / 356
Регистрация: 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
Эксперт С++
5810 / 3461 / 356
Регистрация: 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
Эксперт С++
5810 / 3461 / 356
Регистрация: 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
3674 / 2408 / 316
Регистрация: 01.06.2013
Сообщений: 5,134
Записей в блоге: 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
Модератор
26406 / 13773 / 2625
Регистрация: 12.02.2012
Сообщений: 22,584
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 - 2020, vBulletin Solutions, Inc.