Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.70/254: Рейтинг темы: голосов - 254, средняя оценка - 4.70
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
13.02.2015, 23:06
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от castorsky Посмотреть сообщение
а мне вот "оператор стрелочка" непонятен xD.
Ну можно и без «оператора стрелочка»:
Haskell
1
2
3
xs = [0.5, -0.5, 1.5, 2.0]
ys = [3.5,  5.5, 3.0, -1.0]
main = print $ zipWith ((((/ 2.0) . (+ 1.0)) .) . (+)) xs ys
=)

Добавлено через 2 минуты
Цитата Сообщение от S_el Посмотреть сообщение
это что?
Code
1
List.map2 (fun x y -> (x + y + 1.0)/2.0) a b |> printfn "%A"
(скобки, обрамляющие вызов List.map2 ... не нужны)

Code
1
printfn "%A" ( List.map2 (fun x y -> (x + y + 1.0)/2.0) a b )
(а тут нужны)

Добавлено через 2 минуты
Цитата Сообщение от S_el Посмотреть сообщение
И в чем польза?
Конвееры можно комбинировать, типа того:

Code
1
2
3
4
5
6
expr1
|> process-function1
|> process-function2
|> process-function3
...
|> process-functionN
При этом результат функции 1 передастся аргументом в функцию 2 и т.д. Это как монады и do-нотация в Хаскелле.
0
Заблокирован
13.02.2015, 23:08
Цитата Сообщение от S_el Посмотреть сообщение
И в чем польза?
S_el, как ты решишь задачу, например, подсчета взвешенной суммы для массивов:
Code
1
2
let values = [|1;2;3|]
let weights = [|3;2;1|]
вывод с помощью оператора

Code
1
2
3
Array.map2 (fun x y -> x*y) values weights
|> Array.sum
|> printfn "%A"

А теперь представь, что цепочка будет намного длиннее.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 23:13
Цитата Сообщение от korvin_ Посмотреть сообщение
Конвееры можно комбинировать, типа того:
Вроде как возвращать ссылку на потоковый класс(std::cout для вывода?)

Цитата Сообщение от korvin_ Посмотреть сообщение
Это как монады и do-нотация в Хаскелле.
Незнаком.Надо аналогию ближе к плюсам,в крайнем случае Erlang

Цитата Сообщение от Ev_Hyper Посмотреть сообщение
как ты решишь задачу, например, подсчета взвешенной суммы для массивов:
Функцию и просуммирую поэлементное умножение.

Цитата Сообщение от Ev_Hyper Посмотреть сообщение
А теперь представь, что цепочка будет намного длиннее.
Всмысле больше массивов?Значит надо их в вектор пихать и вызывать с накоплением для каждого элемента.
0
Заблокирован
13.02.2015, 23:15
Цитата Сообщение от S_el Посмотреть сообщение
Всмысле больше массивов?Значит надо их в вектор пихать и вызывать с накоплением для каждого элемента.
..возьмем другую задачу: посчитать количество строк всех .txt файлов в заданной папке.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 23:17
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
посчитать количество строк всех .txt файлов в заданной папке.
Загружать по одному и считать,как иначе-то?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
13.02.2015, 23:22
Цитата Сообщение от S_el Посмотреть сообщение
Вроде как возвращать ссылку на потоковый класс(std::cout для вывода?)
Эм... Нет, в случае cout — это применение одной функции с явным заданием аргументов, тут применяются разные функции. В общем выражение

Code
1
2
3
4
5
6
expr
|> process-function1
|> process-function2
|> process-function3
...
|> process-functionN
эквивалентно выражению
Code
1
process-functionN( ...( process-function3( process-function2( process-function1(expr) ) ) ) ...)
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 23:23
Цитата Сообщение от S_el Посмотреть сообщение
Добавили как шаблонные функции в C++11.Надо будет писать begin(varrname)
спасибо за подсказку xD
Цитата Сообщение от S_el Посмотреть сообщение
И как это реализовать?
например так всё в один проход. push_back не использовал специально.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
 
