Alexander
Особенно с учетом того что есть параметрические типы и гадты
Dmitry
но если оно будет работать наподобие uniplate (universe) - то это же вполне ок
Мерль
[last news]
Marvin, a Haskell framework for writing chat bots (inspired by hubot)
Alexander
@voidlizard там просто проблема, что если не таскать с собой ссылку на typeable, то на руках есть только pointer в infotable
Alexander
Там есть инфа о полях, причем том pointer это или прямо так
Alexander
Поидее если держать ссылку infotable -> typeable то может что-нибудь и можно сделать и то не факт
Alexander
Т.к. информацию о параметрические структурах придется чудом восстанавливать
Quet
удивительно, что нет такого
посмотри может graphql реализации есть для хаскеля
да, там синтаксис другой, но суть примерно такая же )
Alexander
А сегодня кто до идрису дошел?
Serghei
Ребта помогите понять, где я туплю. Есть
fluc :: [Double] -> Double
fluc [] = 0.0
fluc xs = (mp - av) / mp * 100 where
mp = maximum xs
av = sum xs / length xs
Поразумевается использовать как
fluc [1.0,2.0,3.0,4.0,5.0,1.0,2.0,3.0]
Но я еще не до конца разобрался с типами. Почему я получаю в ghci
• Couldn't match expected type ‘Double’ with actual type ‘Int’
• In the second argument of ‘(/)’, namely ‘length xs’
In the expression: sum xs / length xs
In an equation for ‘av’: av = sum xs / length xs
Serghei
почему в результате деления Double на Double я получаю Int ?
Влод
:t (/)
Влод
там есть отдельный оператор для плавающей точки
Влод
см хугл
Serghei
o
Нурлан
Serghei
спасибо
Влод
аа
Влод
ну ок забудь
Нурлан
тебе нужна fromIntegral
Serghei
дада
Serghei
уже понял
Serghei
спасибо
Alexander
Или genericLength
Serghei
да, genericLength удобнее
Serghei
но я все равно не могу избавится от fromIntegral тут, правильно?
fluc :: [Double] -> Double
fluc [] = 0.0
fluc xs = (mp - fromIntegral av) / mp * 100 where
mp = maximum xs
av = floor $ sum xs / genericLength xs
Нурлан
Нурлан
av = sum xs / fromIntegral xs будет иметь тип double
Serghei
fluc [20,23,25,30,22,21,16]
-- 26.666666666666668
Serghei
это проверочный результат
Serghei
решаю задачки по питону на хаскеле
Serghei
я и сделал без floor но вышло "чуть меньше" :)
Serghei
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)
Нурлан
Нурлан
что такое дневная флуктуация?
Нурлан
т.е. как она считается?
Serghei
напишите программу которая принимает список чисел разделенных запятой (дневная цена акций компании Ъ). программа должна самое больное колебание цены в процентах за все дни
Serghei
подразумевается что сколько чисел - столько дней
Serghei
Serghei
о
Serghei
https://ru.wikipedia.org/wiki/Флуктуация
Нурлан
а самое большое колебание это:
1) максимальное отклонение от среднего
2) разность между максимумом и минимумов
3) дисперсия?
Нурлан
из того что вы скинули я бы сказал, что флуктуация это разность между значением в списке и предыдущим значением в списке
Нурлан
в питоне a[i] - a[i-1]
Нурлан
Нурлан
пардон, извиняюсь, я нес ...
Serghei
))
Нурлан
Нурлан
или вообще иметь в виду что-то третье
Нурлан
Влод
http://whatis.techtarget.com/definition/percent-change-percent-difference
Влод
D% = 100 (x2 - x1) / x1
я подумал что там про численные методы будет задача. а там про какую экономическую пургу.
Serghei
хахаха
Нурлан
Нурлан
ff :: [Double] -> [Double]
ff [x] = []
ff (x:y:xs) = 100 * (abs $ x - y) / x : ff (y:xs)
fluc = maximum . ff
Alexander
f xs = maximum $ zipWith (\x y-> abs (x-y)) (tail xs) xs
Нурлан
Нурлан
Кстати, у формулы есть подвох, когда в списке присутствует 0
Alexander
А блин в процентах, я там криво написал
Alexander
Криво = неправильно, но суть та же
Нурлан
а еще можно было без лямбды
Нурлан
maximum $ map abs $ zipWith (/) (zipWith (-) (tail xs) xs) xs
Нурлан
но нечетабельно!!
Serghei
блин
Serghei
сколько лет мне надо писать чтоб также коротко из головы
Alexander
Не очень долго если это цель
Alexander
Просто в чятике писать и смотреть ответы
Нурлан
Через год уже само собой так будет получаться
Влод
бтв оба варианта не учитывают пустой список. уже не так красиво будет выглядеть.
Нурлан
zipWith учтёт, а что бы с tail не встрять можно drop использовать
Влод
ну да drop ок
Нурлан
кататак maximum $ 0 : map abs $ zipWith (/) (zipWith (-) (drop 1 xs) xs) xs
Влод
maximum... эх
Нурлан
перед мапом
Влод
аа ок
Нурлан
Нурлан
Длинный однострочный код теряет преимущества когда не читается слева направо