
Serghei
18.02.2017
15:09:10
o

Kit
18.02.2017
15:09:12

Serghei
18.02.2017
15:09:19
спасибо

? animufag ?
18.02.2017
15:09:22
аа

Google

? animufag ?
18.02.2017
15:09:33
ну ок забудь

Kit
18.02.2017
15:10:23
тебе нужна fromIntegral

Serghei
18.02.2017
15:24:16
дада
уже понял
спасибо

Alexander
18.02.2017
15:31:44
Или genericLength

Serghei
18.02.2017
17:27:51
да, genericLength удобнее
но я все равно не могу избавится от fromIntegral тут, правильно?
fluc :: [Double] -> Double
fluc [] = 0.0
fluc xs = (mp - fromIntegral av) / mp * 100 where
mp = maximum xs
av = floor $ sum xs / genericLength xs

Kit
18.02.2017
17:30:33
av = sum xs / fromIntegral xs будет иметь тип double

Serghei
18.02.2017
17:31:18
fluc [20,23,25,30,22,21,16]
-- 26.666666666666668
это проверочный результат
решаю задачки по питону на хаскеле

Google

Serghei
18.02.2017
17:32:29
я и сделал без floor но вышло "чуть меньше" :)
Write a program that accepts a comma separated string of numbers depicting the daily stock price of AXY Company. The program should calculate the biggest daily fluctuation (in terms of percentage) of the stock price on any given day.
For example, let us suppose the following is the input string:
INPUT
20,23,25,30,22,21,16
Then the corresponding biggest fluctuation is:
OUTPUT
26.6666666666667 (As the maximum fluctuation in price is between 22 and 30)

Kit
18.02.2017
17:36:31
что такое дневная флуктуация?
т.е. как она считается?

Serghei
18.02.2017
17:39:26
напишите программу которая принимает список чисел разделенных запятой (дневная цена акций компании Ъ). программа должна самое больное колебание цены в процентах за все дни
подразумевается что сколько чисел - столько дней
о
https://ru.wikipedia.org/wiki/Флуктуация

Kit
18.02.2017
17:42:49
а самое большое колебание это:
1) максимальное отклонение от среднего
2) разность между максимумом и минимумов
3) дисперсия?
из того что вы скинули я бы сказал, что флуктуация это разность между значением в списке и предыдущим значением в списке
в питоне a[i] - a[i-1]
пардон, извиняюсь, я нес ...

? animufag ?
18.02.2017
18:11:21

Serghei
18.02.2017
18:11:50
))

Kit
18.02.2017
18:13:08
или вообще иметь в виду что-то третье

Google

? animufag ?
18.02.2017
18:18:36
http://whatis.techtarget.com/definition/percent-change-percent-difference
D% = 100 (x2 - x1) / x1
я подумал что там про численные методы будет задача. а там про какую экономическую пургу.

Serghei
18.02.2017
18:20:33
хахаха

Kit
18.02.2017
18:22:37
ff :: [Double] -> [Double]
ff [x] = []
ff (x:y:xs) = 100 * (abs $ x - y) / x : ff (y:xs)
fluc = maximum . ff

Alexander
18.02.2017
18:27:52
f xs = maximum $ zipWith (\x y-> abs (x-y)) (tail xs) xs

Kit
18.02.2017
18:28:22
Кстати, у формулы есть подвох, когда в списке присутствует 0

Alexander
18.02.2017
18:34:31
А блин в процентах, я там криво написал
Криво = неправильно, но суть та же

Kit
18.02.2017
18:35:37
а еще можно было без лямбды
maximum $ map abs $ zipWith (/) (zipWith (-) (tail xs) xs) xs

Kit
18.02.2017
18:36:56
но нечетабельно!!

Serghei
18.02.2017
19:08:35
блин
сколько лет мне надо писать чтоб также коротко из головы

Alexander
18.02.2017
19:28:09
Не очень долго если это цель
Просто в чятике писать и смотреть ответы

Kit
18.02.2017
19:29:36
Через год уже само собой так будет получаться

? animufag ?
18.02.2017
19:44:18
бтв оба варианта не учитывают пустой список. уже не так красиво будет выглядеть.

Kit
18.02.2017
19:46:40
zipWith учтёт, а что бы с tail не встрять можно drop использовать

Google

? animufag ?
18.02.2017
19:48:51
ну да drop ок

Kit
18.02.2017
19:49:20
кататак maximum $ 0 : map abs $ zipWith (/) (zipWith (-) (drop 1 xs) xs) xs

? animufag ?
18.02.2017
19:49:52
maximum... эх

Kit
18.02.2017
19:50:13
перед мапом

? animufag ?
18.02.2017
19:50:34
аа ок

Ilya
18.02.2017
20:06:19

Kit
18.02.2017
20:37:13
Длинный однострочный код теряет преимущества когда не читается слева направо
Часто приходится читать с двух сторон. Или это только меня смущает?!

Admin
ERROR: S client not available

Ilya
18.02.2017
20:42:05
мне пока не приходилось разбирать чужой код на хаскелле, не считая кодов из учебников или руководств:)
но конкретно этот однострочник никаких проблем в прочтении не вызвал. сообщения выше него не читал, т.е. контекста не знал

Kit
18.02.2017
20:43:16

? animufag ?
18.02.2017
20:44:34
этот однострочник норм да. но вообще это серьёзная проблема в хаскельном комьюнити, что все стараются сделать покомпактней и (что хуже) назвать всё одной буквой
особенно в описании типа это прям железное правило называть типы a, b ,c, d... конечно обычно в контейнере типа списка нет никакой дополнительной информации о типе и там уместна произвольная буква

Ilya
18.02.2017
20:48:29
я больше фрустрирую с кода типа
(. map) . (.) . filter

Kit
18.02.2017
20:49:06

Ilya
18.02.2017
20:53:03
под влиянием этот примера, увиденного на ЛОРе, я даже придумал новый оператор "три точки" =) но являть его миру не решился

Kit
18.02.2017
20:53:48

Google

Ilya
18.02.2017
20:54:37
ну что-то типа того, да. все три аргумента выкинули

Kit
18.02.2017
20:55:29
побольшеб таких примеров, а то пока не получается в безточной нотации писать ))))

Ilya
18.02.2017
20:55:51
с сигнатурой это чит

Kit
18.02.2017
20:56:18
ее можно же руками вывести

Ilya
18.02.2017
20:56:20

Kit
18.02.2017
20:56:41
давай

? animufag ?
18.02.2017
20:56:48

Kit
18.02.2017
20:57:34

Ilya
18.02.2017
20:57:46
let (...) = (.) (.) (.)
что делает оператор "три точки"? =)

Kit
18.02.2017
20:58:50
а точки между точками не пропущены?

Ilya
18.02.2017
20:58:54
нет
можно ещё так (.) . (.)
как удобно

Dan
18.02.2017
20:59:51
(. ) ( .) Же

Kit
18.02.2017
21:00:32

Dan
18.02.2017
21:00:47
Да да да! Мне нравится хаскель!

Kit
18.02.2017
21:11:09

? animufag ?
18.02.2017
21:13:10
хз я не понял, первый аргумент функция возвращающая значение по функции. а это обычно очень специфичные функции
(. (.) (.)) :: ((a -> (a1 -> b) -> a1 -> c1) -> c) -> (a -> b -> c1) -> c
((a -> (a1 -> b) -> a1 -> c1) -> c)

Ilya
18.02.2017
21:17:52
ты неправильно переписал функцию