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
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... эх
Нурлан
maximum... эх
я нолик добавил
Нурлан
перед мапом
Влод
аа ок
Ilya
но нечетабельно!!
Мне нравится. Абсолютно читабельно на мой взгляд
Нурлан
Мне нравится. Абсолютно читабельно на мой взгляд
В строке надо найти "вход" не находите?
Нурлан
Длинный однострочный код теряет преимущества когда не читается слева направо