Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Alextroy11
0 / 0 / 0
Регистрация: 18.03.2017
Сообщений: 26
1

Рекурсивные функции

28.11.2017, 18:32. Просмотров 434. Ответов 6
Метки нет (Все метки)

Функция, принимающая на входе список вещественных чисел и вычисляющую их арифметическое среднее. Постарайтесь, чтобы функция осуществляла только один проход по списку.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2017, 18:32
Ответы с готовыми решениями:

Рекурсивные функции
Функция twopow n, которая вычисляет 2n, исходя из следующих соображений. Пусть необходимо возвести...

Рекурсивные функции
Помогите пожалуйста с программами. Чет совсем не понимаю этот Haskell. 1) Функция перестановки...

Рекурсивные функции
1. Определите функцию, принимающую на вход целое число n и возвращающую список, содержащий n ...

Определить рекурсивные функции для решения задачи
Определите рекурсивные функции для решения задачи: Вычислить количество вхождений в числовой список...

Рекурсивные функции: нахождение n-го члена последовательности, заданной рекуррентной формулой
Доброе время суток! Помогите пожалуйста с решением задачи. Написать программу для нахождения n-го...

6
Curry
3115 / 2130 / 261
Регистрация: 01.06.2013
Сообщений: 4,592
Записей в блоге: 9
28.11.2017, 19:03 2
Haskell
1
2
3
4
task:: Fractional a => [a] -> a
task = go 0 (0::Int) 
    where go s n [] = s / fromIntegral n
          go s n (x:xs) = go (s+x) (n+1) xs
Хотя, конечно, счётчик тоже можно было Fractional сделать, но так мне больше нравится.
2
Catstail
Модератор
25149 / 12827 / 2368
Регистрация: 12.02.2012
Сообщений: 20,904
28.11.2017, 21:22 3
Еще вариант:

Haskell
1
2
avg xs = ss / nn
         where (ss,nn) = foldr (\ x (s,n) -> (s+x,n+1)) (0.0,0.0) xs
2
Curry
3115 / 2130 / 261
Регистрация: 01.06.2013
Сообщений: 4,592
Записей в блоге: 9
28.11.2017, 23:00 4
Haskell
1
2
3
4
import Control.Arrow
    
task:: Fractional a => [a] -> a
task = uncurry (/) . foldr (\ x -> (+x) *** (+1)) (0.0,0.0)
2
_Ivana
4236 / 1947 / 248
Регистрация: 01.03.2013
Сообщений: 5,262
Записей в блоге: 22
02.12.2017, 14:09 5
ТС конечно производит отвратительное впечатление, но сама задачка известна и хороша Помнится, ее решали на всяких гурских хаскелечатах, причем, правильное решение родилось очень не сразу

В примерах выше - конструктор пары это ленивый объект, и вместо вычисления при пробежке по списку будет накапливать здоровенные санки, что неоптимально. То же самое касается первого ответа с рекурсивной функцией и аккумуляторами. Хотя там может зависеть от уровня оптимизации компилятора, может при -О3 компилятор сделает нужные оптимизации. Но задача - написать так, чтобы он понял эти намерения программиста, а не догадывался сам
2
Curry
3115 / 2130 / 261
Регистрация: 01.06.2013
Сообщений: 4,592
Записей в блоге: 9
02.12.2017, 22:38 6
Цитата Сообщение от _Ivana Посмотреть сообщение
То же самое касается первого ответа с рекурсивной функцией
Это учебный пример. ТС явно не проходит (и вряд ли будет проходить) расширения ghc. В действительности всё лечится добавлением восклицательных знаков.
Haskell
1
2
3
4
5
6
{-# LANGUAGE BangPatterns #-}
    
task:: Fractional a => [a] -> a
task = go 0 (0::Int) 
    where go s n [] = s / fromIntegral n
          go !s !n (x:xs) = go (s+x) (n+1) xs
Цитата Сообщение от _Ivana Посмотреть сообщение
Но задача - написать так, чтобы он понял эти намерения программиста, а не догадывался сам
Вообще то достоинства функциональных языков как раз и подаются как "в императивщине мы объясняем компилятору как делать, а в ФП объясняем что". Это, конечно максима, но кое что от этого имеет место быть.
1
_Ivana
4236 / 1947 / 248
Регистрация: 01.03.2013
Сообщений: 5,262
Записей в блоге: 22
02.12.2017, 23:01 7
KolodeznyDiver, все так, но ведь мы с вами уже давно играем в этой пьесе ветке форума, уже известны и заучены все роли и фразы, когда чей выход и т.п. Я должен был сказать то что сказал - это моя роль, мой текст Вы должны были ответить именно так - добавить принудительной строгости в ваше решение и сказать общие примиряющие слова И ТС сыграл свою эпизодическую роль очередного наглого халявщика просто блестяще! Так что имхо сцена и действие удались.
2
02.12.2017, 23:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2017, 23:01

Взаимно рекурсивные модули
Читаю стандарт Хаскеля 98. Из этого по идеи следует, что можно сделать так... --Файл...

Рекурсивные структуры данных с синхронным обходом
Обращаюсь за помощью к знающим тему. Ситуация такая. Есть два рекурсивных типаdata Pattern =...

Рекурсивные и не рекурсивные функции (вычисление суммы всех натуральных чисел от 1 до n)
Всем привет. Заранее извиняюсь за мб глупые вопросы и навязчивость. Но у меня есть одна просьба. ...


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

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

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