int
main(void) {
 
    std::vector<double> a = {0.5, -0.5, 1.5, 2.0};
    std::vector<double> b = {3.5, 5.5, 3.0, -1.0};
    std::vector<double> c(5);
    auto i = 0;
 
    for(auto it1 = a.begin(), it2 = b.begin();
        it1 != a.end();
        ++it1, ++it2
    )
    {
        c[i] = ((*it1 + *it2) + 1) / 2;
        std::cout << c[i] << ' ';
        ++i;
    }
    return 0;
}
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
13.02.2015, 23:26
Или выражению

C++
1
2
3
4
5
6
auto expr = ...;
auto x1 = process_function1(expr);
auto x2 = process_function2(x1);
auto x3 = process_function3(x2);
...
auto xN = process_functionN(xN-1);
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 23:27
Я уж было хотел форич использовать но вспомнил что в крестах он особенный и ломает свой аргумент и передумал.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 23:27
Цитата Сообщение от castorsky Посмотреть сообщение
например так всё в один проход.
Да,действительно выглядит некрасиво.

Цитата Сообщение от korvin_ Посмотреть сообщение
эквивалентно выражению
Ага.Вот теперь понятно.
0
Заблокирован
13.02.2015, 23:29
Цитата Сообщение от castorsky Посмотреть сообщение
например так всё в один проход.
castorsky, а не проще так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
 
int main(void) 
{
    const int n = 4;
    double a[]  = {0.5, -0.5, 1.5, 2.0};
    double b[] =  {3.5, 5.5, 3.0, -1.0};
    double c[n];
    for(int i=0;i<n;i++)
    {
        c[i] = (*(a+i)+*(b+i) + 1)/2;
        std::cout << c[i] << ' ';
    }
    std::cout<<std::endl;
    return 0;
}
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 23:32
Цитата Сообщение от S_el Посмотреть сообщение
Да,действительно выглядит некрасиво
я предупреждал
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
castorsky, а не проще так?
Конечно проще, могут же помидорами закидать потому что "пишешь на крестах как на си". По сути чисто сишный код.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
13.02.2015, 23:33
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
а не проще так?
«Ты не понял, C++ не предназначен для этого, он работает по-другому.» — Наверное анонимус.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 23:34
"оператор стрелочка", это то что в хаскел "оператор точка" =)
0
Заблокирован
13.02.2015, 23:39
Цитата Сообщение от castorsky Посмотреть сообщение
Конечно проще, могут же помидорами закидать потому что "пишешь на крестах как на си". По сути чисто сишный код.
castorsky, тут С++ cout-ы =/

Цитата Сообщение от korvin_ Посмотреть сообщение
«Ты не понял, C++ не предназначен для этого, он работает по-другому.» — Наверное анонимус.
korvin_, я так и не понял для чего предназначен С++
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
14.02.2015, 00:05
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
тут С++ cout-ы =/
Всё равно си, и не важно что полностью совместим. Нельзя и точка, иначе сишник и крестов не знаешь. xD
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
я так и не понял для чего предназначен С++
Для всего же, на с++ можно грабить корованы.

Добавлено через 4 минуты
Ev_Hyper, а в F# есть variadic map?
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
14.02.2015, 07:00  [ТС]
А можете объяснить, чем function отличается от delegate?
C++
1
2
3
4
5
6
7
8
9
10
11
import std.stdio;
 
void main()
{
    auto twice = function (int x) => x * 2;
 
    auto square = delegate (int x) => x * x;
 
    foreach (i; 0 .. 10)
        writeln(twice(i), '\t', square(i));
}
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.02.2015, 07:47
Цитата Сообщение от castorsky Посмотреть сообщение
Всё равно си, и не важно что полностью совместим. Нельзя и точка, иначе сишник и крестов не знаешь. xD
Вообще то не полностью. cout и cin на чистых сях не поддерживаются.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
14.02.2015, 08:03
спасибо, кэп, я как бы о сишных массивах.

Добавлено через 1 минуту
тех, которые int(*)[n]

Добавлено через 2 минуты
Dennis Ritchie, на оффсайте все описано, или reference читать не научились? Судя по тому как "наизусть" цитируете сишный стандарт это маловероятно.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
14.02.2015, 08:10  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
на оффсайте все описано, или reference читать не научились?
На английском не очень люблю. Сейчас пытаюсь перевести и понять эту статейку:
Function Pointers, Delegates, and Lambdas
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Закрытая тема Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru